Spaces:
Sleeping
Sleeping
import streamlit as st | |
import openai | |
import os | |
import instructions | |
# OpenAI API ์ค์ | |
openai.api_key = os.getenv("OPENAI_API_KEY") | |
st.set_page_config(layout="wide") | |
def generate_living_record(data, school_level, subjects=None, major=None): | |
if school_level == "์คยท๊ณ ๋ฑํ๊ต": | |
data_str = f"๊ต๊ณผ๋ชฉ: {', '.join(subjects) if subjects else ''}\n" | |
data_str += f"ํฌ๋ง์ ๊ณต: {major if major else ''}\n\n" | |
data_str += data | |
instruction_text = instructions.highschool_instruction | |
else: | |
data_str = data | |
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("์ง์ ๊ธฐ๋ก์ ์ ๋ ฅํ๊ฑฐ๋ ํค์๋๋ฅผ ์ ํํ์ฌ ์ํ๊ธฐ๋ก๋ถ ์์ฑ์ ํ์ํ ๊ด์ฐฐ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.") | |
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("ํฌ๋ง์ ๊ณต") | |
# ํค์๋ ๋ชฉ๋ก | |
attitude_keywords = [ | |
"์ง์ค๋ ฅ", "๊ณผ์ ์ดํด", "๋ฐํ", "๋ฌธ์ ํด๊ฒฐ๋ ฅ", "๊ณผ์ ์ํ", "๊ด์ฐฐ๋ ฅ", | |
"ํ๊ตฌ๋ ฅ", "์๊ธฐ ์๊ฐ ํํ", "๋ ผ๋ฆฌ์ ์ฌ๊ณ ๋ ฅ", "์ด๋์ ๊ฒฝ", "ํ๋์ฌ", | |
"๋ฆฌ๋์ฝ", "๋ ผ๋ฆฌ์ ๋นํ๋ ฅ", "๊ต๊ณผ ํ์ต ์ฑ์ทจ๋", "๋ชฉํ์์", "๊ธฐ๋ณธ ํ์ต", | |
"๋์ ๊ณผ์ ", "๋ฏธ์ ๊ฐ๊ฐ", "์์ ์ ์ฌ๋ฅ", "์์ ์ ์ฌ๋ฅ", "ํธ๊ธฐ์ฌ", | |
"์ง๋ฌธ", "๋ชจ๋ ํ๋" | |
] | |
relationship_keywords = [ | |
"ํ๋์ฑ", "์น์ ํจ", "๊ณต๊ฐ ๋ฅ๋ ฅ", "์ปค๋ฎค๋์ผ์ด์ ", "๋ฆฌ๋์ญ", "๊ฒฝ์", "ํ๋ ฅ", | |
"์ธ์ ์๊ตฌ", "์์ฌ์ํต ๋ฌธ์ ", "์ ๋ขฐ", "์ํธ์กด์ค", "๊ณต์ ", "์ดํด์ฌ", "์น๋ฐํจ", | |
"์ง์งํจ", "๋์", "๋ฐฐ๋ ค", "๊ฑฐ๋ถ", "๋น๋ฐ", "์๊ธฐ์ค์ฌ์ ", "์ธ๋ก์", "๋น๋", | |
"๋ฌด๊ด์ฌ", "์งํฌ", "๊ฐ๋ฑ", "๊ต๋ฅ ํ๋ฐํจ", "์ํต ์ํจ", "๋ค์ ํจ" | |
] | |
personality_keywords = [ | |
"์์ ๊ฐ", "์ฑ ์๊ฐ", "ํฌ์ฉ๋ ฅ", "๊ธ์ ์ ํ๋", "์ ์ฐ์ฑ", "๊ฐ์์ฑ", "์๋ฏผํจ", | |
"ํ๋ฐํจ", "์ฐจ๋ถํจ", "์ ๊ทน์ ", "์๊ทน์ ", "์์ค์", "๊ฒธ์ํจ", "์์์ ", | |
"๋ฌด๊ธฐ๋ ฅ", "์ฑ์ค", "์ฌ์ธํจ", "์ฐ๋งํจ", "์กฐ๊ธํจ", "๊ฑฐ์น ๋ค", "๊ธ์ ์ ", | |
"์น์ ํจ", "๋ถ๋ ธ", "์ธ๋ด์ฌ", "๋ ๋ฆฝ์ ", "์์ฒ", "์จํํจ", "๋ฐ๋ปํจ", | |
"๋ฏธ์", "์ฌ์น", "์ ๋จธ", "์ต์ธํจ", "์ฐ์ธํจ", "๋ถ์ ์ " | |
] | |
# ์ปฌ๋ผ ์์ฑ | |
col1, col2 = st.columns(2) | |
with col1: | |
for i in range(5): | |
record_key = f"record_{i}" | |
if 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, subjects, major) | |
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}") |