HanJun commited on
Commit
16cf3af
ยท
verified ยท
1 Parent(s): 111824e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +57 -11
app.py CHANGED
@@ -20,6 +20,10 @@ from selenium.common.exceptions import TimeoutException, WebDriverException
20
  from webdriver_manager.chrome import ChromeDriverManager
21
  from PIL import Image
22
  import requests
 
 
 
 
23
 
24
  # ์ „์—ญ ๋ณ€์ˆ˜
25
  driver = None
@@ -31,7 +35,19 @@ def get_claude_client():
31
  api_key = os.getenv("ANTHROPIC_API_KEY")
32
  if not api_key:
33
  raise ValueError("ANTHROPIC_API_KEY ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.")
34
- return anthropic.Anthropic(api_key=api_key)
 
 
 
 
 
 
 
 
 
 
 
 
35
 
36
  def init_browser():
37
  """๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  Google Trends ํŽ˜์ด์ง€๋กœ ์ด๋™"""
@@ -52,7 +68,12 @@ def init_browser():
52
  chrome_options.add_argument("--disable-blink-features=AutomationControlled")
53
  chrome_options.add_argument("--disable-features=VizDisplayCompositor")
54
  chrome_options.add_argument("--window-size=1920,1080")
55
- chrome_options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")
 
 
 
 
 
56
 
57
  # ChromeDriver ์„œ๋น„์Šค ์„ค์ •
58
  service = Service(ChromeDriverManager().install())
@@ -71,7 +92,7 @@ def init_browser():
71
  )
72
 
73
  # ์ถ”๊ฐ€ ๋กœ๋”ฉ ์‹œ๊ฐ„
74
- time.sleep(3)
75
 
76
  is_browser_ready = True
77
  print("๋ธŒ๋ผ์šฐ์ € ์ดˆ๊ธฐํ™” ์™„๋ฃŒ!")
@@ -182,6 +203,7 @@ def analyze_with_claude(image: Image.Image, user_prompt: str = "") -> str:
182
  1. ํ˜„์žฌ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ๊ฒ€์ƒ‰์–ด๋“ค๊ณผ ๊ทธ ์ˆœ์œ„
183
  2. ๊ฐ ๊ฒ€์ƒ‰์–ด์˜ ์ฆ๊ฐ€ ์ถ”์„ธ๋‚˜ ํŠน์ด์‚ฌํ•ญ
184
  3. ๊ฒ€์ƒ‰์–ด๋“ค์—์„œ ๋ฐœ๊ฒฌ๋˜๋Š” ์ฃผ์š” ํŠธ๋ Œ๋“œ๋‚˜ ํŒจํ„ด
 
185
 
186
  ํ•œ๊ตญ์–ด๋กœ ์ƒ์„ธํ•˜๊ณ  ๊ตฌ์ฒด์ ์œผ๋กœ ๋ถ„์„ํ•ด์ฃผ์„ธ์š”.
187
  """
@@ -189,8 +211,8 @@ def analyze_with_claude(image: Image.Image, user_prompt: str = "") -> str:
189
  prompt = user_prompt if user_prompt.strip() else default_prompt
190
 
191
  response = client.messages.create(
192
- model="claude-3-sonnet-20240229",
193
- max_tokens=1000,
194
  messages=[
195
  {
196
  "role": "user",
@@ -219,6 +241,24 @@ def analyze_with_claude(image: Image.Image, user_prompt: str = "") -> str:
219
  print(error_msg)
220
  return error_msg
221
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222
  def refresh_trends_page():
223
  """Google Trends ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ"""
224
  global driver
@@ -319,6 +359,7 @@ def create_interface():
319
 
320
  analyze_btn = gr.Button("๋ถ„์„ ์‹œ์ž‘", variant="primary")
321
  refresh_btn = gr.Button("ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ", variant="secondary")
 
322
  status_btn = gr.Button("๋ธŒ๋ผ์šฐ์ € ์ƒํƒœ ํ™•์ธ", variant="secondary")
323
 
324
  with gr.Column(scale=2):
@@ -342,6 +383,11 @@ def create_interface():
342
  outputs=status_output
343
  )
344
 
 
 
 
 
 
345
  status_btn.click(
346
  fn=check_browser_status,
347
  outputs=status_output
@@ -355,13 +401,13 @@ def main():
355
  print("Google Trends ์‹ค์‹œ๊ฐ„ ๋ถ„์„๊ธฐ ์‹œ์ž‘!")
356
  print("=" * 50)
357
 
358
- # API ํ‚ค ํ™•์ธ
359
- try:
360
- get_claude_client()
361
- print("โœ“ Claude API ํ‚ค ํ™•์ธ๋จ")
362
- except ValueError as e:
363
- print(f"โœ— {e}")
364
  return
 
 
365
 
366
  print("โœ“ Gradio ์›น ์ธํ„ฐํŽ˜์ด์Šค ์ค€๋น„ ์ค‘...")
367
 
 
20
  from webdriver_manager.chrome import ChromeDriverManager
21
  from PIL import Image
22
  import requests
23
+ from dotenv import load_dotenv
24
+
25
+ # ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋กœ๋“œ
26
+ load_dotenv()
27
 
28
  # ์ „์—ญ ๋ณ€์ˆ˜
29
  driver = None
 
35
  api_key = os.getenv("ANTHROPIC_API_KEY")
36
  if not api_key:
37
  raise ValueError("ANTHROPIC_API_KEY ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.")
38
+
39
+ try:
40
+ # ๋” ์•ˆ์ „ํ•œ ํด๋ผ์ด์–ธํŠธ ์ดˆ๊ธฐํ™”
41
+ client = anthropic.Anthropic(
42
+ api_key=api_key,
43
+ max_retries=2,
44
+ timeout=60.0
45
+ )
46
+ return client
47
+ except Exception as e:
48
+ print(f"Claude ํด๋ผ์ด์–ธํŠธ ์ดˆ๊ธฐํ™” ์˜ค๋ฅ˜: {e}")
49
+ # ๊ธฐ๋ณธ ์ดˆ๊ธฐํ™” ๋ฐฉ์‹์œผ๋กœ ์žฌ์‹œ๋„
50
+ return anthropic.Anthropic(api_key=api_key)
51
 
52
  def init_browser():
53
  """๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  Google Trends ํŽ˜์ด์ง€๋กœ ์ด๋™"""
 
68
  chrome_options.add_argument("--disable-blink-features=AutomationControlled")
69
  chrome_options.add_argument("--disable-features=VizDisplayCompositor")
70
  chrome_options.add_argument("--window-size=1920,1080")
71
+ chrome_options.add_argument("--disable-background-timer-throttling")
72
+ chrome_options.add_argument("--disable-backgrounding-occluded-windows")
73
+ chrome_options.add_argument("--disable-renderer-backgrounding")
74
+ chrome_options.add_argument("--disable-features=TranslateUI")
75
+ chrome_options.add_argument("--disable-ipc-flooding-protection")
76
+ chrome_options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36")
77
 
78
  # ChromeDriver ์„œ๋น„์Šค ์„ค์ •
79
  service = Service(ChromeDriverManager().install())
 
92
  )
93
 
94
  # ์ถ”๊ฐ€ ๋กœ๋”ฉ ์‹œ๊ฐ„
95
+ time.sleep(5)
96
 
97
  is_browser_ready = True
98
  print("๋ธŒ๋ผ์šฐ์ € ์ดˆ๊ธฐํ™” ์™„๋ฃŒ!")
 
203
  1. ํ˜„์žฌ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ๊ฒ€์ƒ‰์–ด๋“ค๊ณผ ๊ทธ ์ˆœ์œ„
204
  2. ๊ฐ ๊ฒ€์ƒ‰์–ด์˜ ์ฆ๊ฐ€ ์ถ”์„ธ๋‚˜ ํŠน์ด์‚ฌํ•ญ
205
  3. ๊ฒ€์ƒ‰์–ด๋“ค์—์„œ ๋ฐœ๊ฒฌ๋˜๋Š” ์ฃผ์š” ํŠธ๋ Œ๋“œ๋‚˜ ํŒจํ„ด
206
+ 4. ์‹œ์‚ฌ์ /๋ฌธํ™”์  ๋งฅ๋ฝ์—์„œ์˜ ํ•ด์„
207
 
208
  ํ•œ๊ตญ์–ด๋กœ ์ƒ์„ธํ•˜๊ณ  ๊ตฌ์ฒด์ ์œผ๋กœ ๋ถ„์„ํ•ด์ฃผ์„ธ์š”.
209
  """
 
211
  prompt = user_prompt if user_prompt.strip() else default_prompt
212
 
213
  response = client.messages.create(
214
+ model="claude-3-5-sonnet-20241022",
215
+ max_tokens=1500,
216
  messages=[
217
  {
218
  "role": "user",
 
241
  print(error_msg)
242
  return error_msg
243
 
244
+ def reinit_browser():
245
+ """๋ธŒ๋ผ์šฐ์ € ์žฌ์ดˆ๊ธฐํ™”"""
246
+ global driver, is_browser_ready
247
+
248
+ print("๋ธŒ๋ผ์šฐ์ € ์žฌ์ดˆ๊ธฐํ™” ์‹œ์ž‘...")
249
+
250
+ # ๊ธฐ์กด ๋ธŒ๋ผ์šฐ์ € ์ •๋ฆฌ
251
+ cleanup_browser()
252
+ is_browser_ready = False
253
+
254
+ # ์ƒˆ๋กœ ์ดˆ๊ธฐํ™”
255
+ init_browser()
256
+
257
+ if is_browser_ready:
258
+ return "๋ธŒ๋ผ์šฐ์ € ์žฌ์ดˆ๊ธฐํ™” ์™„๋ฃŒ!"
259
+ else:
260
+ return "๋ธŒ๋ผ์šฐ์ € ์žฌ์ดˆ๊ธฐํ™” ์‹คํŒจ. ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”."
261
+
262
  def refresh_trends_page():
263
  """Google Trends ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ"""
264
  global driver
 
359
 
360
  analyze_btn = gr.Button("๋ถ„์„ ์‹œ์ž‘", variant="primary")
361
  refresh_btn = gr.Button("ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ", variant="secondary")
362
+ reinit_btn = gr.Button("๋ธŒ๋ผ์šฐ์ € ์žฌ์ดˆ๊ธฐํ™”", variant="secondary")
363
  status_btn = gr.Button("๋ธŒ๋ผ์šฐ์ € ์ƒํƒœ ํ™•์ธ", variant="secondary")
364
 
365
  with gr.Column(scale=2):
 
383
  outputs=status_output
384
  )
385
 
386
+ reinit_btn.click(
387
+ fn=reinit_browser,
388
+ outputs=status_output
389
+ )
390
+
391
  status_btn.click(
392
  fn=check_browser_status,
393
  outputs=status_output
 
401
  print("Google Trends ์‹ค์‹œ๊ฐ„ ๋ถ„์„๊ธฐ ์‹œ์ž‘!")
402
  print("=" * 50)
403
 
404
+ # API ํ‚ค ์กด์žฌ ์—ฌ๋ถ€๋งŒ ํ™•์ธ (์‹ค์ œ ํด๋ผ๏ฟฝ๏ฟฝ์–ธํŠธ ์ดˆ๊ธฐํ™”๋Š” ๋‚˜์ค‘์—)
405
+ api_key = os.getenv("ANTHROPIC_API_KEY")
406
+ if not api_key:
407
+ print("โœ— ANTHROPIC_API_KEY ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.")
 
 
408
  return
409
+ else:
410
+ print("โœ“ Claude API ํ‚ค ํ™•์ธ๋จ")
411
 
412
  print("โœ“ Gradio ์›น ์ธํ„ฐํŽ˜์ด์Šค ์ค€๋น„ ์ค‘...")
413