Spaces:
openfree
/
Running on CPU Upgrade

openfree commited on
Commit
d84de86
ยท
verified ยท
1 Parent(s): b8dec7f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +82 -51
app.py CHANGED
@@ -326,8 +326,12 @@ with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css, title="NewsAI ์„œ๋น„์Šค") as
326
  query = gr.Textbox(label="๊ฒ€์ƒ‰์–ด")
327
  country = gr.Dropdown(MAJOR_COUNTRIES, label="๊ตญ๊ฐ€", value="South Korea")
328
 
 
329
  status_message = gr.Markdown("", visible=True)
 
 
330
  translated_query_display = gr.Markdown(visible=False)
 
331
  search_button = gr.Button("๊ฒ€์ƒ‰", variant="primary")
332
 
333
  progress = gr.Progress()
@@ -381,10 +385,12 @@ with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css, title="NewsAI ์„œ๋น„์Šค") as
381
  })
382
 
383
  def search_and_display(query, country, articles_state, progress=gr.Progress()):
384
- # ๊ธฐ์กด search_and_display ํ•จ์ˆ˜ ์ฝ”๋“œ ์œ ์ง€
385
  status_msg = "๊ฒ€์ƒ‰์„ ์ง„ํ–‰์ค‘์ž…๋‹ˆ๋‹ค. ์ž ์‹œ๋งŒ ๊ธฐ๋‹ค๋ฆฌ์„ธ์š”..."
386
 
387
  progress(0, desc="๊ฒ€์ƒ‰์–ด ๋ฒˆ์—ญ ์ค‘...")
 
 
388
  translated_query = translate_query(query, country)
389
  translated_display = f"**์›๋ณธ ๊ฒ€์ƒ‰์–ด:** {query}\n**๋ฒˆ์—ญ๋œ ๊ฒ€์ƒ‰์–ด:** {translated_query}" if translated_query != query else f"**๊ฒ€์ƒ‰์–ด:** {query}"
390
 
@@ -393,8 +399,8 @@ with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css, title="NewsAI ์„œ๋น„์Šค") as
393
  progress(0.5, desc="๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ ์ค‘...")
394
 
395
  outputs = []
396
- outputs.append(gr.update(value=status_msg, visible=True))
397
- outputs.append(gr.update(value=translated_display, visible=True))
398
 
399
  if error_message:
400
  outputs.append(gr.update(value=error_message, visible=True))
@@ -414,6 +420,7 @@ with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css, title="NewsAI ์„œ๋น„์Šค") as
414
  image_url = article['image_url']
415
  image_update = gr.update(value=image_url, visible=True) if image_url and not image_url.startswith('data:image') else gr.update(value=None, visible=False)
416
 
 
417
  korean_summary = translate_to_korean(article['snippet'])
418
 
419
  outputs.extend([
@@ -432,74 +439,98 @@ with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css, title="NewsAI ์„œ๋น„์Šค") as
432
 
433
  progress(1.0, desc="์™„๋ฃŒ!")
434
  outputs.append(articles_state)
 
 
435
  outputs[0] = gr.update(value="", visible=False)
436
 
437
  return outputs
438
 
439
  def search_global(query, articles_state_global, progress=gr.Progress()):
440
- status_msg = "์ „์„ธ๊ณ„ ๊ฒ€์ƒ‰์„ ์ง„ํ–‰์ค‘์ž…๋‹ˆ๋‹ค. ์ž ์‹œ๋งŒ ๊ธฐ๋‹ค๋ฆฌ์„ธ์š”..."
441
  all_results = []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
442
 
443
- progress(0, desc="์ „์„ธ๊ณ„ ๊ฒ€์ƒ‰ ์‹œ์ž‘...")
444
 
 
445
  for idx, (country, location) in enumerate(COUNTRY_LOCATIONS.items()):
446
- progress(idx / len(COUNTRY_LOCATIONS), f"{country} ๊ฒ€์ƒ‰ ์ค‘...")
 
447
  try:
448
  error_message, articles = serphouse_search(query, country)
449
  if not error_message and articles:
 
450
  for article in articles:
451
  article['source_country'] = country
 
 
452
  all_results.extend(articles)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
453
  except Exception as e:
454
  print(f"Error searching {country}: {str(e)}")
455
  continue
456
-
457
- # ๊ฒฐ๊ณผ ์ •๋ ฌ ๋ฐ ์ค‘๋ณต ์ œ๊ฑฐ
458
- seen_urls = set()
459
- unique_results = []
460
- for article in sorted(all_results, key=lambda x: x.get('time', ''), reverse=True):
461
- url = article.get('link', '')
462
- if url not in seen_urls:
463
- seen_urls.add(url)
464
- unique_results.append(article)
465
-
466
- # ์ตœ๋Œ€ 1000๊ฐœ๋กœ ์ œํ•œ
467
- final_results = unique_results[:1000]
468
 
469
- outputs = []
470
- outputs.append(gr.update(value=status_msg, visible=True))
471
- outputs.append(gr.update(value=f"**๊ฒ€์ƒ‰์–ด:** {query}", visible=True))
472
-
473
- progress(0.5, desc="๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ ์ค‘...")
474
-
475
- for idx, comp in enumerate(global_article_components):
476
- if idx < len(final_results):
477
- article = final_results[idx]
478
- image_url = article.get('image_url', '')
479
- image_update = gr.update(value=image_url, visible=True) if image_url and not image_url.startswith('data:image') else gr.update(value=None, visible=False)
480
-
481
- korean_summary = translate_to_korean(article['snippet'])
482
-
483
- outputs.extend([
484
- gr.update(visible=True),
485
- gr.update(value=f"### [{article['title']}]({article['link']})"),
486
- image_update,
487
- gr.update(value=f"**์š”์•ฝ:** {article['snippet']}\n\n**ํ•œ๊ธ€ ์š”์•ฝ:** {korean_summary}"),
488
- gr.update(value=f"**์ถœ์ฒ˜:** {article['channel']} | **๊ตญ๊ฐ€:** {article['source_country']} | **์‹œ๊ฐ„:** {article['time']}")
489
- ])
490
- else:
491
- outputs.extend([
492
- gr.update(visible=False), gr.update(), gr.update(),
493
- gr.update(), gr.update()
494
- ])
495
-
496
- progress(1.0, desc="์™„๋ฃŒ!")
497
- outputs.append(final_results)
498
- outputs[0] = gr.update(value="", visible=False)
499
-
500
- return outputs
501
 
502
- # ๊ตญ๊ฐ€๋ณ„ ๊ฒ€์ƒ‰ ์ด๋ฒคํŠธ ์—ฐ๊ฒฐ
503
  search_outputs = [
504
  status_message,
505
  translated_query_display,
 
326
  query = gr.Textbox(label="๊ฒ€์ƒ‰์–ด")
327
  country = gr.Dropdown(MAJOR_COUNTRIES, label="๊ตญ๊ฐ€", value="South Korea")
328
 
329
+ # ๊ฒ€์ƒ‰ ์ƒํƒœ ๋ฉ”์‹œ์ง€
330
  status_message = gr.Markdown("", visible=True)
331
+
332
+ # ๋ฒˆ์—ญ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ
333
  translated_query_display = gr.Markdown(visible=False)
334
+
335
  search_button = gr.Button("๊ฒ€์ƒ‰", variant="primary")
336
 
337
  progress = gr.Progress()
 
385
  })
386
 
387
  def search_and_display(query, country, articles_state, progress=gr.Progress()):
388
+ # ๊ฒ€์ƒ‰ ์ƒํƒœ ๋ฉ”์‹œ์ง€ ์—…๋ฐ์ดํŠธ
389
  status_msg = "๊ฒ€์ƒ‰์„ ์ง„ํ–‰์ค‘์ž…๋‹ˆ๋‹ค. ์ž ์‹œ๋งŒ ๊ธฐ๋‹ค๋ฆฌ์„ธ์š”..."
390
 
391
  progress(0, desc="๊ฒ€์ƒ‰์–ด ๋ฒˆ์—ญ ์ค‘...")
392
+
393
+ # ๊ฒ€์ƒ‰์–ด ๋ฒˆ์—ญ
394
  translated_query = translate_query(query, country)
395
  translated_display = f"**์›๋ณธ ๊ฒ€์ƒ‰์–ด:** {query}\n**๋ฒˆ์—ญ๋œ ๊ฒ€์ƒ‰์–ด:** {translated_query}" if translated_query != query else f"**๊ฒ€์ƒ‰์–ด:** {query}"
396
 
 
399
  progress(0.5, desc="๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ ์ค‘...")
400
 
401
  outputs = []
402
+ outputs.append(gr.update(value=status_msg, visible=True)) # ์ƒํƒœ ๋ฉ”์‹œ์ง€
403
+ outputs.append(gr.update(value=translated_display, visible=True)) # ๋ฒˆ์—ญ ๊ฒฐ๊ณผ
404
 
405
  if error_message:
406
  outputs.append(gr.update(value=error_message, visible=True))
 
420
  image_url = article['image_url']
421
  image_update = gr.update(value=image_url, visible=True) if image_url and not image_url.startswith('data:image') else gr.update(value=None, visible=False)
422
 
423
+ # ์š”์•ฝ ๋‚ด์šฉ ํ•œ๊ธ€ ๋ฒˆ์—ญ
424
  korean_summary = translate_to_korean(article['snippet'])
425
 
426
  outputs.extend([
 
439
 
440
  progress(1.0, desc="์™„๋ฃŒ!")
441
  outputs.append(articles_state)
442
+
443
+ # ๊ฒ€์ƒ‰ ์™„๋ฃŒ ํ›„ ์ƒํƒœ ๋ฉ”์‹œ์ง€ ์ˆจ๊น€
444
  outputs[0] = gr.update(value="", visible=False)
445
 
446
  return outputs
447
 
448
  def search_global(query, articles_state_global, progress=gr.Progress()):
449
+ status_msg = "์ „์„ธ๊ณ„ ๊ฒ€์ƒ‰์„ ์ง„ํ–‰์ค‘์ž…๋‹ˆ๋‹ค. ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค..."
450
  all_results = []
451
+ displayed_count = 0
452
+
453
+ # ์ดˆ๊ธฐ ์ถœ๋ ฅ ์„ค์ •
454
+ outputs = []
455
+ outputs.append(gr.update(value=status_msg, visible=True))
456
+ outputs.append(gr.update(value=f"**๊ฒ€์ƒ‰์–ด:** {query}", visible=True))
457
+
458
+ # 1000๊ฐœ์˜ ๊ฒฐ๊ณผ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ดˆ๊ธฐ์— ๋ชจ๋‘ ์ˆจ๊น€ ์ฒ˜๋ฆฌ
459
+ for _ in global_article_components:
460
+ outputs.extend([
461
+ gr.update(visible=False), gr.update(), gr.update(),
462
+ gr.update(), gr.update()
463
+ ])
464
+ outputs.append([]) # articles_state_global
465
 
466
+ yield outputs # ์ดˆ๊ธฐ ์ƒํƒœ ์ถœ๋ ฅ
467
 
468
+ # ๊ตญ๊ฐ€๋ณ„ ๊ฒ€์ƒ‰ ๋ฐ ์‹ค์‹œ๊ฐ„ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
469
  for idx, (country, location) in enumerate(COUNTRY_LOCATIONS.items()):
470
+ progress(idx / len(COUNTRY_LOCATIONS), f"{country} ๊ฒ€์ƒ‰ ์ค‘... ({idx + 1}/{len(COUNTRY_LOCATIONS)})")
471
+
472
  try:
473
  error_message, articles = serphouse_search(query, country)
474
  if not error_message and articles:
475
+ # ํ•ด๋‹น ๊ตญ๊ฐ€์˜ ๊ฒฐ๊ณผ์— ๊ตญ๊ฐ€ ์ •๋ณด ์ถ”๊ฐ€
476
  for article in articles:
477
  article['source_country'] = country
478
+
479
+ # ์ƒˆ๋กœ์šด ๊ฒฐ๊ณผ ์ถ”๊ฐ€ ๋ฐ ์ •๋ ฌ
480
  all_results.extend(articles)
481
+ sorted_results = sorted(all_results, key=lambda x: x.get('time', ''), reverse=True)
482
+
483
+ # ์ค‘๋ณต ์ œ๊ฑฐ
484
+ seen_urls = set()
485
+ unique_results = []
486
+ for article in sorted_results:
487
+ url = article.get('link', '')
488
+ if url not in seen_urls:
489
+ seen_urls.add(url)
490
+ unique_results.append(article)
491
+
492
+ # ์ตœ๋Œ€ 1000๊ฐœ๊นŒ์ง€๋งŒ ์œ ์ง€
493
+ unique_results = unique_results[:1000]
494
+
495
+ # ์ƒˆ๋กœ์šด ๊ฒฐ๊ณผ ์ถœ๋ ฅ
496
+ outputs = []
497
+ outputs.append(gr.update(value=f"์ „์„ธ๊ณ„ ๊ฒ€์ƒ‰ ์ง„ํ–‰ ์ค‘... ({idx + 1}/{len(COUNTRY_LOCATIONS)} ๊ตญ๊ฐ€ ์™„๋ฃŒ)", visible=True))
498
+ outputs.append(gr.update(value=f"**๊ฒ€์ƒ‰์–ด:** {query}\n**ํ˜„์žฌ๊นŒ์ง€ ๋ฐœ๊ฒฌ๋œ ๋‰ด์Šค:** {len(unique_results)}๊ฑด", visible=True))
499
+
500
+ # ๊ฒฐ๊ณผ ์ปดํฌ๋„ŒํŠธ ์—…๋ฐ์ดํŠธ
501
+ for idx, comp in enumerate(global_article_components):
502
+ if idx < len(unique_results):
503
+ article = unique_results[idx]
504
+ image_url = article.get('image_url', '')
505
+ image_update = gr.update(value=image_url, visible=True) if image_url and not image_url.startswith('data:image') else gr.update(value=None, visible=False)
506
+
507
+ korean_summary = translate_to_korean(article['snippet'])
508
+
509
+ outputs.extend([
510
+ gr.update(visible=True),
511
+ gr.update(value=f"### [{article['title']}]({article['link']})"),
512
+ image_update,
513
+ gr.update(value=f"**์š”์•ฝ:** {article['snippet']}\n\n**ํ•œ๊ธ€ ์š”์•ฝ:** {korean_summary}"),
514
+ gr.update(value=f"**์ถœ์ฒ˜:** {article['channel']} | **๊ตญ๊ฐ€:** {article['source_country']} | **์‹œ๊ฐ„:** {article['time']}")
515
+ ])
516
+ else:
517
+ outputs.extend([
518
+ gr.update(visible=False), gr.update(), gr.update(),
519
+ gr.update(), gr.update()
520
+ ])
521
+
522
+ outputs.append(unique_results)
523
+ yield outputs
524
+
525
  except Exception as e:
526
  print(f"Error searching {country}: {str(e)}")
527
  continue
 
 
 
 
 
 
 
 
 
 
 
 
528
 
529
+ # ์ตœ์ข… ์ƒํƒœ ์—…๋ฐ์ดํŠธ
530
+ final_status = f"๊ฒ€์ƒ‰ ์™„๋ฃŒ! ์ด {len(unique_results)}๊ฐœ์˜ ๋‰ด์Šค๊ฐ€ ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."
531
+ outputs[0] = gr.update(value=final_status, visible=True)
532
+ yield outputs
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
533
 
 
534
  search_outputs = [
535
  status_message,
536
  translated_query_display,