1# --- LLM (OpenRouter) — slugs vérifiés sur https://openrouter.ai/models le 2026-09-052OPENROUTER_API_KEY=3OPENROUTER_BASE_URL=https://openrouter.ai/api/v14MODEL_TUTOR_PRIMARY=anthropic/claude-sonnet-4.65MODEL_TUTOR_FALLBACK=openai/gpt-5.56MODEL_REASONING=anthropic/claude-opus-4.67MODEL_FAST=openai/gpt-5.4-nano8MODEL_VISION=anthropic/claude-sonnet-4.69# OpenRouter n'expose pas de modèle d'embeddings : endpoint OpenAI-compatible optionnel (sinon BM25 seul)10EMBEDDINGS_BASE_URL=11EMBEDDINGS_API_KEY=12MODEL_EMBEDDINGS=13LLM_MONTHLY_BUDGET_USD=3001415# --- Recherche web16FIRECRAWL_API_KEY=1718# --- Données (défaut : SQLite dans DATA_DIR ; PostgreSQL via DATABASE_URL)19DATA_DIR=./data20DATABASE_URL=21REDIS_URL=2223# --- Sandbox (service séparé sandbox-runner)24SANDBOX_URL=http://127.0.0.1:819125SANDBOX_TIMEOUT_S=3026SANDBOX_TOKEN=2728# --- Auth29JWT_SECRET=change-me30ALLOWED_EMAIL_DOMAINS=uqo.ca31INVITED_EMAILS=32PROFESSOR_EMAILS=prof@uqo.ca33ADMIN_EMAILS=34# Code d'accès du cours (connexion sans SMTP) — laisser vide pour imposer le lien magique35ACCESS_CODE=36SMTP_HOST=37SMTP_PORT=58738SMTP_USER=39SMTP_PASSWORD=40SMTP_FROM=no-reply@uqo-chat.app4142# --- App43APP_ENV=development44APP_URL=http://localhost:819045PORT=819046CORS_ORIGINS=http://localhost:5173,http://localhost:819047LOG_LEVEL=INFO48TERM_LABEL=Automne 202649COURSES=IMM1003,IMM10335051# --- Frontend (build-time)52VITE_API_URL=/api/v153VITE_USE_OFFICIAL_LOGO=false54VITE_COURSES=IMM1003,IMM10335556# --- ngrok (operator k8s ou agent sur le nœud)57NGROK_API_KEY=58NGROK_AUTHTOKEN=59