Spaces:
Running
Running
| """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" | |
| """ | |