deankk commited on
Commit
684c556
·
verified ·
1 Parent(s): 815bf02

Update app.py

Browse files

1. Model default diganti:
❌ Qwen/Qwen2.5-3B-Instruct (kemungkinan butuh PRO)
✅ Qwen/Qwen2.5-1.5B-Instruct (lebih kecil, pasti gratis)

2. Error sekarang menampilkan DETAIL asli:
❌ dulu: "Gagal menghubungi API. Coba lagi nanti."
✅ sekarang: "Error dari API: 401: Invalid token..."
atau "404: Model not found..."
atau error lainnya yang jelas

3. Di pesan error juga dikasih saran model alternatif

Files changed (1) hide show
  1. app.py +44 -19
app.py CHANGED
@@ -23,11 +23,13 @@ import os
23
  # ══════════════════════════════════════════════════════
24
  # KONFIGURASI MODEL
25
  # ══════════════════════════════════════════════════════
26
-
27
- MODEL_NAME = "Qwen/Qwen2.5-3B-Instruct"
28
- # MODEL_NAME = "Qwen/Qwen2.5-1.5B-Instruct"
29
- # MODEL_NAME = "meta-llama/Llama-3.2-1B-Instruct"
30
- # MODEL_NAME = "google/gemma-2-2b-it"
 
 
31
 
32
  HF_TOKEN = os.environ.get("HF_TOKEN", "")
33
  CHAT_API = f"https://api-inference.huggingface.co/models/{MODEL_NAME}/v1/chat/completions"
@@ -99,6 +101,7 @@ def call_api(messages):
99
  }
100
  params = {"max_tokens": 1000, "temperature": 0.85, "top_p": 0.9}
101
 
 
102
  try:
103
  resp = requests.post(
104
  CHAT_API, headers=headers,
@@ -111,11 +114,15 @@ def call_api(messages):
111
  return "LOADING"
112
  if resp.status_code == 429:
113
  return "RATE_LIMIT"
 
 
114
  except requests.exceptions.Timeout:
115
  return "TIMEOUT"
116
- except Exception:
117
- pass
118
 
 
 
119
  try:
120
  prompt = f"{messages[0]['content']}\n\n{messages[1]['content']}"
121
  resp = requests.post(
@@ -142,12 +149,11 @@ def call_api(messages):
142
  return "LOADING"
143
  if resp.status_code == 429:
144
  return "RATE_LIMIT"
 
145
  except requests.exceptions.Timeout:
146
  return "TIMEOUT"
147
- except Exception:
148
- pass
149
-
150
- return "ERROR"
151
 
152
 
153
  def clean_text(text):
@@ -229,17 +235,36 @@ BUAT TEPAT {jumlah} CAPTION YANG BERBEDA."""
229
 
230
  result = call_api(messages)
231
 
232
- error_map = {
233
- "LOADING": "⏳ Model sedang loading... Tunggu 20-30 detik lalu coba lagi.",
234
- "RATE_LIMIT": "⚠️ Terlalu banyak request. Tunggu 1-2 menit lalu coba lagi.",
235
- "TIMEOUT": "⏳ Request timeout. Coba lagi.",
236
- "ERROR": "❌ Gagal menghubungi API. Coba lagi nanti.",
237
- }
 
 
238
 
239
- if result in error_map:
240
- vals = [error_map[result]] + [""] * 4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
241
  return tuple(gr.update(value=v, visible=True) for v in vals)
242
 
 
243
  captions = parse_captions(result, jumlah)
244
 
245
  output = []
 
23
  # ══════════════════════════════════════════════════════
24
  # KONFIGURASI MODEL
25
  # ══════════════════════════════════════════════════════
26
+ # Ganti model di sini kalau ada yang error.
27
+ # Model-model ini biasanya tersedia gratis:
28
+ MODEL_NAME = "Qwen/Qwen2.5-1.5B-Instruct"
29
+ # MODEL_NAME = "Qwen/Qwen2.5-0.5B-Instruct" # Paling kecil, paling pasti gratis
30
+ # MODEL_NAME = "google/gemma-2-2b-it" # Alternatif
31
+ # MODEL_NAME = "mistralai/Mistral-7B-Instruct-v0.3" # Alternatif
32
+ # MODEL_NAME = "HuggingFaceH4/zephyr-7b-beta" # Alternatif
33
 
34
  HF_TOKEN = os.environ.get("HF_TOKEN", "")
35
  CHAT_API = f"https://api-inference.huggingface.co/models/{MODEL_NAME}/v1/chat/completions"
 
101
  }
102
  params = {"max_tokens": 1000, "temperature": 0.85, "top_p": 0.9}
103
 
104
+ # ── Attempt 1: Chat Completions API ──
105
  try:
106
  resp = requests.post(
107
  CHAT_API, headers=headers,
 
114
  return "LOADING"
115
  if resp.status_code == 429:
116
  return "RATE_LIMIT"
117
+ # Error lainnya — simpan info buat debugging
118
+ return f"CHAT_ERROR_{resp.status_code}:{resp.text[:300]}"
119
  except requests.exceptions.Timeout:
120
  return "TIMEOUT"
121
+ except Exception as e:
122
+ return f"CHAT_EXCEPTION:{str(e)[:200]}"
123
 
124
+ # ── Attempt 2: Text Generation API (fallback) ──
125
+ # Kode di bawah ini hanya jalan kalau chat API tidak reachable sama sekali
126
  try:
127
  prompt = f"{messages[0]['content']}\n\n{messages[1]['content']}"
128
  resp = requests.post(
 
149
  return "LOADING"
150
  if resp.status_code == 429:
151
  return "RATE_LIMIT"
152
+ return f"TEXT_ERROR_{resp.status_code}:{resp.text[:300]}"
153
  except requests.exceptions.Timeout:
154
  return "TIMEOUT"
155
+ except Exception as e:
156
+ return f"TEXT_EXCEPTION:{str(e)[:200]}"
 
 
157
 
158
 
159
  def clean_text(text):
 
235
 
236
  result = call_api(messages)
237
 
238
+ # Handle error spesifik
239
+ if result == "LOADING":
240
+ vals = [" Model sedang loading... Tunggu 20-30 detik lalu coba lagi."] + [""] * 4
241
+ return tuple(gr.update(value=v, visible=True) for v in vals)
242
+
243
+ if result == "RATE_LIMIT":
244
+ vals = ["⚠️ Terlalu banyak request. Tunggu 1-2 menit lalu coba lagi."] + [""] * 4
245
+ return tuple(gr.update(value=v, visible=True) for v in vals)
246
 
247
+ if result == "TIMEOUT":
248
+ vals = ["⏳ Request timeout. Coba lagi."] + [""] * 4
249
+ return tuple(gr.update(value=v, visible=True) for v in vals)
250
+
251
+ # Kalau error dari API, tampilkan detailnya biar bisa debug
252
+ if result and (result.startswith("CHAT_ERROR") or result.startswith("TEXT_ERROR")
253
+ or result.startswith("CHAT_EXCEPTION") or result.startswith("TEXT_EXCEPTION")):
254
+ detail = result.replace("CHAT_ERROR_", "").replace("TEXT_ERROR_", "")
255
+ msg = (
256
+ f"❌ Error dari API:\n\n{detail}\n\n"
257
+ f"Model yang dipakai: {MODEL_NAME}\n\n"
258
+ f"Coba ganti model di kode app.py baris paling atas.\n"
259
+ f"Model yang biasanya gratis:\n"
260
+ f"• Qwen/Qwen2.5-0.5B-Instruct\n"
261
+ f"• Qwen/Qwen2.5-1.5B-Instruct\n"
262
+ f"• google/gemma-2-2b-it"
263
+ )
264
+ vals = [msg] + [""] * 4
265
  return tuple(gr.update(value=v, visible=True) for v in vals)
266
 
267
+ # Sukses — parse caption
268
  captions = parse_captions(result, jumlah)
269
 
270
  output = []