File size: 4,906 Bytes
829f184
6b3d94e
cc9698d
697874f
f4de003
697874f
91a314b
829f184
88c0d7a
 
10bdde0
 
2293dbc
 
10bdde0
697874f
f6ed87b
10bdde0
697874f
2293dbc
9447f48
31fdec8
123222c
f6ed87b
 
9447f48
123222c
9447f48
 
 
 
 
91a314b
768f592
697874f
91a314b
10bdde0
88c0d7a
829f184
697874f
4e0dc16
 
697874f
611b2bc
 
 
 
 
 
 
 
697874f
65e42f5
4e0dc16
 
 
 
 
65e42f5
4e0dc16
65e42f5
 
 
 
 
 
 
 
10bdde0
 
 
 
 
65e42f5
 
697874f
433862c
8d8ecfd
433862c
fba47b5
433862c
10bdde0
7f63595
0b3b25a
b3e883e
06d682a
75f1f3d
 
 
5dec5f3
 
 
 
 
 
90f0234
 
 
 
 
10bdde0
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
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}")