NormAssist / src /config.py
Dakoro's picture
Deploy NormAssist — 2026-03-30 16:14
4211d95
Raw
History Blame Contribute Delete
3.6 kB
"""Configuration centralisée du projet."""
import os
from pathlib import Path
from dotenv import load_dotenv
load_dotenv()
# ── Chemins ──────────────────────────────────────────────────────────────────
BASE_DIR = Path(__file__).resolve().parent.parent
DATA_DIR = BASE_DIR / "data"
VECTORSTORE_DIR = BASE_DIR / "vectorstores"
SAMPLE_DIR = DATA_DIR / "sample"
# Créer les répertoires s'ils n'existent pas
DATA_DIR.mkdir(exist_ok=True)
VECTORSTORE_DIR.mkdir(exist_ok=True)
SAMPLE_DIR.mkdir(exist_ok=True)
# ── API ──────────────────────────────────────────────────────────────────────
ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY", "")
# ── LLM Backend ─────────────────────────────────────────────────────────────
# "ollama" → LLM local via Ollama (défaut local, gratuit)
# "huggingface" → Inference API HF (défaut sur HF Spaces, gratuit)
# "anthropic" → Claude API (nécessite ANTHROPIC_API_KEY)
LLM_BACKEND = os.getenv("LLM_BACKEND", "ollama")
# Ollama
OLLAMA_BASE_URL = os.getenv("OLLAMA_BASE_URL", "http://localhost:11434")
OLLAMA_MODEL = os.getenv("OLLAMA_MODEL", "mistral")
# Anthropic (fallback)
ANTHROPIC_MODEL = os.getenv("ANTHROPIC_MODEL", "claude-sonnet-4-20250514")
# ── Embeddings ───────────────────────────────────────────────────────────────
EMBEDDING_MODEL = os.getenv(
"EMBEDDING_MODEL", "sentence-transformers/all-MiniLM-L6-v2"
)
# ── Chunking ─────────────────────────────────────────────────────────────────
CHUNK_SIZE = int(os.getenv("CHUNK_SIZE", "500"))
CHUNK_OVERLAP = int(os.getenv("CHUNK_OVERLAP", "50"))
# ── Retrieval ────────────────────────────────────────────────────────────────
TOP_K = int(os.getenv("TOP_K", "4"))
# ── Prompt système pour le LLM ───────────────────────────────────────────────
SYSTEM_PROMPT = """Tu es NormAssist, un assistant expert en documentation technique industrielle.
Ton rôle est de répondre aux questions des ingénieurs et techniciens en te basant
UNIQUEMENT sur les extraits de documents fournis dans le contexte.
Règles strictes :
1. Réponds UNIQUEMENT à partir des extraits fournis. Si l'information n'est pas dans le contexte, dis-le clairement.
2. Cite TOUJOURS les passages exacts qui appuient ta réponse, entre guillemets, avec le numéro de page.
3. Structure ta réponse : résumé concis → détails avec citations → avertissements éventuels.
4. Utilise le vocabulaire technique précis du document source.
5. Si le document mentionne des valeurs numériques (tolérances, températures, pressions), restitue-les exactement.
6. En cas d'ambiguïté, signale les différentes interprétations possibles.
Format de citation : [Document: «nom», Page X] "passage exact"
"""