mirror of
https://github.com/Alkatrazz24/Funk-lab.git
synced 2026-07-11 04:34:41 +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,
|
memories: list[str] | None = None,
|
||||||
) -> str:
|
) -> str:
|
||||||
system = settings.system_prompt
|
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:
|
if memories:
|
||||||
souvenirs = "\n".join(f"- {m}" for m in memories)
|
souvenirs = "\n".join(f"- {m}" for m in memories)
|
||||||
system += (
|
system += (
|
||||||
|
|
@ -39,4 +45,10 @@ async def ask(
|
||||||
async with httpx.AsyncClient(timeout=settings.request_timeout) as client:
|
async with httpx.AsyncClient(timeout=settings.request_timeout) as client:
|
||||||
r = await client.post(settings.litellm_url, json=payload, headers=headers)
|
r = await client.post(settings.litellm_url, json=payload, headers=headers)
|
||||||
r.raise_for_status()
|
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"))
|
max_tokens: int = int(os.getenv("STT_MAX_TOKENS", "200"))
|
||||||
temperature: float = float(os.getenv("STT_TEMPERATURE", "0.7"))
|
temperature: float = float(os.getenv("STT_TEMPERATURE", "0.7"))
|
||||||
request_timeout: float = float(os.getenv("STT_REQUEST_TIMEOUT", "60"))
|
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
|
# Mémoire long-terme (Qdrant) — dégrade proprement si Qdrant/embeddings injoignables
|
||||||
memory_longterm: bool = os.getenv("STT_MEMORY_LONGTERM", "true").lower() == "true"
|
memory_longterm: bool = os.getenv("STT_MEMORY_LONGTERM", "true").lower() == "true"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue