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:
Claude 2026-06-17 20:19:22 +00:00
parent 4da1589a6f
commit abd733258f
No known key found for this signature in database
2 changed files with 16 additions and 1 deletions

View file

@ -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"