JUNGU commited on
Commit
8c7fccd
ยท
verified ยท
1 Parent(s): 4f8745f

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +21 -10
src/streamlit_app.py CHANGED
@@ -39,16 +39,27 @@ class SchedulerState:
39
  # ์ „์—ญ ์Šค์ผ€์ค„๋Ÿฌ ์ƒํƒœ ๊ฐ์ฒด ์ƒ์„ฑ (์Šค๋ ˆ๋“œ ์•ˆ์—์„œ ์‚ฌ์šฉ)
40
  global_scheduler_state = SchedulerState()
41
 
42
- # API ํ‚ค ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์„ธ์…˜ ์ƒํƒœ ์ดˆ๊ธฐํ™”
43
  if 'openai_api_key' not in st.session_state:
44
- st.session_state.openai_api_key = None
 
 
 
 
 
 
 
 
 
 
 
45
 
46
- # ํ™˜๊ฒฝ ๋ณ€์ˆ˜์—์„œ API ํ‚ค ๋กœ๋“œ ์‹œ๋„
47
- load_dotenv()
48
- if os.getenv('OPENAI_API_KEY'):
49
- st.session_state.openai_api_key = os.getenv('OPENAI_API_KEY')
50
- elif 'OPENAI_API_KEY' in st.secrets:
51
- st.session_state.openai_api_key = st.secrets['OPENAI_API_KEY']
52
 
53
  # ์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก NLTK ๋ฐ์ดํ„ฐ ๊ฒฝ๋กœ ์„ค์ •
54
  nltk_data_dir = '/tmp/nltk_data'
@@ -319,7 +330,7 @@ def analyze_news_content(news_df):
319
  # OpenAI API๋ฅผ ์ด์šฉํ•œ ์ƒˆ ๊ธฐ์‚ฌ ์ƒ์„ฑ
320
  def generate_article(original_content, prompt_text):
321
  try:
322
- response = openai.chat.completions.create(
323
  model="gpt-4.1-mini",
324
  messages=[
325
  {"role": "system", "content": "๋‹น์‹ ์€ ์ „๋ฌธ์ ์ธ ๋‰ด์Šค ๊ธฐ์ž์ž…๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ƒˆ๋กœ์šด ๊ธฐ์‚ฌ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”."},
@@ -705,7 +716,7 @@ elif menu == "๊ธฐ์‚ฌ ๋ถ„์„ํ•˜๊ธฐ":
705
  openai.api_key = st.session_state.openai_api_key
706
 
707
  # ๊ฐ์ • ๋ถ„์„ ํ”„๋กฌํ”„ํŠธ ์„ค์ •
708
- response = openai.chat.completions.create(
709
  model="gpt-4.1-mini",
710
  messages=[
711
  {"role": "system", "content": "๋‹น์‹ ์€ ํ…์ŠคํŠธ์˜ ๊ฐ์ •๊ณผ ๋…ผ์กฐ๋ฅผ ๋ถ„์„ํ•˜๋Š” ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‰ด์Šค ๊ธฐ์‚ฌ์˜ ๊ฐ์ •๊ณผ ๋…ผ์กฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ , '๊ธ์ •์ ', '๋ถ€์ •์ ', '์ค‘๋ฆฝ์ ' ์ค‘ ํ•˜๋‚˜๋กœ ๋ถ„๋ฅ˜ํ•ด ์ฃผ์„ธ์š”. ๋˜ํ•œ ๊ธฐ์‚ฌ์—์„œ ๋“œ๋Ÿฌ๋‚˜๋Š” ํ•ต์‹ฌ ๊ฐ์ • ํ‚ค์›Œ๋“œ๋ฅผ 5๊ฐœ ์ถ”์ถœํ•˜๊ณ , ๊ฐ ํ‚ค์›Œ๋“œ๋ณ„๋กœ 1-10 ์‚ฌ์ด์˜ ๊ฐ•๋„ ์ ์ˆ˜๋ฅผ ๋งค๊ฒจ์ฃผ์„ธ์š”. JSON ํ˜•์‹์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‘๋‹ตํ•ด์ฃผ์„ธ์š”: {'sentiment': '๊ธ์ •์ /๋ถ€์ •์ /์ค‘๋ฆฝ์ ', 'reason': '์ด์œ  ์„ค๋ช…...', 'keywords': [{'word': 'ํ‚ค์›Œ๋“œ1', 'score': 8}, {'word': 'ํ‚ค์›Œ๋“œ2', 'score': 7}, ...]}"},
 
39
  # ์ „์—ญ ์Šค์ผ€์ค„๋Ÿฌ ์ƒํƒœ ๊ฐ์ฒด ์ƒ์„ฑ (์Šค๋ ˆ๋“œ ์•ˆ์—์„œ ์‚ฌ์šฉ)
40
  global_scheduler_state = SchedulerState()
41
 
42
+ # API ํ‚ค ์„ค์ •
43
  if 'openai_api_key' not in st.session_state:
44
+ # Hugging Face Spaces์˜ Streamlit secrets์—์„œ API ํ‚ค ๊ฐ€์ ธ์˜ค๊ธฐ
45
+ if 'OPENAI_API_KEY' in st.secrets:
46
+ st.session_state.openai_api_key = st.secrets['OPENAI_API_KEY']
47
+ # OpenAI ํด๋ผ์ด์–ธํŠธ ์ดˆ๊ธฐํ™”
48
+ from openai import OpenAI
49
+ st.session_state.openai_client = OpenAI(api_key=st.session_state.openai_api_key)
50
+ else:
51
+ st.session_state.openai_api_key = None
52
+ st.session_state.openai_client = None
53
+ # # API ํ‚ค ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์„ธ์…˜ ์ƒํƒœ ์ดˆ๊ธฐํ™”
54
+ # if 'openai_api_key' not in st.session_state:
55
+ # st.session_state.openai_api_key = None
56
 
57
+ # # ํ™˜๊ฒฝ ๋ณ€์ˆ˜์—์„œ API ํ‚ค ๋กœ๋“œ ์‹œ๋„
58
+ # load_dotenv()
59
+ # if os.getenv('OPENAI_API_KEY'):
60
+ # st.session_state.openai_api_key = os.getenv('OPENAI_API_KEY')
61
+ # elif 'OPENAI_API_KEY' in st.secrets:
62
+ # st.session_state.openai_api_key = st.secrets['OPENAI_API_KEY']
63
 
64
  # ์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก NLTK ๋ฐ์ดํ„ฐ ๊ฒฝ๋กœ ์„ค์ •
65
  nltk_data_dir = '/tmp/nltk_data'
 
330
  # OpenAI API๋ฅผ ์ด์šฉํ•œ ์ƒˆ ๊ธฐ์‚ฌ ์ƒ์„ฑ
331
  def generate_article(original_content, prompt_text):
332
  try:
333
+ response = st.session_state.openai_client.chat.completions.create(
334
  model="gpt-4.1-mini",
335
  messages=[
336
  {"role": "system", "content": "๋‹น์‹ ์€ ์ „๋ฌธ์ ์ธ ๋‰ด์Šค ๊ธฐ์ž์ž…๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ƒˆ๋กœ์šด ๊ธฐ์‚ฌ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”."},
 
716
  openai.api_key = st.session_state.openai_api_key
717
 
718
  # ๊ฐ์ • ๋ถ„์„ ํ”„๋กฌํ”„ํŠธ ์„ค์ •
719
+ response = st.session_state.openai_client.chat.completions.create(
720
  model="gpt-4.1-mini",
721
  messages=[
722
  {"role": "system", "content": "๋‹น์‹ ์€ ํ…์ŠคํŠธ์˜ ๊ฐ์ •๊ณผ ๋…ผ์กฐ๋ฅผ ๋ถ„์„ํ•˜๋Š” ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‰ด์Šค ๊ธฐ์‚ฌ์˜ ๊ฐ์ •๊ณผ ๋…ผ์กฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ , '๊ธ์ •์ ', '๋ถ€์ •์ ', '์ค‘๋ฆฝ์ ' ์ค‘ ํ•˜๋‚˜๋กœ ๋ถ„๋ฅ˜ํ•ด ์ฃผ์„ธ์š”. ๋˜ํ•œ ๊ธฐ์‚ฌ์—์„œ ๋“œ๋Ÿฌ๋‚˜๋Š” ํ•ต์‹ฌ ๊ฐ์ • ํ‚ค์›Œ๋“œ๋ฅผ 5๊ฐœ ์ถ”์ถœํ•˜๊ณ , ๊ฐ ํ‚ค์›Œ๋“œ๋ณ„๋กœ 1-10 ์‚ฌ์ด์˜ ๊ฐ•๋„ ์ ์ˆ˜๋ฅผ ๋งค๊ฒจ์ฃผ์„ธ์š”. JSON ํ˜•์‹์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‘๋‹ตํ•ด์ฃผ์„ธ์š”: {'sentiment': '๊ธ์ •์ /๋ถ€์ •์ /์ค‘๋ฆฝ์ ', 'reason': '์ด์œ  ์„ค๋ช…...', 'keywords': [{'word': 'ํ‚ค์›Œ๋“œ1', 'score': 8}, {'word': 'ํ‚ค์›Œ๋“œ2', 'score': 7}, ...]}"},