feat(rag): embedder dédié nomic-embed-text (768) au lieu de qwen3-8b

funk-docs utilisait le modèle de CHAT qwen3-8b (:1234, 4096 dim) comme
embedder → similarités quasi indiscernables (tous les scores ~0.96, ranking
médiocre). Bascule sur l'instance dédiée nomic-embed-text (:1238, 768 dim) —
la même que la mémoire STT — déjà identifiée comme roadmap dans le README.

rag-ingest ET rag-query alignés (même modèle/dim). Seuil rag-query abaissé
0.60→0.40 (nomic étale les scores plus bas). Collection recréée en 768.

Mesure : scores désormais étalés 0.61-0.74, et les bons docs ressortent en
tête (dnsmasq→dnsmasq.md, nftables→phase gateway, wedge→llama_server.md).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
alkatrazz 2026-06-19 21:29:38 +02:00
parent 2f8ffdbbd1
commit 0d4dfcc3f5
3 changed files with 21 additions and 11 deletions

View file

@ -13,10 +13,13 @@ import urllib.request
import urllib.error
QDRANT_URL = os.environ.get("QDRANT_URL", "http://127.0.0.1:6333")
EMBED_URL = os.environ.get("EMBED_URL", "http://192.168.10.20:1234/v1/embeddings")
EMBED_MODEL = os.environ.get("EMBED_MODEL", "qwen3-8b")
# Embedder DÉDIÉ nomic-embed-text (gpu-01 :1238, dim 768) — pas le modèle de chat :1234.
# nomic est un vrai modèle d'embedding → similarités bien plus discriminantes que qwen3-8b.
# Doit rester aligné avec rag-query (même modèle/dim) et l'instance llama-embed (rôle llama_server).
EMBED_URL = os.environ.get("EMBED_URL", "http://192.168.10.20:1238/v1/embeddings")
EMBED_MODEL = os.environ.get("EMBED_MODEL", "nomic-embed-text")
COLLECTION = os.environ.get("RAG_COLLECTION", "funk-docs")
VECTOR_DIM = 4096
VECTOR_DIM = int(os.environ.get("RAG_VECTOR_DIM", "768"))
CHUNK_MAX = 2000
# Dossiers (relatifs à docs_dir) exclus de l'index : rapports auto-générés par

View file

@ -10,10 +10,13 @@ import os
import urllib.request
QDRANT_URL = os.environ.get("QDRANT_URL", "http://127.0.0.1:6333")
EMBED_URL = os.environ.get("EMBED_URL", "http://192.168.10.20:1234/v1/embeddings")
EMBED_MODEL = os.environ.get("EMBED_MODEL", "qwen3-8b")
# Doit matcher rag-ingest : embedder dédié nomic-embed-text (gpu-01 :1238, dim 768).
EMBED_URL = os.environ.get("EMBED_URL", "http://192.168.10.20:1238/v1/embeddings")
EMBED_MODEL = os.environ.get("EMBED_MODEL", "nomic-embed-text")
COLLECTION = os.environ.get("RAG_COLLECTION", "funk-docs")
MIN_SCORE = 0.60
# nomic étale les scores cosinus plus bas que qwen3-8b (qui saturait ~0.96) → seuil
# plus permissif pour ne pas écarter de bons passages. Surchargeable via RAG_MIN_SCORE.
MIN_SCORE = float(os.environ.get("RAG_MIN_SCORE", "0.40"))
def _post(url, data):