mirror of
https://github.com/Alkatrazz24/Funk-lab.git
synced 2026-07-08 18:34:43 +02:00
* feat(stt): mémoire long-terme sémantique via Qdrant (5b) Serveur : longterm.py — collection Qdrant stt-memory (embeddings Qwen3 gpu-01, dim auto, Cosine), recall top-k injecté au prompt, remember des tours user. Tout dégrade proprement si Qdrant/embeddings injoignables (la mémoire court-terme tient). Env STT_MEMORY_LONGTERM, STT_QDRANT_URL, STT_EMBED_URL, STT_MEMORY_TOPK. Testé en process : dégradation OK (Qdrant down → mem=0, pas de crash, court-terme tient). Qdrant réparé le 17/06 (5c). Recherche sémantique réelle à valider sur cluster. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013FmcxGsyXZXogiAHQLjnZT * feat(stt): endpoint /v1/memory/health + upsert Qdrant synchrone - /v1/memory/health sonde activement embeddings + Qdrant + collection et expose les erreurs (recall/remember dégradent en silence → indébogables). Permet de diagnostiquer la mémoire long-terme sans kubectl exec. - remember() : upsert avec ?wait=true → le souvenir est immédiatement cherchable (sans wait, Qdrant met l'écriture en file → un recall cross-session immédiat pouvait le rater). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013FmcxGsyXZXogiAHQLjnZT * docs(stt): 5b mémoire long-terme validée en prod + backlog nomic-embed-text - Rappel cross-session confirmé (« Felix » retrouvé dans une nouvelle session), points_count vérifié via /v1/memory/health. - Note du fix upsert ?wait=true et de l'endpoint de diagnostic. - Roadmap : 5d (nomic-embed-text dim 768) en backlog qualité ; états haut/bas du doc mis à jour (déployé + validé sur cible). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013FmcxGsyXZXogiAHQLjnZT * feat(stt): embeddings dédiés nomic-embed-text sur gpu-01 (:1238) + migration auto Remplace Qwen3 (chat réutilisé, dim 4096, peu discriminant) par un modèle d'embedding spécialisé nomic-embed-text (dim 768) pour la mémoire long-terme. Ansible (rôle llama_server) : - nouvelle instance optionnelle `llama-embed` (llama_embed_enabled) servant un modèle d'embedding dédié sur :1238, GPU ; télécharge le GGUF si absent. - activée sur gpu-01 (host_vars) : nomic-embed-text-v1.5 f16. STT-server : - STT_EMBED_URL → :1238, STT_EMBED_MODEL → nomic-embed-text (deployment + config). - _ensure_collection détecte le changement de dimension (4096→768) et recrée automatiquement la collection stt-memory (anciens vecteurs incomparables) — pas de drop manuel. Docs : llama_server README, rag.md, stt.md (5d ✅), CLAUDE.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013FmcxGsyXZXogiAHQLjnZT * 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 * docs(stt): documenter le fix /no_think Qwen3 + instance embeddings :1238 - admin/ia/stt.md : caveat « thinking » Qwen3 (content vide / timeout 502) + fix /no_think + fallback reasoning_content ; roadmap 5e ; bannière. - stt/server/README.md : env STT_DISABLE_THINKING + section caveat Qwen3. - admin/ia/llama_server.md : 4e instance llama-embed :1238 (nomic, dim 768), double source d'embeddings (1234 Qwen3 / 1238 nomic), caveat thinking, correction dim Qwen3 (3584 → 4096). - admin/ia/litellm.md : cross-ref caveat thinking (concerne tous les consommateurs de hermes-default/qwen3). - ci : exclure **/*.md du trigger build-stt-server (doc-only ne rebuild plus). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013FmcxGsyXZXogiAHQLjnZT --------- Co-authored-by: Claude <noreply@anthropic.com>
63 lines
2.1 KiB
YAML
63 lines
2.1 KiB
YAML
name: build-stt-server
|
|
|
|
# Construit l'image du STT-server, la tague par SHA de commit, et (sur main) met à jour
|
|
# le manifest k8s avec ce tag → ArgoCD déploie une image immuable et déterministe.
|
|
on:
|
|
push:
|
|
branches: ["main", "claude/**"]
|
|
paths:
|
|
- "stt/server/**"
|
|
- "!stt/server/**/*.md" # les changements doc-only ne rebuildent pas l'image
|
|
- ".github/workflows/build-stt-server.yml"
|
|
workflow_dispatch:
|
|
|
|
env:
|
|
IMAGE: ghcr.io/alkatrazz24/funk-stt-server
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: write # pour committer le bump du manifest sur main
|
|
packages: write
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Calcule le tag (SHA court) + la liste des tags
|
|
id: vars
|
|
run: |
|
|
TAG="sha-$(git rev-parse --short=7 HEAD)"
|
|
echo "tag=${TAG}" >> "$GITHUB_OUTPUT"
|
|
if [ "${{ github.ref }}" = "refs/heads/main" ]; then
|
|
echo "tags=${IMAGE}:${TAG},${IMAGE}:latest" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "tags=${IMAGE}:${TAG}" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
- name: Log in to GHCR
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: ghcr.io
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Build & push
|
|
uses: docker/build-push-action@v6
|
|
with:
|
|
context: stt/server
|
|
push: true
|
|
tags: ${{ steps.vars.outputs.tags }}
|
|
|
|
- name: Met à jour le manifest avec le tag SHA (main uniquement)
|
|
if: github.ref == 'refs/heads/main'
|
|
run: |
|
|
sed -i "s|image: ${IMAGE}:.*|image: ${IMAGE}:${{ steps.vars.outputs.tag }}|" \
|
|
k8s/apps/stt/deployment.yaml
|
|
git config user.name "github-actions[bot]"
|
|
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
git add k8s/apps/stt/deployment.yaml
|
|
if ! git diff --staged --quiet; then
|
|
git commit -m "ci(stt): image → ${{ steps.vars.outputs.tag }} [skip ci]"
|
|
git pull --rebase origin main
|
|
git push
|
|
fi
|