feat(stt): Asa agentique — boucle d'outils (function calling, Phase 1) (#48)

Asa ne répondait qu'à partir d'un contexte figé (RAG doc ou blocs live
pré-câblés, à présélectionner) → les questions à état live (« gpu-01 tourne
bien ? ») tombaient sur « la doc ne le précise pas ». Bascule vers une boucle
de function-calling : le modèle décide quels outils appeler puis répond à
partir de leurs résultats.

- Nouveau contexte `asa` (STT_DEFAULT_CONTEXT=asa, défaut prod) + tools.py
  (registre schémas OpenAI + exécuteurs) + brain.ask_with_tools (boucle bornée
  STT_TOOL_MAX_ITERS=4, réponse forcée au-delà ; _post factorisé + retry).
- Outils Phase 1, LECTURE SEULE : search_docs (RAG funk-docs), host_health
  (gpu-01|storage-01 : up/charge/RAM + llama-server), cluster_status,
  prometheus_query (PromQL arbitraire). Réutilisent sources.py / knowledge.py.
- Trace des outils renvoyée dans `context` → visualiseur HUD (un bloc par appel).
- 100 % local (Qwen3-8B) : tool-calling natif llama.cpp validé, survit au
  /no_think. LiteLLM transmet bien les tools. PromQL validés contre le vrai
  Prometheus in-cluster. 3 tests unitaires de la boucle (hors-ligne).

Web search (SearXNG in-cluster) = Phase 2 ; actions admin pilotées par le LLM
(hermes-exec comme outil) = Phase 3.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
ALI YESILKAYA 2026-06-22 21:52:28 +02:00 committed by GitHub
parent de1cd6c407
commit 7cafc06069
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 566 additions and 42 deletions

View file

@ -51,9 +51,11 @@ spec:
value: "http://192.168.10.20:1238/v1/embeddings"
- name: STT_EMBED_MODEL
value: "nomic-embed-text"
# Contextes présélectionnables (sources live) — services in-cluster
# Contextes présélectionnables (sources live) — services in-cluster.
# Défaut « asa » : boucle d'outils (function calling local) → Asa sonde l'état
# live du homelab et la doc d'elle-même. « funk » (RAG strict) reste sélectionnable.
- name: STT_DEFAULT_CONTEXT
value: "funk"
value: "asa"
- name: STT_PROMETHEUS_URL
value: "http://kube-prometheus-stack-prometheus.monitoring:9090"
- name: STT_ALERTMANAGER_URL