JUNGU commited on
Commit
10bdde0
ยท
verified ยท
1 Parent(s): 2293dbc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -51
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 instructions
6
 
7
- # OpenAI API ์„ค์ •
8
  openai.api_key = os.getenv("OPENAI_API_KEY")
9
 
10
  st.set_page_config(layout="wide")
11
 
12
- # ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜
13
- def upload_and_process_file():
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 += str(data)
 
30
  else:
31
- data_str = str(data)
32
-
33
- instruction_text = instructions.highschool_instruction if selected_instruction == "์ค‘ยท๊ณ ๋“ฑํ•™๊ต" else instructions.instruction
34
 
35
  response = openai.ChatCompletion.create(
36
- model="gpt-4o-mini",
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("๊ธฐ๋ก ์ž๋ฃŒ๊ฐ€ ๋‹ด๊ธด CSVํŒŒ์ผ ์—…๋กœ๋“œ, ์ง์ ‘ ๊ธฐ๋ก์„ ์ž…๋ ฅ, ํ‚ค์›Œ๋“œ๋ฅผ ์„ ํƒํ•˜์—ฌ ์ƒํ™œ๊ธฐ๋ก๋ถ€ ์ž‘์„ฑ์— ํ•„์š”ํ•œ ๊ด€์ฐฐ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.")
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
- uploaded_data = upload_and_process_file()
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 uploaded_data is not None and i < len(uploaded_data):
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}")