Spaces:
Paused
Paused
| # -*- coding: utf-8 -*- | |
| """ | |
| Configuration de l'Assistant Vizyon Ayiti 360 - version Hugging Face Space. | |
| Config for the Vizyon Ayiti 360 Assistant - Hugging Face Space edition. | |
| Sur Hugging Face, definissez les valeurs sensibles dans | |
| Settings > Variables and secrets (elles arrivent comme variables d'env). | |
| On Hugging Face, set sensitive values in Settings > Variables and secrets. | |
| """ | |
| import os | |
| from pathlib import Path | |
| try: | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| except Exception: | |
| pass | |
| # -------------------------------------------------------------------------- | |
| # Site source (seule source autorisee / only allowed source) | |
| # -------------------------------------------------------------------------- | |
| SITE_URL = os.getenv("SITE_URL", "https://www.vizyonayiti360.org") | |
| WP_API_BASE = f"{SITE_URL.rstrip('/')}/wp-json/wp/v2" | |
| WP_CONTENT_TYPES = { | |
| "posts": "Article", | |
| "pages": "Page", | |
| "mec-events": "Evenement", | |
| } | |
| # -------------------------------------------------------------------------- | |
| # Authentification WordPress (pour lire le contenu NON public) | |
| # WordPress authentication (to read NON-public content) | |
| # -------------------------------------------------------------------------- | |
| # Cree un "mot de passe d'application" dans WordPress : | |
| # Utilisateurs > Profil > Mots de passe d'application. | |
| # Create an "Application Password" in WordPress: | |
| # Users > Profile > Application Passwords. | |
| WP_USERNAME = os.getenv("WP_USERNAME", "") | |
| WP_APP_PASSWORD = os.getenv("WP_APP_PASSWORD", "") | |
| # Inclure le contenu non public si des identifiants sont fournis. | |
| INCLUDE_NON_PUBLIC = os.getenv("INCLUDE_NON_PUBLIC", "true").lower() == "true" | |
| # Statuts a recuperer quand on est authentifie. | |
| WP_STATUSES = os.getenv("WP_STATUSES", "publish,private,draft,pending,future") | |
| # -------------------------------------------------------------------------- | |
| # Backend LLM : sur un Space, on utilise l'API Hugging Face. | |
| # LLM backend: on a Space we use the Hugging Face Inference API. | |
| # -------------------------------------------------------------------------- | |
| LLM_BACKEND = os.getenv("LLM_BACKEND", "hf_api").lower() | |
| # Token HF : dans un Space, ajoutez le secret HF_TOKEN (fourni par defaut sur | |
| # certains Spaces) ou HF_API_TOKEN. | |
| HF_API_TOKEN = os.getenv("HF_API_TOKEN", os.getenv("HF_TOKEN", "")) | |
| HF_MODEL = os.getenv("HF_MODEL", "meta-llama/Llama-3.1-8B-Instruct") | |
| # Repli local optionnel (si vous testez hors Space avec Ollama). | |
| OLLAMA_HOST = os.getenv("OLLAMA_HOST", "http://localhost:11434") | |
| OLLAMA_MODEL = os.getenv("OLLAMA_MODEL", "qwen2.5:7b-instruct") | |
| # -------------------------------------------------------------------------- | |
| # Embeddings (locaux, multilingues FR/EN) / local multilingual embeddings | |
| # -------------------------------------------------------------------------- | |
| EMBEDDING_MODEL = os.getenv( | |
| "EMBEDDING_MODEL", | |
| "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2", | |
| ) | |
| # -------------------------------------------------------------------------- | |
| # Parametres RAG / RAG parameters | |
| # -------------------------------------------------------------------------- | |
| CHUNK_SIZE = int(os.getenv("CHUNK_SIZE", "800")) | |
| CHUNK_OVERLAP = int(os.getenv("CHUNK_OVERLAP", "120")) | |
| TOP_K = int(os.getenv("TOP_K", "5")) | |
| MIN_SCORE = float(os.getenv("MIN_SCORE", "0.25")) | |
| MAX_TOKENS = int(os.getenv("MAX_TOKENS", "1024")) | |
| TEMPERATURE = float(os.getenv("TEMPERATURE", "0.2")) | |
| # Reconstruire l'index a chaque demarrage du Space (contenu frais). | |
| REBUILD_ON_START = os.getenv("REBUILD_ON_START", "true").lower() == "true" | |
| # -------------------------------------------------------------------------- | |
| # Stockage / storage (ephemere sur un Space) | |
| # -------------------------------------------------------------------------- | |
| BASE_DIR = Path(__file__).resolve().parent | |
| DATA_DIR = BASE_DIR / "data" | |
| INDEX_DIR = DATA_DIR / "index" | |
| LOG_DIR = DATA_DIR / "logs" | |
| for _d in (DATA_DIR, INDEX_DIR, LOG_DIR): | |
| _d.mkdir(parents=True, exist_ok=True) | |
| INDEX_FILE = INDEX_DIR / "faiss.index" | |
| CHUNKS_FILE = INDEX_DIR / "chunks.pkl" | |
| META_FILE = INDEX_DIR / "meta.json" | |
| # -------------------------------------------------------------------------- | |
| # Interface / UI | |
| # -------------------------------------------------------------------------- | |
| APP_TITLE = "Assistant Vizyon Ayiti 360" | |
| DEFAULT_LANG = os.getenv("DEFAULT_LANG", "fr") | |
| # Jeton d'acces partage : si defini, l'app n'accepte que les visiteurs dont | |
| # l'URL contient ?access=<jeton>. Protege l'acces direct au Space quand il est | |
| # integre en iframe. Laisser vide pour desactiver. | |
| # Shared access token: if set, the app only serves visitors whose URL contains | |
| # ?access=<token>. Protects direct Space access when embedded via iframe. | |
| APP_ACCESS_TOKEN = os.getenv("APP_ACCESS_TOKEN", "") | |
| LOGO_URL = os.getenv( | |
| "LOGO_URL", | |
| "https://www.vizyonayiti360.org/wp-content/uploads/2025/12/" | |
| "cropped-logo-4_1-300x100.png", | |
| ) | |
| FAVICON_URL = os.getenv( | |
| "FAVICON_URL", | |
| "https://www.vizyonayiti360.org/wp-content/uploads/2026/06/" | |
| "cropped-fivicon-192x192.png", | |
| ) | |
| # -------------------------------------------------------------------------- | |
| # RGPD / GDPR | |
| # -------------------------------------------------------------------------- | |
| ENABLE_LOGGING = os.getenv("ENABLE_LOGGING", "false").lower() == "true" | |
| ANONYMIZE_INPUT = os.getenv("ANONYMIZE_INPUT", "true").lower() == "true" | |
| LOG_RETENTION_DAYS = int(os.getenv("LOG_RETENTION_DAYS", "30")) | |
| # Le contenu non public est confidentiel : ne jamais journaliser par defaut. | |
| if INCLUDE_NON_PUBLIC: | |
| ENABLE_LOGGING = False | |