sciencefair / app.py
ll7098ll's picture
Update app.py
287f9c4 verified
import os
import time
import streamlit as st
import google.generativeai as genai
from streamlit_extras.colored_header import colored_header
from streamlit_extras.add_vertical_space import add_vertical_space
# Google Gemini API Key ์„ค์ •
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
# ๋ชจ๋ธ ์„ค์ •
generation_config = {
"temperature": 1,
"top_p": 0.95,
"top_k": 40,
"max_output_tokens": 8192,
"response_mime_type": "text/plain",
}
model = genai.GenerativeModel(
model_name="gemini-2.0-flash",
generation_config=generation_config,
)
def generate_research_plan(question):
"""
์งˆ๋ฌธ์ด๋‚˜ ํƒ๊ตฌ์ฃผ์ œ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ํ†ตํ•ฉํƒ๊ตฌ ๊ณ„ํš์„ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜
"""
# ์ „์ฒด ํ”„๋กฌํ”„ํŠธ ์ƒ์„ฑ
prompt = f"""ํ•™์ƒ๋“ค์ด ์งˆ๋ฌธ์ด๋‚˜ ํƒ๊ตฌ์ฃผ์ œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๊ณผํ•™์ž๋กœ์„œ ํ†ตํ•ฉํƒ๊ตฌ์˜ ์ ˆ์ฐจ์— ๋”ฐ๋ผ ์‹คํ—˜์„ ๊ตฌ์ฒด์ , ๋‹จ๊ณ„์ , ์ฒด๊ณ„์ ์œผ๋กœ ์„ค๊ณ„ํ•˜๊ณ  ์˜ˆ์ƒ๋˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์„ค๋ช…ํ•ด์ค˜.
์งˆ๋ฌธ ๋ฐ ํƒ๊ตฌ ์ฃผ์ œ: {question}
ํ†ตํ•ฉํƒ๊ตฌ ๊ณผ์ •:
1. ๋ฌธ์ œ ์ธ์‹:
2. ๊ฐ€์„ค ์„ค์ •:
3. ๋ณ€์ธ ํ†ต์ œ:
4. ์ž๋ฃŒ ํ•ด์„ ๋ฐฉ๋ฒ• ๋ฐ ์ ˆ์ฐจ:
5. ๊ฒฐ๋ก  ๋„์ถœ ๋ฐฉ๋ฒ• ๋ฐ ์ ˆ์ฐจ:
6. ์˜ˆ์ƒ๋˜๋Š” ์ผ๋ฐ˜ํ™”:
7. ํƒ๊ตฌ๋ฅผ ์œ„ํ•œ ํŒ:"""
# ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐฉ์‹์œผ๋กœ ์‘๋‹ต ์ƒ์„ฑ
response = model.generate_content([prompt], stream=True)
collected_text = ""
for token in response:
chunk = token.text
collected_text += chunk
yield collected_text # ์‹ค์‹œ๊ฐ„ ์ถœ๋ ฅ์„ ์œ„ํ•ด yield ์‚ฌ์šฉ
time.sleep(0.05) # ์ถœ๋ ฅ ์†๋„ ์กฐ์ ˆ
# Streamlit Interface
colored_header(
label="ํ†ตํ•ฉํƒ๊ตฌ ๊ณ„ํš ์ƒ์„ฑ๊ธฐ",
description="๊ณผํ•™ ํƒ๊ตฌ ์ฃผ์ œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๊ณ„ํš์„ ์„ธ์›Œ๋ณด์„ธ์š”!",
color_name="blue-70",
)
add_vertical_space(1)
question = st.text_area("์งˆ๋ฌธ์ด๋‚˜ ํƒ๊ตฌ์ฃผ์ œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”", height=100)
generate_button = st.button("ํ†ตํ•ฉํƒ๊ตฌ ๊ณ„ํš ์ƒ์„ฑ")
# ์ถœ๋ ฅ ์˜์—ญ ์ •์˜
output_area = st.empty()
if generate_button and question:
output_text = ""
output_area.markdown(output_text)
try:
for partial_output in generate_research_plan(question):
output_text = partial_output
output_area.markdown(output_text)
except Exception as e:
st.error(f"์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค: {str(e)}")
# ๋ณต์‚ฌ ๋ฒ„ํŠผ ์ถ”๊ฐ€
if output_text:
if st.button("์ถœ๋ ฅ ๋‚ด์šฉ ๋ณต์‚ฌ"):
st.write(output_text)
st.success("์ถœ๋ ฅ ๋‚ด์šฉ์ด ๋ณต์‚ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!")