Spaces:
Sleeping
Sleeping
File size: 6,139 Bytes
829f184 91a314b 6b3d94e cc9698d 0468ba6 f4de003 e90a597 91a314b 829f184 88c0d7a 91a314b 829f184 91a314b f6ed87b 91a314b 4e0dc16 f6ed87b 9447f48 a526f83 123222c f6ed87b 9447f48 123222c 9447f48 91a314b 768f592 91a314b 5dec5f3 88c0d7a 829f184 4e0dc16 611b2bc 91a314b 6085307 611b2bc 4e0dc16 65e42f5 4e0dc16 65e42f5 4e0dc16 65e42f5 433862c 8d8ecfd 433862c fba47b5 433862c ba7c97e 7f63595 0b3b25a b3e883e 06d682a 75f1f3d 5dec5f3 bf7719a 5dec5f3 90f0234 4e0dc16 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 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
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, selected_instruction, subjects=None, major=None):
data_str = str(data)
if selected_instruction == "์คยท๊ณ ๋ฑํ๊ต" and subjects and major:
# ์ ํ๋ ๊ต๊ณผ๋ชฉ๋ค์ ๋ฌธ์์ด๋ก ๋ณํ
subjects_str = ", ".join(subjects)
# instruction ๋ฌธ์์ด ํฌ๋งคํ
instruction_text = instructions.highschool_instruction.format(
subjects=subjects_str,
major=major
)
else:
instruction_text = instructions.instruction
response = openai.ChatCompletion.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": instruction_text},
{"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
# Streamlit ์ฑ ๊ตฌ์ฑ
st.title("์ํ๊ธฐ๋ก๋ถ ์์ฑ ์๋น์ค")
st.write("๊ธฐ๋ก ์๋ฃ๊ฐ ๋ด๊ธด CSVํ์ผ ์
๋ก๋, ์ง์ ๊ธฐ๋ก์ ์
๋ ฅ, ํค์๋๋ฅผ ์ ํํ์ฌ ์ํ๊ธฐ๋ก๋ถ ์์ฑ์ ํ์ํ ๊ด์ฐฐ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.")
st.write("GPT๋ ์ค์ ํ ์ ์์ต๋๋ค. ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค์ง ์๋๋ค๋ฉด ์์ฑ ๋ฒํผ์ ๋ค์ ๋๋ฌ๋ณด์ธ์.")
# ํ๊ต๊ธ ์ ํ ๋ผ๋์ค ๋ฒํผ
school_level = st.radio("ํ๊ต๊ธ ์ ํ", ["์ด๋ฑํ๊ต", "์คยท๊ณ ๋ฑํ๊ต"])
# ์คยท๊ณ ๋ฑํ๊ต ์ ํ ์ ์ถ๊ฐ ์
๋ ฅ ํ๋
subjects = None
major = None
if school_level == "์คยท๊ณ ๋ฑํ๊ต":
subject_options = ["๊ตญ์ด", "์ํ", "์์ด", "์ฌํ", "๊ณผํ", "์์
", "๋ฏธ์ ", "์ฒด์ก",
"์ ๋ณด", "๊ธฐ์ ๊ฐ์ ", "์ 2์ธ๊ตญ์ด", "ํ๋ฌธ"]
subjects = st.multiselect("๊ต๊ณผ๋ชฉ ์ ํ", subject_options)
major = st.text_input("ํฌ๋ง์ ๊ณต")
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, school_level)
# ์์ฑ๋ ๊ฒฐ๊ณผ๋ฅผ ์ธ์
์ํ์ ์ ์ฅ
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}") |