# -*- 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=. 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=. 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