Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -1,39 +1,25 @@
|
|
1 |
import streamlit as st
|
2 |
-
import pandas as pd
|
3 |
import openai
|
4 |
import os
|
5 |
-
import
|
6 |
|
7 |
-
# OpenAI API
|
8 |
openai.api_key = os.getenv("OPENAI_API_KEY")
|
9 |
|
10 |
st.set_page_config(layout="wide")
|
11 |
|
12 |
-
|
13 |
-
|
14 |
-
uploaded_file = st.file_uploader("์ด์ ์ํ๊ธฐ๋ก๋ถ ํ์ผ ์
๋ก๋", type=['csv', 'json'])
|
15 |
-
if uploaded_file is not None:
|
16 |
-
if uploaded_file.type == 'text/csv':
|
17 |
-
data = pd.read_csv(uploaded_file)
|
18 |
-
elif uploaded_file.type == 'application/json':
|
19 |
-
data = pd.read_json(uploaded_file)
|
20 |
-
return data
|
21 |
-
return None
|
22 |
-
|
23 |
-
# ์ํ๊ธฐ๋ก๋ถ ๋ฌธ๊ตฌ ์์ฑ ํจ์
|
24 |
-
def generate_living_record(data, selected_instruction, subjects=None, major=None):
|
25 |
-
if selected_instruction == "์คยท๊ณ ๋ฑํ๊ต":
|
26 |
-
# ๊ต๊ณผ๋ชฉ๊ณผ ํฌ๋ง์ ๊ณต ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ ์์ ๋ถ๋ถ์ ์ถ๊ฐ
|
27 |
data_str = f"๊ต๊ณผ๋ชฉ: {', '.join(subjects) if subjects else ''}\n"
|
28 |
data_str += f"ํฌ๋ง์ ๊ณต: {major if major else ''}\n\n"
|
29 |
-
data_str +=
|
|
|
30 |
else:
|
31 |
-
data_str =
|
32 |
-
|
33 |
-
instruction_text = instructions.highschool_instruction if selected_instruction == "์คยท๊ณ ๋ฑํ๊ต" else instructions.instruction
|
34 |
|
35 |
response = openai.ChatCompletion.create(
|
36 |
-
model="gpt-
|
37 |
messages=[
|
38 |
{"role": "system", "content": instruction_text},
|
39 |
{"role": "user", "content": data_str}
|
@@ -46,15 +32,15 @@ def generate_living_record(data, selected_instruction, subjects=None, major=None
|
|
46 |
)
|
47 |
return response.choices[0].message.content
|
48 |
|
49 |
-
# Streamlit
|
50 |
st.title("์ํ๊ธฐ๋ก๋ถ ์์ฑ ์๋น์ค")
|
51 |
-
st.write("
|
52 |
st.write("GPT๋ ์ค์ ํ ์ ์์ต๋๋ค. ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค์ง ์๋๋ค๋ฉด ์์ฑ ๋ฒํผ์ ๋ค์ ๋๋ฌ๋ณด์ธ์.")
|
53 |
|
54 |
-
#
|
55 |
school_level = st.radio("ํ๊ต๊ธ ์ ํ", ["์ด๋ฑํ๊ต", "์คยท๊ณ ๋ฑํ๊ต"])
|
56 |
|
57 |
-
#
|
58 |
subjects = None
|
59 |
major = None
|
60 |
if school_level == "์คยท๊ณ ๋ฑํ๊ต":
|
@@ -63,10 +49,7 @@ if school_level == "์คยท๊ณ ๋ฑํ๊ต":
|
|
63 |
subjects = st.multiselect("๊ต๊ณผ๋ชฉ ์ ํ", subject_options)
|
64 |
major = st.text_input("ํฌ๋ง์ ๊ณต")
|
65 |
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
# ๋๋จธ์ง ์ฝ๋๋ ๋์ผํ๊ฒ ์ ์ง...
|
70 |
attitude_keywords = [
|
71 |
"์ง์ค๋ ฅ", "๊ณผ์ ์ดํด", "๋ฐํ", "๋ฌธ์ ํด๊ฒฐ๋ ฅ", "๊ณผ์ ์ํ", "๊ด์ฐฐ๋ ฅ",
|
72 |
"ํ๊ตฌ๋ ฅ", "์๊ธฐ ์๊ฐ ํํ", "๋
ผ๋ฆฌ์ ์ฌ๊ณ ๋ ฅ", "์ด๋์ ๊ฒฝ", "ํ๋์ฌ",
|
@@ -83,28 +66,20 @@ relationship_keywords = [
|
|
83 |
]
|
84 |
|
85 |
personality_keywords = [
|
86 |
-
"์์ ๊ฐ", "์ฑ
์๊ฐ", "ํฌ์ฉ๋ ฅ", "๊ธ์ ์ ํ๋", "์ ์ฐ์ฑ",
|
87 |
-
"
|
88 |
-
"
|
89 |
-
"
|
90 |
-
"
|
91 |
-
"๋
๋ฆฝ์ ", "์์ฒ", "์จํํจ", "๋ฐ๋ปํจ", "๋ฏธ์",
|
92 |
-
"์ฌ์น", "์ ๋จธ", "์ต์ธํจ", "์ฐ์ธํจ", "๋ถ์ ์ "
|
93 |
]
|
94 |
|
95 |
-
#
|
96 |
col1, col2 = st.columns(2)
|
97 |
|
98 |
with col1:
|
99 |
for i in range(5):
|
100 |
record_key = f"record_{i}"
|
101 |
-
if
|
102 |
-
data_value = uploaded_data.iloc[i, 0]
|
103 |
-
if pd.isna(data_value):
|
104 |
-
st.session_state[record_key] = ""
|
105 |
-
else:
|
106 |
-
st.session_state[record_key] = str(data_value)
|
107 |
-
elif record_key not in st.session_state:
|
108 |
st.session_state[record_key] = ""
|
109 |
|
110 |
with st.expander(f"์
๋ ฅ์ฐฝ {i+1}", expanded=False):
|
@@ -113,7 +88,6 @@ with col1:
|
|
113 |
st.caption(f"ํ์ฌ ์
๋ ฅ์ฐฝ ๋ฐ์ดํธ ์: {current_bytes}")
|
114 |
|
115 |
with col2:
|
116 |
-
# ํค์๋ ์ ํ ์ต์
|
117 |
st.write("ํค์๋ ์ ํ")
|
118 |
selected_attitude = st.multiselect("ํ์ตํ๋", attitude_keywords)
|
119 |
selected_relationship = st.multiselect("๊ต์ฐ๊ด๊ณ", relationship_keywords)
|
@@ -124,14 +98,11 @@ with col2:
|
|
124 |
input_data = "\n".join([st.session_state[f'record_{i}'] for i in range(5) if st.session_state[f'record_{i}']])
|
125 |
keyword_data = " ".join(selected_attitude + selected_relationship + selected_personality)
|
126 |
full_data = input_data + "\n" + keyword_data
|
127 |
-
generated_record = generate_living_record(full_data, school_level)
|
128 |
-
# ์์ฑ๋ ๊ฒฐ๊ณผ๋ฅผ ์ธ์
์ํ์ ์ ์ฅ
|
129 |
st.session_state["generated_result"] = generated_record
|
130 |
|
131 |
-
# ์์ฑ๋ ๊ฒฐ๊ณผ๋ฅผ ํ์ํ ์์ ๊ฐ๋ฅํ ํ
์คํธ ์์ญ
|
132 |
result_text = st.text_area("์์ฑ๋ ๊ฒฐ๊ณผ", key="generated_result", value=st.session_state.get("generated_result", ""), height=500)
|
133 |
|
134 |
-
# ์ธ์
์ํ์ ์ ์ฅ๋ ๊ฒฐ๊ณผ์ ๋ฐ์ดํธ ์ ๊ณ์ฐ
|
135 |
if "generated_result" in st.session_state:
|
136 |
result_bytes = len(st.session_state["generated_result"].encode('utf-8'))
|
137 |
st.caption(f"์์ฑ๋ ๊ฒฐ๊ณผ ๋ฐ์ดํธ ์: {result_bytes}")
|
|
|
1 |
import streamlit as st
|
|
|
2 |
import openai
|
3 |
import os
|
4 |
+
import json
|
5 |
|
6 |
+
# OpenAI API setup
|
7 |
openai.api_key = os.getenv("OPENAI_API_KEY")
|
8 |
|
9 |
st.set_page_config(layout="wide")
|
10 |
|
11 |
+
def generate_living_record(data, school_level, subjects=None, major=None):
|
12 |
+
if school_level == "์คยท๊ณ ๋ฑํ๊ต":
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
data_str = f"๊ต๊ณผ๋ชฉ: {', '.join(subjects) if subjects else ''}\n"
|
14 |
data_str += f"ํฌ๋ง์ ๊ณต: {major if major else ''}\n\n"
|
15 |
+
data_str += data
|
16 |
+
instruction_text = highschool_instruction
|
17 |
else:
|
18 |
+
data_str = data
|
19 |
+
instruction_text = instruction
|
|
|
20 |
|
21 |
response = openai.ChatCompletion.create(
|
22 |
+
model="gpt-4-mini",
|
23 |
messages=[
|
24 |
{"role": "system", "content": instruction_text},
|
25 |
{"role": "user", "content": data_str}
|
|
|
32 |
)
|
33 |
return response.choices[0].message.content
|
34 |
|
35 |
+
# Streamlit app
|
36 |
st.title("์ํ๊ธฐ๋ก๋ถ ์์ฑ ์๋น์ค")
|
37 |
+
st.write("์ง์ ๊ธฐ๋ก์ ์
๋ ฅํ๊ฑฐ๋ ํค์๋๋ฅผ ์ ํํ์ฌ ์ํ๊ธฐ๋ก๋ถ ์์ฑ์ ํ์ํ ๊ด์ฐฐ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.")
|
38 |
st.write("GPT๋ ์ค์ ํ ์ ์์ต๋๋ค. ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค์ง ์๋๋ค๋ฉด ์์ฑ ๋ฒํผ์ ๋ค์ ๋๋ฌ๋ณด์ธ์.")
|
39 |
|
40 |
+
# School level selection
|
41 |
school_level = st.radio("ํ๊ต๊ธ ์ ํ", ["์ด๋ฑํ๊ต", "์คยท๊ณ ๋ฑํ๊ต"])
|
42 |
|
43 |
+
# Additional fields for middle/high school
|
44 |
subjects = None
|
45 |
major = None
|
46 |
if school_level == "์คยท๊ณ ๋ฑํ๊ต":
|
|
|
49 |
subjects = st.multiselect("๊ต๊ณผ๋ชฉ ์ ํ", subject_options)
|
50 |
major = st.text_input("ํฌ๋ง์ ๊ณต")
|
51 |
|
52 |
+
# Keywords
|
|
|
|
|
|
|
53 |
attitude_keywords = [
|
54 |
"์ง์ค๋ ฅ", "๊ณผ์ ์ดํด", "๋ฐํ", "๋ฌธ์ ํด๊ฒฐ๋ ฅ", "๊ณผ์ ์ํ", "๊ด์ฐฐ๋ ฅ",
|
55 |
"ํ๊ตฌ๋ ฅ", "์๊ธฐ ์๊ฐ ํํ", "๋
ผ๋ฆฌ์ ์ฌ๊ณ ๋ ฅ", "์ด๋์ ๊ฒฝ", "ํ๋์ฌ",
|
|
|
66 |
]
|
67 |
|
68 |
personality_keywords = [
|
69 |
+
"์์ ๊ฐ", "์ฑ
์๊ฐ", "ํฌ์ฉ๋ ฅ", "๊ธ์ ์ ํ๋", "์ ์ฐ์ฑ", "๊ฐ์์ฑ", "์๋ฏผํจ",
|
70 |
+
"ํ๋ฐํจ", "์ฐจ๋ถํจ", "์ ๊ทน์ ", "์๊ทน์ ", "์์ค์", "๊ฒธ์ํจ", "์์์ ",
|
71 |
+
"๋ฌด๊ธฐ๋ ฅ", "์ฑ์ค", "์ฌ์ธํจ", "์ฐ๋งํจ", "์กฐ๊ธํจ", "๊ฑฐ์น ๋ค", "๊ธ์ ์ ",
|
72 |
+
"์น์ ํจ", "๋ถ๋
ธ", "์ธ๋ด์ฌ", "๋
๋ฆฝ์ ", "์์ฒ", "์จํํจ", "๋ฐ๋ปํจ",
|
73 |
+
"๋ฏธ์", "์ฌ์น", "์ ๋จธ", "์ต์ธํจ", "์ฐ์ธํจ", "๋ถ์ ์ "
|
|
|
|
|
74 |
]
|
75 |
|
76 |
+
# Create columns
|
77 |
col1, col2 = st.columns(2)
|
78 |
|
79 |
with col1:
|
80 |
for i in range(5):
|
81 |
record_key = f"record_{i}"
|
82 |
+
if record_key not in st.session_state:
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
st.session_state[record_key] = ""
|
84 |
|
85 |
with st.expander(f"์
๋ ฅ์ฐฝ {i+1}", expanded=False):
|
|
|
88 |
st.caption(f"ํ์ฌ ์
๋ ฅ์ฐฝ ๋ฐ์ดํธ ์: {current_bytes}")
|
89 |
|
90 |
with col2:
|
|
|
91 |
st.write("ํค์๋ ์ ํ")
|
92 |
selected_attitude = st.multiselect("ํ์ตํ๋", attitude_keywords)
|
93 |
selected_relationship = st.multiselect("๊ต์ฐ๊ด๊ณ", relationship_keywords)
|
|
|
98 |
input_data = "\n".join([st.session_state[f'record_{i}'] for i in range(5) if st.session_state[f'record_{i}']])
|
99 |
keyword_data = " ".join(selected_attitude + selected_relationship + selected_personality)
|
100 |
full_data = input_data + "\n" + keyword_data
|
101 |
+
generated_record = generate_living_record(full_data, school_level, subjects, major)
|
|
|
102 |
st.session_state["generated_result"] = generated_record
|
103 |
|
|
|
104 |
result_text = st.text_area("์์ฑ๋ ๊ฒฐ๊ณผ", key="generated_result", value=st.session_state.get("generated_result", ""), height=500)
|
105 |
|
|
|
106 |
if "generated_result" in st.session_state:
|
107 |
result_bytes = len(st.session_state["generated_result"].encode('utf-8'))
|
108 |
st.caption(f"์์ฑ๋ ๊ฒฐ๊ณผ ๋ฐ์ดํธ ์: {result_bytes}")
|