mirror of
https://github.com/Alkatrazz24/Funk-lab.git
synced 2026-07-09 00:14:42 +02:00
Cause de la latence 30-45s : l'endpoint d'embeddings (gpu-01:1238) peut se geler ; recall ET remember l'attendaient ~20s chacun (timeout → dégradation silencieuse), s'ajoutant à la réponse. Refactor : - store (ex-remember) en BackgroundTasks → APRÈS la réponse, hors latence perçue ; suppression de `?wait=true` (pas d'attente du flush Qdrant) - recall renvoie aussi le vecteur de la requête → store le réutilise (1 embed/tour au lieu de 2, le 2ᵉ portait sur le même texte) - timeout recall serré (4s, STT_MEMORY_RECALL_TIMEOUT) : un embed lent/mort dégrade vite (souvenirs vides) au lieu de bloquer ; store tolère 20s en arrière-plan - clients httpx persistants (pooling/keep-alive) côté brain + longterm, fermés via lifespan (plus de handshake TCP par appel) - log de timing par requête (recall/gen/total/mem) pour diagnostiquer - bump serveur 0.1.0 → 0.2.0 Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
53 lines
2.6 KiB
Python
53 lines
2.6 KiB
Python
"""Configuration du STT-server — via variables d'environnement (12-factor / k8s)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
|
|
|
|
class Settings:
|
|
# LiteLLM (s01) — joint en IP directe depuis le cluster (cf. open-webui).
|
|
litellm_url: str = os.getenv(
|
|
"STT_LITELLM_URL", "http://192.168.10.1:4000/v1/chat/completions"
|
|
)
|
|
litellm_key: str = os.getenv("STT_LITELLM_KEY", "lm-studio")
|
|
# Modèle par défaut + alias LiteLLM autorisés (le client peut en demander un par requête)
|
|
model: str = os.getenv("STT_MODEL", "hermes-default")
|
|
allowed_models: list[str] = [
|
|
m.strip()
|
|
for m in os.getenv(
|
|
"STT_ALLOWED_MODELS",
|
|
"hermes-default,qwen3-8b,claude-sonnet-4-6,claude-opus-4-7",
|
|
).split(",")
|
|
if m.strip()
|
|
]
|
|
|
|
system_prompt: str = os.getenv(
|
|
"STT_SYSTEM_PROMPT",
|
|
"Tu es Hermes, l'assistant vocal du homelab Funk. "
|
|
"Réponds toujours en français, de façon concise (2-3 phrases maximum), "
|
|
"sans markdown ni listes.",
|
|
)
|
|
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"
|
|
qdrant_url: str = os.getenv("STT_QDRANT_URL", "http://192.168.10.1:6333")
|
|
qdrant_collection: str = os.getenv("STT_QDRANT_COLLECTION", "stt-memory")
|
|
# Embeddings : instance dédiée nomic-embed-text sur llama-server gpu-01 (:1238, dim 768).
|
|
embed_url: str = os.getenv("STT_EMBED_URL", "http://192.168.10.20:1238/v1/embeddings")
|
|
embed_model: str = os.getenv("STT_EMBED_MODEL", "nomic-embed-text")
|
|
memory_top_k: int = int(os.getenv("STT_MEMORY_TOPK", "3"))
|
|
# Le recall (embed + recherche) est sur le chemin de réponse : timeout SERRÉ pour qu'un
|
|
# embed lent/mort dégrade vite (souvenirs vides) au lieu d'ajouter des secondes au client.
|
|
# Le store tourne en tâche de fond (après la réponse) → timeout plus large toléré.
|
|
memory_recall_timeout: float = float(os.getenv("STT_MEMORY_RECALL_TIMEOUT", "4"))
|
|
memory_store_timeout: float = float(os.getenv("STT_MEMORY_STORE_TIMEOUT", "20"))
|
|
|
|
|
|
settings = Settings()
|