Spaces:
Running
Running
Cache last-working LLM to avoid retrying unavailable models (faster subsequent rewrites)
Browse files
ai_ext.py
CHANGED
|
@@ -73,6 +73,8 @@ QWEN_TEXT_MODELS = [m.strip() for m in os.getenv(
|
|
| 73 |
"QWEN_TEXT_MODELS",
|
| 74 |
"Qwen/Qwen2.5-72B-Instruct,meta-llama/Llama-3.3-70B-Instruct,Qwen/Qwen2.5-7B-Instruct"
|
| 75 |
).split(",") if m.strip()]
|
|
|
|
|
|
|
| 76 |
DATA_DIR = "/data" if os.path.isdir("/data") else "/app/data"
|
| 77 |
SHORTS_DIR = os.path.join(DATA_DIR, "ai_shorts")
|
| 78 |
HEADERS = {
|
|
@@ -544,6 +546,11 @@ async def qwen_generate(prompt: str, image_url: Optional[str] = None, max_tokens
|
|
| 544 |
else:
|
| 545 |
# Text-only summary -> FAST text models first, VL only as last resort.
|
| 546 |
candidate = QWEN_TEXT_MODELS + [QWEN_VL_MODEL]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 547 |
for m in candidate:
|
| 548 |
if m and m not in models:
|
| 549 |
models.append(m)
|
|
@@ -580,6 +587,8 @@ async def qwen_generate(prompt: str, image_url: Optional[str] = None, max_tokens
|
|
| 580 |
txt = (resp.choices[0].message.content or "").strip()
|
| 581 |
if txt:
|
| 582 |
LAST_QWEN_ERROR = ""
|
|
|
|
|
|
|
| 583 |
return txt
|
| 584 |
except Exception as e:
|
| 585 |
errors.append(f"{model}: {type(e).__name__}: {str(e)[:220]}")
|
|
|
|
| 73 |
"QWEN_TEXT_MODELS",
|
| 74 |
"Qwen/Qwen2.5-72B-Instruct,meta-llama/Llama-3.3-70B-Instruct,Qwen/Qwen2.5-7B-Instruct"
|
| 75 |
).split(",") if m.strip()]
|
| 76 |
+
_WORKING_MODEL_TEXT = None # cached last-working text model
|
| 77 |
+
_WORKING_MODEL_VL = None # cached last-working vision model
|
| 78 |
DATA_DIR = "/data" if os.path.isdir("/data") else "/app/data"
|
| 79 |
SHORTS_DIR = os.path.join(DATA_DIR, "ai_shorts")
|
| 80 |
HEADERS = {
|
|
|
|
| 546 |
else:
|
| 547 |
# Text-only summary -> FAST text models first, VL only as last resort.
|
| 548 |
candidate = QWEN_TEXT_MODELS + [QWEN_VL_MODEL]
|
| 549 |
+
# Use the last-known-working model first to avoid wasting time on unavailable models.
|
| 550 |
+
global _WORKING_MODEL_TEXT, _WORKING_MODEL_VL
|
| 551 |
+
cached_ok = _WORKING_MODEL_VL if has_images else _WORKING_MODEL_TEXT
|
| 552 |
+
if cached_ok and cached_ok in candidate:
|
| 553 |
+
candidate = [cached_ok] + [m for m in candidate if m != cached_ok]
|
| 554 |
for m in candidate:
|
| 555 |
if m and m not in models:
|
| 556 |
models.append(m)
|
|
|
|
| 587 |
txt = (resp.choices[0].message.content or "").strip()
|
| 588 |
if txt:
|
| 589 |
LAST_QWEN_ERROR = ""
|
| 590 |
+
if has_images: _WORKING_MODEL_VL = model
|
| 591 |
+
else: _WORKING_MODEL_TEXT = model
|
| 592 |
return txt
|
| 593 |
except Exception as e:
|
| 594 |
errors.append(f"{model}: {type(e).__name__}: {str(e)[:220]}")
|