help_my_korean / app.py
JUNGU's picture
Update app.py
f44cd1a verified
import os
import openai
import streamlit as st
import pandas as pd
from io import StringIO
from io import BytesIO
import base64
# OpenAI API ์„ค์ • (ํ™˜๊ฒฝ ๋ณ€์ˆ˜์—์„œ ์ฝ์–ด์˜ด)
openai.api_key = os.getenv("OPENAI_API_KEY") # ์‹ค์ œ ์ฝ”๋“œ์—์„œ ์ฃผ์„ ํ•ด์ œ
# ์„ธ์…˜ ์ƒํƒœ ์„ค์ •
if 'result_data' not in st.session_state:
st.session_state.result_data = pd.DataFrame(columns=['์ˆœ์„œ', '์‹๋ณ„์ž', '์ž‘์—…', '๊ฒฐ๊ณผ'])
# 0. ์‚ฌ์šฉ์ž ์‹๋ณ„
user_id = st.text_input("ํ•™๋ฒˆ์ด๋‚˜ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”:")
# 1. ํ…์ŠคํŠธ ์ž…๋ ฅ
user_text = st.text_area("๋ถ„์„ํ•  ํ…์ŠคํŠธ๋ฅผ ๋ถ™์—ฌ ๋„ฃ์œผ์„ธ์š”:")
# 2. ๋ฉ”๋‰ด ์„ ํƒ
menu = st.selectbox(
"์ˆ˜ํ–‰ํ•  ์ž‘์—…์„ ์„ ํƒํ•˜์„ธ์š”:",
("์š”์•ฝํ•˜๊ธฐ", "ํ‚ค์›Œ๋“œ ์ฐพ๊ธฐ", "์ฃผ์ œ ์ฐพ๊ธฐ", "์ค‘์‹ฌ ๋ฌธ์žฅ ์ฐพ๊ธฐ", "๋ฌธ์ œ ๋งŒ๋“ค๊ธฐ")
)
# 3. ํ…์ŠคํŠธ ์ฒ˜๋ฆฌ ๋ฐ ๊ฒฐ๊ณผ ๋ˆ„์ 
if st.button("๋ถ„์„ ์‹คํ–‰"):
task_description = f"You are a helpful assistant that {menu}."
user_prompt = f"Please {menu} the following text: {user_text}. only use Korean."
if menu == "๋ฌธ์ œ ๋งŒ๋“ค๊ธฐ":
task_description += "After reading the provided passage, create a question to help students develop a factual understanding based on the text. Start with a multiple-choice question with 5 options. Provide the correct answer and offer an explanation for that answer. All content must be written using only Korean characters.{Question} {Choices} {Explanation}"
messages = [{
"role": "system",
"content": task_description
}, {
"role": "user",
"content": user_prompt
}]
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo-16k",
messages=messages,
temperature=0.7,
max_tokens=500
)
processed_text = response['choices'][0]['message']['content']
# ๊ฒฐ๊ณผ ๋ˆ„์ 
next_index = len(st.session_state.result_data) + 1
new_row = pd.DataFrame({
'์ˆœ์„œ': [next_index],
'์‹๋ณ„์ž': [user_id],
'์ž‘์—…': [menu],
'๊ฒฐ๊ณผ': [processed_text]
})
st.session_state.result_data = pd.concat([st.session_state.result_data, new_row], ignore_index=True)
# 4. ๊ฒฐ๊ณผ ํ‘œ์‹œ
st.table(st.session_state.result_data)
# 5. ํŒŒ์ผ ์ €์žฅ (CSV, UTF-8 ์ธ์ฝ”๋”ฉ)
if st.button("๊ฒฐ๊ณผ ๋‹ค์šด๋กœ๋“œ(CSV)"):
towrite = BytesIO()
downloaded_file = st.session_state.result_data.to_csv(towrite, encoding='utf-8-sig', index=False)
towrite.seek(0)
b64 = base64.b64encode(towrite.read()).decode()
st.download_button(
"๊ฒฐ๊ณผ ๋‹ค์šด๋กœ๋“œ (CSV)",
data=base64.b64decode(b64),
file_name='result.csv',
mime='text/csv'
)