GitHub Actions commited on
Commit
db7ff24
ยท
1 Parent(s): 51be5aa

Auto-deploy from GitHub Actions - 2025-12-12 15:13:03

Browse files
Files changed (1) hide show
  1. app/routes.py +106 -12
app/routes.py CHANGED
@@ -5250,12 +5250,22 @@ def generate_detailed_tags(file_id):
5250
  # ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์œผ๋กœ JSON ์ถ”์ถœ ์‹œ๋„
5251
  # ๋งˆํฌ๋‹ค์šด ์ฝ”๋“œ ๋ธ”๋ก ์ œ๊ฑฐ (๋” ๊ฐ•๋ ฅํ•˜๊ฒŒ)
5252
  cleaned_text = response_text
5253
- # ```json ๋˜๋Š” ``` ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฝ”๋“œ ๋ธ”๋ก ์ œ๊ฑฐ
 
 
 
 
 
5254
  cleaned_text = re.sub(r'```json\s*\n?', '', cleaned_text, flags=re.IGNORECASE)
5255
  cleaned_text = re.sub(r'```\s*\n?', '', cleaned_text)
5256
- # ์•ž๋’ค ๊ณต๋ฐฑ ๋ฐ ์ค„๋ฐ”๊ฟˆ ์ œ๊ฑฐ
 
 
5257
  cleaned_text = cleaned_text.strip()
5258
 
 
 
 
5259
  # ๊ด„ํ˜ธ ๋งค์นญ์„ ์‚ฌ์šฉํ•œ ์ •ํ™•ํ•œ JSON ์ถ”์ถœ ํ•จ์ˆ˜
5260
  def extract_json_by_brackets(text):
5261
  """๊ด„ํ˜ธ ๋งค์นญ์„ ์‚ฌ์šฉํ•˜์—ฌ JSON ๊ฐ์ฒด ์ถ”์ถœ"""
@@ -5346,10 +5356,47 @@ def generate_detailed_tags(file_id):
5346
  else:
5347
  print(f"[์ƒ์„ธ ํƒœ๊ทธ ์ƒ์„ฑ] JSON ํ˜•์‹์ด ์•„๋‹˜ - ์ „์ฒด ์‘๋‹ต:")
5348
  print(response_text)
5349
- return jsonify({
5350
- 'error': 'AI ์‘๋‹ต์ด ์˜ฌ๋ฐ”๋ฅธ JSON ํ˜•์‹์ด ์•„๋‹™๋‹ˆ๋‹ค.',
5351
- 'response_preview': response_text[:500] if len(response_text) > 500 else response_text
5352
- }), 500
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5353
  except Exception as e:
5354
  print(f"[์ƒ์„ธ ํƒœ๊ทธ ์ƒ์„ฑ] ํŒŒ์‹ฑ ์˜ค๋ฅ˜: {str(e)}")
5355
  import traceback
@@ -5679,12 +5726,22 @@ def generate_simple_tags(file_id):
5679
  # ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์œผ๋กœ JSON ์ถ”์ถœ ์‹œ๋„
5680
  # ๋งˆํฌ๋‹ค์šด ์ฝ”๋“œ ๋ธ”๋ก ์ œ๊ฑฐ (๋” ๊ฐ•๋ ฅํ•˜๊ฒŒ)
5681
  cleaned_text = response_text
5682
- # ```json ๋˜๋Š” ``` ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฝ”๋“œ ๋ธ”๋ก ์ œ๊ฑฐ
 
 
 
 
 
5683
  cleaned_text = re.sub(r'```json\s*\n?', '', cleaned_text, flags=re.IGNORECASE)
5684
  cleaned_text = re.sub(r'```\s*\n?', '', cleaned_text)
5685
- # ์•ž๋’ค ๊ณต๋ฐฑ ๋ฐ ์ค„๋ฐ”๊ฟˆ ์ œ๊ฑฐ
 
 
5686
  cleaned_text = cleaned_text.strip()
5687
 
 
 
 
5688
  # ๊ด„ํ˜ธ ๋งค์นญ์„ ์‚ฌ์šฉํ•œ ์ •ํ™•ํ•œ JSON ์ถ”์ถœ ํ•จ์ˆ˜
5689
  def extract_json_by_brackets(text):
5690
  """๊ด„ํ˜ธ ๋งค์นญ์„ ์‚ฌ์šฉํ•˜์—ฌ JSON ๊ฐ์ฒด ์ถ”์ถœ"""
@@ -5773,10 +5830,47 @@ def generate_simple_tags(file_id):
5773
  else:
5774
  print(f"[์ผ๋ฐ˜ ํƒœ๊ทธ ์ƒ์„ฑ] JSON ํ˜•์‹์ด ์•„๋‹˜ - ์ „์ฒด ์‘๋‹ต:")
5775
  print(response_text)
5776
- return jsonify({
5777
- 'error': 'AI ์‘๋‹ต์ด ์˜ฌ๋ฐ”๋ฅธ JSON ํ˜•์‹์ด ์•„๋‹™๋‹ˆ๋‹ค.',
5778
- 'response_preview': response_text[:500] if len(response_text) > 500 else response_text
5779
- }), 500
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5780
  except Exception as e:
5781
  print(f"[์ผ๋ฐ˜ ํƒœ๊ทธ ์ƒ์„ฑ] ํŒŒ์‹ฑ ์˜ค๋ฅ˜: {str(e)}")
5782
  import traceback
 
5250
  # ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์œผ๋กœ JSON ์ถ”์ถœ ์‹œ๋„
5251
  # ๋งˆํฌ๋‹ค์šด ์ฝ”๋“œ ๋ธ”๋ก ์ œ๊ฑฐ (๋” ๊ฐ•๋ ฅํ•˜๊ฒŒ)
5252
  cleaned_text = response_text
5253
+
5254
+ # ๋ฐฉ๋ฒ• 1: ์ „์ฒด ์ฝ”๋“œ ๋ธ”๋ก ์ œ๊ฑฐ (```json ... ```)
5255
+ cleaned_text = re.sub(r'```json\s*\n(.*?)\n```', r'\1', cleaned_text, flags=re.IGNORECASE | re.DOTALL)
5256
+ cleaned_text = re.sub(r'```\s*\n(.*?)\n```', r'\1', cleaned_text, flags=re.DOTALL)
5257
+
5258
+ # ๋ฐฉ๋ฒ• 2: ์ฝ”๋“œ ๋ธ”๋ก ์‹œ์ž‘/๋ ๋งˆ์ปค ์ œ๊ฑฐ
5259
  cleaned_text = re.sub(r'```json\s*\n?', '', cleaned_text, flags=re.IGNORECASE)
5260
  cleaned_text = re.sub(r'```\s*\n?', '', cleaned_text)
5261
+ cleaned_text = re.sub(r'\n?```\s*$', '', cleaned_text, flags=re.MULTILINE)
5262
+
5263
+ # ๋ฐฉ๋ฒ• 3: ์•ž๋’ค ๊ณต๋ฐฑ ๋ฐ ์ค„๋ฐ”๊ฟˆ ์ œ๊ฑฐ
5264
  cleaned_text = cleaned_text.strip()
5265
 
5266
+ print(f"[์ƒ์„ธ ํƒœ๊ทธ ์ƒ์„ฑ] ๋งˆํฌ๋‹ค์šด ์ œ๊ฑฐ ํ›„ ํ…์ŠคํŠธ ๊ธธ์ด: {len(cleaned_text)} ๋ฌธ์ž")
5267
+ print(f"[์ƒ์„ธ ํƒœ๊ทธ ์ƒ์„ฑ] ๋งˆํฌ๋‹ค์šด ์ œ๊ฑฐ ํ›„ ์ฒ˜์Œ 300์ž: {cleaned_text[:300]}")
5268
+
5269
  # ๊ด„ํ˜ธ ๋งค์นญ์„ ์‚ฌ์šฉํ•œ ์ •ํ™•ํ•œ JSON ์ถ”์ถœ ํ•จ์ˆ˜
5270
  def extract_json_by_brackets(text):
5271
  """๊ด„ํ˜ธ ๋งค์นญ์„ ์‚ฌ์šฉํ•˜์—ฌ JSON ๊ฐ์ฒด ์ถ”์ถœ"""
 
5356
  else:
5357
  print(f"[์ƒ์„ธ ํƒœ๊ทธ ์ƒ์„ฑ] JSON ํ˜•์‹์ด ์•„๋‹˜ - ์ „์ฒด ์‘๋‹ต:")
5358
  print(response_text)
5359
+ print(f"[์ƒ์„ธ ํƒœ๊ทธ ์ƒ์„ฑ] ๋งˆํฌ๋‹ค์šด ์ œ๊ฑฐ ํ›„ ํ…์ŠคํŠธ:")
5360
+ print(cleaned_text)
5361
+ print(f"[์ƒ์„ธ ํƒœ๊ทธ ์ƒ์„ฑ] ์ฒซ ๋ฒˆ์งธ {{ ์œ„์น˜: {cleaned_text.find('{')}")
5362
+ print(f"[์ƒ์„ธ ํƒœ๊ทธ ์ƒ์„ฑ] ์ฒซ ๋ฒˆ์งธ }} ์œ„์น˜: {cleaned_text.find('}')}")
5363
+
5364
+ # ์ตœํ›„์˜ ์ˆ˜๋‹จ: ์›๋ณธ์—์„œ ์ง์ ‘ { ์ฐพ์•„์„œ ์ถ”์ถœ ์‹œ๋„
5365
+ if '{' in cleaned_text:
5366
+ start_idx = cleaned_text.find('{')
5367
+ # ๊ด„ํ˜ธ ๋งค์นญ์œผ๋กœ ๋‹ค์‹œ ์‹œ๋„
5368
+ depth = 0
5369
+ for i in range(start_idx, len(cleaned_text)):
5370
+ if cleaned_text[i] == '{':
5371
+ depth += 1
5372
+ elif cleaned_text[i] == '}':
5373
+ depth -= 1
5374
+ if depth == 0:
5375
+ json_str = cleaned_text[start_idx:i+1]
5376
+ print(f"[์ƒ์„ธ ํƒœ๊ทธ ์ƒ์„ฑ] ์ตœํ›„์˜ ์ˆ˜๋‹จ์œผ๋กœ JSON ์ถ”์ถœ ์‹œ๋„, ๊ธธ์ด: {len(json_str)}")
5377
+ try:
5378
+ tags_data = json.loads(json_str)
5379
+ print(f"[์ƒ์„ธ ํƒœ๊ทธ ์ƒ์„ฑ] ์ตœํ›„์˜ ์ˆ˜๋‹จ์œผ๋กœ JSON ํŒŒ์‹ฑ ์„ฑ๊ณต!")
5380
+ except Exception as e:
5381
+ print(f"[์ƒ์„ธ ํƒœ๊ทธ ์ƒ์„ฑ] ์ตœํ›„์˜ ์ˆ˜๋‹จ๋„ ์‹คํŒจ: {e}")
5382
+ return jsonify({
5383
+ 'error': 'AI ์‘๋‹ต์ด ์˜ฌ๋ฐ”๋ฅธ JSON ํ˜•์‹์ด ์•„๋‹™๋‹ˆ๋‹ค.',
5384
+ 'response_preview': response_text[:500] if len(response_text) > 500 else response_text,
5385
+ 'cleaned_preview': cleaned_text[:500] if len(cleaned_text) > 500 else cleaned_text
5386
+ }), 500
5387
+ break
5388
+ else:
5389
+ return jsonify({
5390
+ 'error': 'AI ์‘๋‹ต์ด ์˜ฌ๋ฐ”๋ฅธ JSON ํ˜•์‹์ด ์•„๋‹™๋‹ˆ๋‹ค.',
5391
+ 'response_preview': response_text[:500] if len(response_text) > 500 else response_text,
5392
+ 'cleaned_preview': cleaned_text[:500] if len(cleaned_text) > 500 else cleaned_text
5393
+ }), 500
5394
+ else:
5395
+ return jsonify({
5396
+ 'error': 'AI ์‘๋‹ต์ด ์˜ฌ๋ฐ”๋ฅธ JSON ํ˜•์‹์ด ์•„๋‹™๋‹ˆ๋‹ค.',
5397
+ 'response_preview': response_text[:500] if len(response_text) > 500 else response_text,
5398
+ 'cleaned_preview': cleaned_text[:500] if len(cleaned_text) > 500 else cleaned_text
5399
+ }), 500
5400
  except Exception as e:
5401
  print(f"[์ƒ์„ธ ํƒœ๊ทธ ์ƒ์„ฑ] ํŒŒ์‹ฑ ์˜ค๋ฅ˜: {str(e)}")
5402
  import traceback
 
5726
  # ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์œผ๋กœ JSON ์ถ”์ถœ ์‹œ๋„
5727
  # ๋งˆํฌ๋‹ค์šด ์ฝ”๋“œ ๋ธ”๋ก ์ œ๊ฑฐ (๋” ๊ฐ•๋ ฅํ•˜๊ฒŒ)
5728
  cleaned_text = response_text
5729
+
5730
+ # ๋ฐฉ๋ฒ• 1: ์ „์ฒด ์ฝ”๋“œ ๋ธ”๋ก ์ œ๊ฑฐ (```json ... ```)
5731
+ cleaned_text = re.sub(r'```json\s*\n(.*?)\n```', r'\1', cleaned_text, flags=re.IGNORECASE | re.DOTALL)
5732
+ cleaned_text = re.sub(r'```\s*\n(.*?)\n```', r'\1', cleaned_text, flags=re.DOTALL)
5733
+
5734
+ # ๋ฐฉ๋ฒ• 2: ์ฝ”๋“œ ๋ธ”๋ก ์‹œ์ž‘/๋ ๋งˆ์ปค ์ œ๊ฑฐ
5735
  cleaned_text = re.sub(r'```json\s*\n?', '', cleaned_text, flags=re.IGNORECASE)
5736
  cleaned_text = re.sub(r'```\s*\n?', '', cleaned_text)
5737
+ cleaned_text = re.sub(r'\n?```\s*$', '', cleaned_text, flags=re.MULTILINE)
5738
+
5739
+ # ๋ฐฉ๋ฒ• 3: ์•ž๋’ค ๊ณต๋ฐฑ ๋ฐ ์ค„๋ฐ”๊ฟˆ ์ œ๊ฑฐ
5740
  cleaned_text = cleaned_text.strip()
5741
 
5742
+ print(f"[์ผ๋ฐ˜ ํƒœ๊ทธ ์ƒ์„ฑ] ๋งˆํฌ๋‹ค์šด ์ œ๊ฑฐ ํ›„ ํ…์ŠคํŠธ ๊ธธ์ด: {len(cleaned_text)} ๋ฌธ์ž")
5743
+ print(f"[์ผ๋ฐ˜ ํƒœ๊ทธ ์ƒ์„ฑ] ๋งˆํฌ๋‹ค์šด ์ œ๊ฑฐ ํ›„ ์ฒ˜์Œ 300์ž: {cleaned_text[:300]}")
5744
+
5745
  # ๊ด„ํ˜ธ ๋งค์นญ์„ ์‚ฌ์šฉํ•œ ์ •ํ™•ํ•œ JSON ์ถ”์ถœ ํ•จ์ˆ˜
5746
  def extract_json_by_brackets(text):
5747
  """๊ด„ํ˜ธ ๋งค์นญ์„ ์‚ฌ์šฉํ•˜์—ฌ JSON ๊ฐ์ฒด ์ถ”์ถœ"""
 
5830
  else:
5831
  print(f"[์ผ๋ฐ˜ ํƒœ๊ทธ ์ƒ์„ฑ] JSON ํ˜•์‹์ด ์•„๋‹˜ - ์ „์ฒด ์‘๋‹ต:")
5832
  print(response_text)
5833
+ print(f"[์ผ๋ฐ˜ ํƒœ๊ทธ ์ƒ์„ฑ] ๋งˆํฌ๋‹ค์šด ์ œ๊ฑฐ ํ›„ ํ…์ŠคํŠธ:")
5834
+ print(cleaned_text)
5835
+ print(f"[์ผ๋ฐ˜ ํƒœ๊ทธ ์ƒ์„ฑ] ์ฒซ ๋ฒˆ์งธ { ์œ„์น˜: {cleaned_text.find('{')}")
5836
+ print(f"[์ผ๋ฐ˜ ํƒœ๊ทธ ์ƒ์„ฑ] ์ฒซ ๋ฒˆ์งธ } ์œ„์น˜: {cleaned_text.find('}')}")
5837
+
5838
+ # ์ตœํ›„์˜ ์ˆ˜๋‹จ: ์›๋ณธ์—์„œ ์ง์ ‘ { ์ฐพ์•„์„œ ์ถ”์ถœ ์‹œ๋„
5839
+ if '{' in cleaned_text:
5840
+ start_idx = cleaned_text.find('{')
5841
+ # ๊ด„ํ˜ธ ๋งค์นญ์œผ๋กœ ๋‹ค์‹œ ์‹œ๋„
5842
+ depth = 0
5843
+ for i in range(start_idx, len(cleaned_text)):
5844
+ if cleaned_text[i] == '{':
5845
+ depth += 1
5846
+ elif cleaned_text[i] == '}':
5847
+ depth -= 1
5848
+ if depth == 0:
5849
+ json_str = cleaned_text[start_idx:i+1]
5850
+ print(f"[์ผ๋ฐ˜ ํƒœ๊ทธ ์ƒ์„ฑ] ์ตœํ›„์˜ ์ˆ˜๋‹จ์œผ๋กœ JSON ์ถ”์ถœ ์‹œ๋„, ๊ธธ์ด: {len(json_str)}")
5851
+ try:
5852
+ tags_data = json.loads(json_str)
5853
+ print(f"[์ผ๋ฐ˜ ํƒœ๊ทธ ์ƒ์„ฑ] ์ตœํ›„์˜ ์ˆ˜๋‹จ์œผ๋กœ JSON ํŒŒ์‹ฑ ์„ฑ๊ณต!")
5854
+ except Exception as e:
5855
+ print(f"[์ผ๋ฐ˜ ํƒœ๊ทธ ์ƒ์„ฑ] ์ตœํ›„์˜ ์ˆ˜๋‹จ๋„ ์‹คํŒจ: {e}")
5856
+ return jsonify({
5857
+ 'error': 'AI ์‘๋‹ต์ด ์˜ฌ๋ฐ”๋ฅธ JSON ํ˜•์‹์ด ์•„๋‹™๋‹ˆ๋‹ค.',
5858
+ 'response_preview': response_text[:500] if len(response_text) > 500 else response_text,
5859
+ 'cleaned_preview': cleaned_text[:500] if len(cleaned_text) > 500 else cleaned_text
5860
+ }), 500
5861
+ break
5862
+ else:
5863
+ return jsonify({
5864
+ 'error': 'AI ์‘๋‹ต์ด ์˜ฌ๋ฐ”๋ฅธ JSON ํ˜•์‹์ด ์•„๋‹™๋‹ˆ๋‹ค.',
5865
+ 'response_preview': response_text[:500] if len(response_text) > 500 else response_text,
5866
+ 'cleaned_preview': cleaned_text[:500] if len(cleaned_text) > 500 else cleaned_text
5867
+ }), 500
5868
+ else:
5869
+ return jsonify({
5870
+ 'error': 'AI ์‘๋‹ต์ด ์˜ฌ๋ฐ”๋ฅธ JSON ํ˜•์‹์ด ์•„๋‹™๋‹ˆ๋‹ค.',
5871
+ 'response_preview': response_text[:500] if len(response_text) > 500 else response_text,
5872
+ 'cleaned_preview': cleaned_text[:500] if len(cleaned_text) > 500 else cleaned_text
5873
+ }), 500
5874
  except Exception as e:
5875
  print(f"[์ผ๋ฐ˜ ํƒœ๊ทธ ์ƒ์„ฑ] ํŒŒ์‹ฑ ์˜ค๋ฅ˜: {str(e)}")
5876
  import traceback