mirror of
https://github.com/Alkatrazz24/Funk-lab.git
synced 2026-07-10 13:54:42 +02:00
feat(stt): mode texte + sélection de modèle (client→serveur par requête) (#7)
Serveur : /v1/ask accepte un model optionnel (validé contre STT_ALLOWED_MODELS), nouvel endpoint GET /v1/models (défaut + alias autorisés). Pas de switch global. Client : 'stt --text' (chat texte simple sans micro/HUD), '--model hermes|claude|qwen|opus' (noms courts → alias LiteLLM), commandes /model et /models en mode texte. Le modèle choisi est envoyé au serveur à chaque requête (voix comme texte). Claude-Session: https://claude.ai/code/session_013FmcxGsyXZXogiAHQLjnZT Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
parent
47936b0088
commit
bcdb4f8b2a
10 changed files with 146 additions and 25 deletions
|
|
@ -1,7 +1,8 @@
|
|||
"""Client HTTP vers le STT-server (in-cluster).
|
||||
|
||||
Le client n'a plus de cerveau : il envoie le texte transcrit au serveur, qui
|
||||
orchestre l'inférence (LiteLLM → Qwen3/Claude) et renvoie la réponse.
|
||||
orchestre l'inférence (LiteLLM → Qwen3/Claude) et renvoie la réponse. Le client
|
||||
choisit le modèle (alias LiteLLM) et le passe au serveur par requête.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
|
@ -13,18 +14,29 @@ class ServerClient:
|
|||
def __init__(self, cfg: dict[str, Any]):
|
||||
self.url = cfg["url"].rstrip("/")
|
||||
self.timeout = cfg.get("timeout_sec", 90)
|
||||
self.model = cfg.get("model", "hermes-default")
|
||||
|
||||
def ask(self, text: str) -> str:
|
||||
def ask(self, text: str, model: str | None = None) -> str:
|
||||
import requests
|
||||
|
||||
r = requests.post(
|
||||
f"{self.url}/v1/ask",
|
||||
json={"text": text},
|
||||
json={"text": text, "model": model or self.model},
|
||||
timeout=self.timeout,
|
||||
)
|
||||
if r.status_code == 400:
|
||||
raise RuntimeError(r.json().get("detail", "requête invalide"))
|
||||
r.raise_for_status()
|
||||
return r.json()["reply"].strip()
|
||||
|
||||
def models(self) -> dict:
|
||||
"""{'default': ..., 'available': [...]} depuis le serveur."""
|
||||
import requests
|
||||
|
||||
r = requests.get(f"{self.url}/v1/models", timeout=10)
|
||||
r.raise_for_status()
|
||||
return r.json()
|
||||
|
||||
def healthy(self) -> bool:
|
||||
import requests
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue