Spaces:
Sleeping
Sleeping
File size: 5,333 Bytes
829f184 91a314b 6b3d94e cc9698d 0468ba6 f4de003 88c0d7a e90a597 91a314b 829f184 88c0d7a 91a314b 829f184 91a314b 9447f48 a526f83 123222c 040a7a9 0468ba6 040a7a9 9447f48 123222c 9447f48 91a314b 768f592 2b5a147 518ef36 91a314b 5dec5f3 88c0d7a 829f184 91a314b 6085307 65e42f5 433862c 8d8ecfd 433862c fba47b5 433862c ba7c97e 7f63595 0b3b25a b3e883e 06d682a 75f1f3d 0b3b25a 5dec5f3 bf7719a 5dec5f3 90f0234 81305b7 bf7719a 81305b7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
import streamlit as st
import pandas as pd
import openai
import os
import instructions
# OpenAI API ์ค์
openai.api_key = os.getenv("OPENAI_API_KEY")
st.set_page_config(layout="wide")
# ํ์ผ ์
๋ก๋ ๋ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํจ์
def upload_and_process_file():
uploaded_file = st.file_uploader("์ด์ ์ํ๊ธฐ๋ก๋ถ ํ์ผ ์
๋ก๋", type=['csv', 'json'])
if uploaded_file is not None:
if uploaded_file.type == 'text/csv':
data = pd.read_csv(uploaded_file)
elif uploaded_file.type == 'application/json':
data = pd.read_json(uploaded_file)
return data
return None
# ์ํ๊ธฐ๋ก๋ถ ๋ฌธ๊ตฌ ์์ฑ ํจ์
def generate_living_record(data):
data_str = str(data)
response = openai.ChatCompletion.create(
model="gpt-4o-mini",
messages=[
{"role": "system",
"content": instructions.instruction
},
{"role": "user",
"content": data_str
}
],
temperature=0.7,
max_tokens=10000,
top_p=1,
frequency_penalty=0,
presence_penalty=0
)
return response.choices[0].message.content
#์ค๋ฅ๊ฐ ๋์ ์
๋ ฅ์ฐฝ ๋ด ์ง์ฐ๊ธฐ ๊ธฐ๋ฅ์ ์ญ์ ์ฒ๋ฆฌํจ
# def clear_text(key):
# st.session_state[key] = ""
# Streamlit ์ฑ ๊ตฌ์ฑ
st.title("์ํ๊ธฐ๋ก๋ถ ์์ฑ ์๋น์ค")
st.write("๊ธฐ๋ก ์๋ฃ๊ฐ ๋ด๊ธด CSVํ์ผ ์
๋ก๋, ์ง์ ๊ธฐ๋ก์ ์
๋ ฅ, ํค์๋๋ฅผ ์ ํํ์ฌ ์ํ๊ธฐ๋ก๋ถ ์์ฑ์ ํ์ํ ๊ด์ฐฐ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.")
st.write("GPT๋ ์ค์ ํ ์ ์์ต๋๋ค. ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค์ง ์๋๋ค๋ฉด ์์ฑ ๋ฒํผ์ ๋ค์ ๋๋ฌ๋ณด์ธ์.")
# ํ์ผ ์
๋ก๋ ๊ธฐ๋ฅ
uploaded_data = upload_and_process_file()
#์์ ํค์๋
attitude_keywords = [
"์ง์ค๋ ฅ", "๊ณผ์ ์ดํด", "๋ฐํ", "๋ฌธ์ ํด๊ฒฐ๋ ฅ", "๊ณผ์ ์ํ", "๊ด์ฐฐ๋ ฅ",
"ํ๊ตฌ๋ ฅ", "์๊ธฐ ์๊ฐ ํํ", "๋
ผ๋ฆฌ์ ์ฌ๊ณ ๋ ฅ", "์ด๋์ ๊ฒฝ", "ํ๋์ฌ",
"๋ฆฌ๋์ฝ", "๋
ผ๋ฆฌ์ ๋นํ๋ ฅ", "๊ต๊ณผ ํ์ต ์ฑ์ทจ๋", "๋ชฉํ์์", "๊ธฐ๋ณธ ํ์ต",
"๋์ ๊ณผ์ ", "๋ฏธ์ ๊ฐ๊ฐ", "์์ ์ ์ฌ๋ฅ", "์์
์ ์ฌ๋ฅ", "ํธ๊ธฐ์ฌ",
"์ง๋ฌธ", "๋ชจ๋ ํ๋"
]
relationship_keywords = [
"ํ๋์ฑ", "์น์ ํจ", "๊ณต๊ฐ ๋ฅ๋ ฅ", "์ปค๋ฎค๋์ผ์ด์
", "๋ฆฌ๋์ญ", "๊ฒฝ์", "ํ๋ ฅ",
"์ธ์ ์๊ตฌ", "์์ฌ์ํต ๋ฌธ์ ", "์ ๋ขฐ", "์ํธ์กด์ค", "๊ณต์ ", "์ดํด์ฌ", "์น๋ฐํจ",
"์ง์งํจ", "๋์", "๋ฐฐ๋ ค", "๊ฑฐ๋ถ", "๋น๋ฐ", "์๊ธฐ์ค์ฌ์ ", "์ธ๋ก์", "๋น๋",
"๋ฌด๊ด์ฌ", "์งํฌ", "๊ฐ๋ฑ", "๊ต๋ฅ ํ๋ฐํจ", "์ํต ์ํจ", "๋ค์ ํจ"
]
personality_keywords = [
"์์ ๊ฐ", "์ฑ
์๊ฐ", "ํฌ์ฉ๋ ฅ", "๊ธ์ ์ ํ๋", "์ ์ฐ์ฑ",
"๊ฐ์์ฑ", "์๋ฏผํจ", "ํ๋ฐํจ", "์ฐจ๋ถํจ", "์ ๊ทน์ ",
"์๊ทน์ ", "์์ค์", "๊ฒธ์ํจ", "์์ ๊ฐ", "์์์ ",
"๋ฌด๊ธฐ๋ ฅ", "์ฑ์ค", "์ฌ์ธํจ", "์ฐ๋งํจ", "์กฐ๊ธํจ",
"๊ฑฐ์น ๋ค", "๊ธ์ ์ ", "์น์ ํจ", "๋ถ๋
ธ", "์ธ๋ด์ฌ",
"๋
๋ฆฝ์ ", "์์ฒ", "์จํํจ", "๋ฐ๋ปํจ", "๋ฏธ์",
"์ฌ์น", "์ ๋จธ", "์ต์ธํจ", "์ฐ์ธํจ", "๋ถ์ ์ "
]
# ์ปฌ๋ผ ์์ฑ
col1, col2 = st.columns(2)
with col1:
for i in range(5):
record_key = f"record_{i}"
if uploaded_data is not None and i < len(uploaded_data):
data_value = uploaded_data.iloc[i, 0]
if pd.isna(data_value):
st.session_state[record_key] = ""
else:
st.session_state[record_key] = str(data_value)
elif record_key not in st.session_state:
st.session_state[record_key] = ""
with st.expander(f"์
๋ ฅ์ฐฝ {i+1}", expanded=False):
user_input = st.text_area("์ํ๊ธฐ๋ก๋ถ ๋ด์ฉ ์
๋ ฅ", key=record_key, height=150, value=st.session_state[record_key])
current_bytes = len(user_input.encode('utf-8'))
st.caption(f"ํ์ฌ ์
๋ ฅ์ฐฝ ๋ฐ์ดํธ ์: {current_bytes}")
with col2:
# ํค์๋ ์ ํ ์ต์
st.write("ํค์๋ ์ ํ")
selected_attitude = st.multiselect("ํ์ตํ๋", attitude_keywords)
selected_relationship = st.multiselect("๊ต์ฐ๊ด๊ณ", relationship_keywords)
selected_personality = st.multiselect("์ฑ๊ฒฉ", personality_keywords)
if st.button("์์ฑ"):
with st.spinner('์์ฑ์ค...'):
input_data = "\n".join([st.session_state[f'record_{i}'] for i in range(5) if st.session_state[f'record_{i}']])
keyword_data = " ".join(selected_attitude + selected_relationship + selected_personality)
full_data = input_data + "\n" + keyword_data
generated_record = generate_living_record(full_data)
# ์์ฑ๋ ๊ฒฐ๊ณผ๋ฅผ ์ธ์
์ํ์ ์ ์ฅ
st.session_state["generated_result"] = generated_record
# ์์ฑ๋ ๊ฒฐ๊ณผ๋ฅผ ํ์ํ ์์ ๊ฐ๋ฅํ ํ
์คํธ ์์ญ
result_text = st.text_area("์์ฑ๋ ๊ฒฐ๊ณผ", key="generated_result", value=st.session_state.get("generated_result", ""), height=500)
# ์ธ์
์ํ์ ์ ์ฅ๋ ๊ฒฐ๊ณผ์ ๋ฐ์ดํธ ์ ๊ณ์ฐ
if "generated_result" in st.session_state:
result_bytes = len(st.session_state["generated_result"].encode('utf-8'))
st.caption(f"์์ฑ๋ ๊ฒฐ๊ณผ ๋ฐ์ดํธ ์: {result_bytes}") |