mirror of
https://github.com/Alkatrazz24/Funk-lab.git
synced 2026-07-08 18:44:43 +02:00
fix(stt): désactiver le mode thinking de Qwen3 (/no_think) — content vide / 502
Qwen3 est un modèle « thinking » : il dépensait tout le budget max_tokens en reasoning_content → content vide, ou partait en raisonnement long → timeout (502 "upstream LiteLLM : " avec message vide). Diagnostic : appel direct LiteLLM en 0.87s mais content="" et tout dans reasoning_content. - brain.py : ajoute le token de contrôle `/no_think` au system prompt (configurable STT_DISABLE_THINKING, défaut true ; inoffensif pour non-Qwen). - brain.py : filet de sécurité — si content vide, récupère reasoning_content au lieu de renvoyer "". Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013FmcxGsyXZXogiAHQLjnZT
This commit is contained in:
parent
4da1589a6f
commit
abd733258f
2 changed files with 16 additions and 1 deletions
|
|
@ -19,6 +19,12 @@ async def ask(
|
|||
memories: list[str] | None = None,
|
||||
) -> str:
|
||||
system = settings.system_prompt
|
||||
if settings.disable_thinking:
|
||||
# Qwen3 est un modèle « thinking » : sans ça il dépense tout le budget max_tokens
|
||||
# en raisonnement (`reasoning_content`) → `content` vide, ou part en réflexion longue
|
||||
# → timeout (502). Le token de contrôle `/no_think` désactive le mode raisonnement.
|
||||
# Inoffensif pour les modèles non-Qwen (simple texte ignoré).
|
||||
system += "\n/no_think"
|
||||
if memories:
|
||||
souvenirs = "\n".join(f"- {m}" for m in memories)
|
||||
system += (
|
||||
|
|
@ -39,4 +45,10 @@ async def ask(
|
|||
async with httpx.AsyncClient(timeout=settings.request_timeout) as client:
|
||||
r = await client.post(settings.litellm_url, json=payload, headers=headers)
|
||||
r.raise_for_status()
|
||||
return r.json()["choices"][0]["message"]["content"].strip()
|
||||
msg = r.json()["choices"][0]["message"]
|
||||
# Filet de sécurité : si un modèle « thinking » renvoie un content vide (tout parti
|
||||
# en reasoning_content), on récupère le raisonnement plutôt que de renvoyer "".
|
||||
content = (msg.get("content") or "").strip()
|
||||
if not content:
|
||||
content = (msg.get("reasoning_content") or "").strip()
|
||||
return content
|
||||
|
|
|
|||
|
|
@ -31,6 +31,9 @@ class Settings:
|
|||
max_tokens: int = int(os.getenv("STT_MAX_TOKENS", "200"))
|
||||
temperature: float = float(os.getenv("STT_TEMPERATURE", "0.7"))
|
||||
request_timeout: float = float(os.getenv("STT_REQUEST_TIMEOUT", "60"))
|
||||
# Qwen3 est un modèle « thinking » → ajoute `/no_think` pour désactiver le raisonnement
|
||||
# (sinon content vide / timeout). Inoffensif pour les modèles non-Qwen.
|
||||
disable_thinking: bool = os.getenv("STT_DISABLE_THINKING", "true").lower() == "true"
|
||||
|
||||
# Mémoire long-terme (Qdrant) — dégrade proprement si Qdrant/embeddings injoignables
|
||||
memory_longterm: bool = os.getenv("STT_MEMORY_LONGTERM", "true").lower() == "true"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue