aiqcamp commited on
Commit
8b7acec
ยท
verified ยท
1 Parent(s): d04f70e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +69 -35
app.py CHANGED
@@ -44,6 +44,9 @@ def choose_alternative(transformation):
44
  else:
45
  return random.choice([left, right])
46
 
 
 
 
47
  # ์ฐฝ์˜์ ์ธ ๋ชจ๋ธ/์ปจ์…‰/ํ˜•์ƒ ๋ณ€ํ™” ์•„์ด๋””์–ด๋ฅผ ์œ„ํ•œ ์นดํ…Œ๊ณ ๋ฆฌ (๊ธฐ์กด '๋ฌผ๋ฆฌ์  ๋ณ€ํ™”' ์‚ฌ์ „ ์œ ์ง€)
48
  physical_transformation_categories = {
49
  "๊ณต๊ฐ„ ์ด๋™": [
@@ -283,30 +286,20 @@ def generate_three_objects_interaction(obj1, obj2, obj3):
283
  ##############################################################################
284
  # ์ƒ์„ฑ๋œ ๊ธฐ๋ณธ ์„ค๋ช…์„ LLM์„ ํ†ตํ•ด ํ™•์žฅ
285
  ##############################################################################
286
- def enhance_descriptions(results, objects, progress=None):
 
287
  obj_name = " ๋ฐ ".join([obj for obj in objects if obj])
288
- total_categories = len(results)
289
 
290
- for i, (category, result) in enumerate(results.items()):
291
- # ํ”„๋กœ๊ทธ๋ ˆ์Šค ์—…๋ฐ์ดํŠธ (์ง„ํ–‰๋ฅ ์„ 0.2~0.9 ์‚ฌ์ด๋กœ ๋งคํ•‘)
292
- if progress:
293
- progress_value = 0.2 + (i / total_categories) * 0.7
294
- progress(progress_value, f"์นดํ…Œ๊ณ ๋ฆฌ '{category}' ์ฒ˜๋ฆฌ ์ค‘...")
295
-
296
  result["enhanced"] = enhance_with_llm(result["base"], obj_name, category)
297
 
298
- # ์™„๋ฃŒ ๋ฉ”์‹œ์ง€
299
- if progress:
300
- progress(0.95, "๊ฒฐ๊ณผ ์ •๋ฆฌ ์ค‘...")
301
-
302
  return results
303
 
304
  ##############################################################################
305
  # ์‚ฌ์šฉ์ž ์ž…๋ ฅ(์ตœ๋Œ€ 3๊ฐœ ํ‚ค์›Œ๋“œ)์— ๋”ฐ๋ผ ์ฐฝ์˜์  ๋ณ€ํ™” ์•„์ด๋””์–ด ์ƒ์„ฑ
306
  ##############################################################################
307
- def generate_transformations(text1, text2=None, text3=None, progress=None):
308
- if progress:
309
- progress(0.1, "์•„์ด๋””์–ด ๊ธฐ๋ณธ ๊ตฌ์กฐ ์ƒ์„ฑ ์ค‘...")
310
 
311
  if text2 and text3:
312
  results = generate_three_objects_interaction(text1, text2, text3)
@@ -318,10 +311,7 @@ def generate_transformations(text1, text2=None, text3=None, progress=None):
318
  results = generate_single_object_transformations(text1)
319
  objects = [text1]
320
 
321
- if progress:
322
- progress(0.2, "Gemini API๋ฅผ ํ†ตํ•œ ์•„์ด๋””์–ด ํ™•์žฅ ์ค‘...")
323
-
324
- return enhance_descriptions(results, objects, progress)
325
 
326
  ##############################################################################
327
  # ๊ฒฐ๊ณผ ํฌ๋งทํŒ…
@@ -343,7 +333,8 @@ def process_inputs(text1, text2, text3, progress=gr.Progress()):
343
  if not text1:
344
  return "์˜ค๋ฅ˜: ์ตœ์†Œ ํ•˜๋‚˜์˜ ํ‚ค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”."
345
 
346
- progress(0.05, "์•„์ด๋””์–ด ์ƒ์„ฑ ์ค€๋น„ ์ค‘...")
 
347
 
348
  # ํ‚ค์›Œ๋“œ ์ •๋ณด ํ™•์ธ
349
  keyword_info = f"ํ‚ค์›Œ๋“œ: {text1}"
@@ -352,16 +343,26 @@ def process_inputs(text1, text2, text3, progress=gr.Progress()):
352
  if text3:
353
  keyword_info += f", {text3}"
354
 
355
- progress(0.1, "์ฐฝ์˜์ ์ธ ๋ชจ๋ธ/์ปจ์…‰/ํ˜•์ƒ ๋ณ€ํ™” ์•„์ด๋””์–ด ์ƒ์„ฑ ์‹œ์ž‘...")
356
-
357
- # ๊ฒฐ๊ณผ ์ƒ์„ฑ
358
- results = generate_transformations(text1, text2, text3, progress)
359
-
360
- progress(0.95, "๊ฒฐ๊ณผ ํฌ๋งทํŒ… ์ค‘...")
361
- formatted = format_results(results)
362
-
363
- progress(1.0, "์™„๋ฃŒ!")
364
- return formatted
 
 
 
 
 
 
 
 
 
 
365
 
366
  ##############################################################################
367
  # API ํ‚ค ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€
@@ -402,9 +403,24 @@ with gr.Blocks(title="ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜ ์ฐฝ์˜์  ๋ณ€ํ™” ์•„์ด๋””์–ด ์ƒ์„ฑ๊ธฐ",
402
  text_input2 = gr.Textbox(label="ํ‚ค์›Œ๋“œ 2 (์„ ํƒ)", placeholder="์˜ˆ: ์ธ๊ณต์ง€๋Šฅ")
403
  text_input3 = gr.Textbox(label="ํ‚ค์›Œ๋“œ 3 (์„ ํƒ)", placeholder="์˜ˆ: ํ—ฌ์Šค์ผ€์–ด")
404
 
405
- # ์ƒํƒœ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•  ์˜์—ญ ์ถ”๊ฐ€
406
  status_msg = gr.Markdown("๐Ÿ’ก '์•„์ด๋””์–ด ์ƒ์„ฑํ•˜๊ธฐ' ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ํ”„๋กœ๊ทธ๋ ˆ์Šค ๋ฐ”๏ฟฝ๏ฟฝ๏ฟฝ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.")
407
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
408
  submit_button = gr.Button("์•„์ด๋””์–ด ์ƒ์„ฑํ•˜๊ธฐ", variant="primary")
409
 
410
  # ์šฐ์ธก ์ถœ๋ ฅ ์˜์—ญ
@@ -414,19 +430,37 @@ with gr.Blocks(title="ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜ ์ฐฝ์˜์  ๋ณ€ํ™” ์•„์ด๋””์–ด ์ƒ์„ฑ๊ธฐ",
414
  # ์˜ˆ์‹œ ์ž…๋ ฅ
415
  gr.Examples(
416
  examples=[
417
- ["์Šค๋งˆํŠธํฐ", "", ""],
418
- ["์ปคํ”ผ", "์ฑ…", ""],
419
- ["์ž๋™์ฐจ", "๋กœ๋ด‡", "์ธ๊ณต์ง€๋Šฅ"],
 
420
  ["์šด๋™ํ™”", "์›จ์–ด๋Ÿฌ๋ธ”", "๊ฑด๊ฐ•"],
 
421
  ],
422
  inputs=[text_input1, text_input2, text_input3],
423
  )
424
 
425
- # ๋ฒ„ํŠผ ์ด๋ฒคํŠธ
 
 
 
 
 
 
 
 
426
  submit_button.click(
 
 
 
 
427
  fn=process_inputs,
428
  inputs=[text_input1, text_input2, text_input3],
429
  outputs=idea_output
 
 
 
 
430
  )
431
 
432
  if __name__ == "__main__":
 
44
  else:
45
  return random.choice([left, right])
46
 
47
+ # ์ฐฝ์˜์ ์ธ ๋ชจ๋ธ/์ปจ์…‰/ํ˜•์ƒ ๋ณ€ํ™” ์•„์ด๋””์–ด๋ฅผ ์œ„ํ•œ ์นดํ…Œ๊ณ ๋ฆฌ (๊ธฐ์กด '๋ฌผ๋ฆฌ์  ๋ณ€ํ™”' ์‚ฌ์ „ ์œ ์ง€)
48
+
49
+
50
  # ์ฐฝ์˜์ ์ธ ๋ชจ๋ธ/์ปจ์…‰/ํ˜•์ƒ ๋ณ€ํ™” ์•„์ด๋””์–ด๋ฅผ ์œ„ํ•œ ์นดํ…Œ๊ณ ๋ฆฌ (๊ธฐ์กด '๋ฌผ๋ฆฌ์  ๋ณ€ํ™”' ์‚ฌ์ „ ์œ ์ง€)
51
  physical_transformation_categories = {
52
  "๊ณต๊ฐ„ ์ด๋™": [
 
286
  ##############################################################################
287
  # ์ƒ์„ฑ๋œ ๊ธฐ๋ณธ ์„ค๋ช…์„ LLM์„ ํ†ตํ•ด ํ™•์žฅ
288
  ##############################################################################
289
+ def enhance_descriptions(results, objects):
290
+ # progress ์ธ์ž ์ œ๊ฑฐ
291
  obj_name = " ๋ฐ ".join([obj for obj in objects if obj])
 
292
 
293
+ for category, result in results.items():
 
 
 
 
 
294
  result["enhanced"] = enhance_with_llm(result["base"], obj_name, category)
295
 
 
 
 
 
296
  return results
297
 
298
  ##############################################################################
299
  # ์‚ฌ์šฉ์ž ์ž…๋ ฅ(์ตœ๋Œ€ 3๊ฐœ ํ‚ค์›Œ๋“œ)์— ๋”ฐ๋ผ ์ฐฝ์˜์  ๋ณ€ํ™” ์•„์ด๋””์–ด ์ƒ์„ฑ
300
  ##############################################################################
301
+ def generate_transformations(text1, text2=None, text3=None):
302
+ # progress ์ธ์ž ์ œ๊ฑฐ
 
303
 
304
  if text2 and text3:
305
  results = generate_three_objects_interaction(text1, text2, text3)
 
311
  results = generate_single_object_transformations(text1)
312
  objects = [text1]
313
 
314
+ return enhance_descriptions(results, objects)
 
 
 
315
 
316
  ##############################################################################
317
  # ๊ฒฐ๊ณผ ํฌ๋งทํŒ…
 
333
  if not text1:
334
  return "์˜ค๋ฅ˜: ์ตœ์†Œ ํ•˜๋‚˜์˜ ํ‚ค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”."
335
 
336
+ # ์ง„ํ–‰ ์ƒํƒœ ๋ฉ”์‹œ์ง€ (์ค‘์ฒฉ ๋ฆฌ์ŠคํŠธ ๋Œ€์‹  ๋‹จ์ˆœ ๋ฌธ์ž์—ด ์‚ฌ์šฉ)
337
+ status_message = ""
338
 
339
  # ํ‚ค์›Œ๋“œ ์ •๋ณด ํ™•์ธ
340
  keyword_info = f"ํ‚ค์›Œ๋“œ: {text1}"
 
343
  if text3:
344
  keyword_info += f", {text3}"
345
 
346
+ # ๊ฒฐ๊ณผ ์ƒ์„ฑ (progress ์ธ์ž ์ „๋‹ฌํ•˜์ง€ ์•Š์Œ)
347
+ try:
348
+ # ์ง„ํ–‰ ์ƒํƒœ๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ํ‘œ์‹œ
349
+ progress(0.05, desc="์•„์ด๋””์–ด ์ƒ์„ฑ ์ค€๋น„ ์ค‘...")
350
+ time.sleep(0.3) # ์‹œ๊ฐ์  ํšจ๊ณผ๋ฅผ ์œ„ํ•œ ์งง์€ ์ง€์—ฐ
351
+
352
+ progress(0.1, desc="์ฐฝ์˜์ ์ธ ๋ชจ๋ธ/์ปจ์…‰/ํ˜•์ƒ ๋ณ€ํ™” ์•„์ด๋””์–ด ์ƒ์„ฑ ์‹œ์ž‘...")
353
+
354
+ # text1, text2, text3๋งŒ ์ „๋‹ฌํ•˜๊ณ  progress๋Š” ์ „๋‹ฌํ•˜์ง€ ์•Š์Œ
355
+ results = generate_transformations(text1, text2, text3)
356
+
357
+ progress(0.8, desc="๊ฒฐ๊ณผ ํฌ๋งทํŒ… ์ค‘...")
358
+ formatted = format_results(results)
359
+
360
+ progress(1.0, desc="์™„๋ฃŒ!")
361
+ return formatted
362
+
363
+ except Exception as e:
364
+ logger.error(f"Error in process_inputs: {e}")
365
+ return f"์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค: {str(e)}"
366
 
367
  ##############################################################################
368
  # API ํ‚ค ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€
 
403
  text_input2 = gr.Textbox(label="ํ‚ค์›Œ๋“œ 2 (์„ ํƒ)", placeholder="์˜ˆ: ์ธ๊ณต์ง€๋Šฅ")
404
  text_input3 = gr.Textbox(label="ํ‚ค์›Œ๋“œ 3 (์„ ํƒ)", placeholder="์˜ˆ: ํ—ฌ์Šค์ผ€์–ด")
405
 
406
+ # ์ž…๋ ฅ๊ณผ ๋ฒ„ํŠผ ์‚ฌ์ด์— ์ƒํƒœ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•  ์˜์—ญ ์ถ”๊ฐ€
407
  status_msg = gr.Markdown("๐Ÿ’ก '์•„์ด๋””์–ด ์ƒ์„ฑํ•˜๊ธฐ' ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ํ”„๋กœ๊ทธ๋ ˆ์Šค ๋ฐ”๏ฟฝ๏ฟฝ๏ฟฝ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.")
408
 
409
+ # ์ฒ˜๋ฆฌ ์ค‘์ผ ๋•Œ๋งŒ ํ‘œ์‹œ๋˜๋Š” ์ƒํƒœ ๋ฉ”์‹œ์ง€
410
+ with gr.Box(visible=False) as processing_box:
411
+ processing_indicator = gr.HTML("""
412
+ <div style="display: flex; justify-content: center; align-items: center; margin: 10px 0;">
413
+ <div style="border: 5px solid #f3f3f3; border-top: 5px solid #3498db; border-radius: 50%; width: 30px; height: 30px; animation: spin 2s linear infinite;"></div>
414
+ <p style="margin-left: 10px; font-weight: bold; color: #3498db;">์ฒ˜๋ฆฌ ์ค‘์ž…๋‹ˆ๋‹ค...</p>
415
+ </div>
416
+ <style>
417
+ @keyframes spin {
418
+ 0% { transform: rotate(0deg); }
419
+ 100% { transform: rotate(360deg); }
420
+ }
421
+ </style>
422
+ """)
423
+
424
  submit_button = gr.Button("์•„์ด๋””์–ด ์ƒ์„ฑํ•˜๊ธฐ", variant="primary")
425
 
426
  # ์šฐ์ธก ์ถœ๋ ฅ ์˜์—ญ
 
430
  # ์˜ˆ์‹œ ์ž…๋ ฅ
431
  gr.Examples(
432
  examples=[
433
+
434
+ ["์ž๋™์ฐจ", "", ""],
435
+ ["์Šค๋งˆํŠธํฐ", "์ธ๊ณต์ง€๋Šฅ", ""],
436
+ ["๋“œ๋ก ", "์ธ๊ณต์ง€๋Šฅ", ""],
437
  ["์šด๋™ํ™”", "์›จ์–ด๋Ÿฌ๋ธ”", "๊ฑด๊ฐ•"],
438
+
439
  ],
440
  inputs=[text_input1, text_input2, text_input3],
441
  )
442
 
443
+ # ์ฒ˜๋ฆฌ ์‹œ์ž‘ ์ „ ํ•จ์ˆ˜ (๋กœ๋”ฉ ํ‘œ์‹œ๊ธฐ ๋ณด์ด๊ฒŒ)
444
+ def show_processing_indicator():
445
+ return gr.update(visible=True)
446
+
447
+ # ์ฒ˜๋ฆฌ ์™„๋ฃŒ ํ›„ ํ•จ์ˆ˜ (๋กœ๋”ฉ ํ‘œ์‹œ๊ธฐ ์ˆจ๊ธฐ๊ธฐ)
448
+ def hide_processing_indicator():
449
+ return gr.update(visible=False)
450
+
451
+ # ๋ฒ„ํŠผ ์ด๋ฒคํŠธ - ์—ฌ๋Ÿฌ ํ•จ์ˆ˜ ์ˆœ์ฐจ ์‹คํ–‰
452
  submit_button.click(
453
+ fn=show_processing_indicator,
454
+ inputs=None,
455
+ outputs=processing_box
456
+ ).then(
457
  fn=process_inputs,
458
  inputs=[text_input1, text_input2, text_input3],
459
  outputs=idea_output
460
+ ).then(
461
+ fn=hide_processing_indicator,
462
+ inputs=None,
463
+ outputs=processing_box
464
  )
465
 
466
  if __name__ == "__main__":