Repository navigation
Expand file tree
/
Copy path.env.example
More file actions
146 lines (131 loc) · 7.41 KB
/
Copy path.env.example
File metadata and controls
146 lines (131 loc) · 7.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# ─────────────────────────────────────────────────────────────────────────
# Moteur Multi-Agents — Variables d'environnement (exemple)
# Copier en `.env` et renseigner. NE JAMAIS committer le `.env` réel.
# Liste dérivée du code réel (os.environ.get). Tout est OPTIONNEL sauf mention
# « REQUIS » : une clé de provider absente = ce provider est simplement désactivé.
# ─────────────────────────────────────────────────────────────────────────
# ── Sécurité API (REQUIS — auth appliquée depuis P0-1.1) ──
# Clé Bearer exigée par TOUTES les routes /api sensibles (Depends(require_auth)),
# montées avec auth fail-closed. Seuls les webhooks WhatsApp et les assets
# statiques restent publics. Tant que cette clé n'est pas définie, les routes
# protégées renvoient 503 (jamais d'accès libre).
# Générer une valeur forte, ex. : python -c "import secrets;print(secrets.token_urlsafe(32))"
MOTEUR_API_KEY=
# [T126] Chiffrement au repos de google_token.json (refresh_token OAuth Google
# permanent). Générer : python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
# Si absente, le token est écrit/lu en clair (comportement historique, dégradation
# gracieuse — voir tools/encrypt_google_token.py pour migrer un fichier existant).
MCP_TOKEN_KEY=
# [Audit 2026-07-09, #T206] Racine autorisée pour les outils write_file/read_file
# (tools/system.py). Par défaut : dossier PARENT de moteur_agents/ (ex. .
# en dev, parent du dossier de déploiement en prod). Ne définir que si cette topologie
# ne correspond pas à votre déploiement (ex. Deck avec une racine de travail différente).
MOTEUR_WORKSPACE_ROOT=
# Origines CORS autorisées (séparées par des virgules). Si vide → CORS ouvert (*)
# SANS credentials. Renseigner pour activer les credentials de façon sûre.
# Ex. : http://192.168.1.10:8000,http://localhost:8000,http://localhost:5173
MOTEUR_CORS_ORIGINS=
# ── Plugins & Tool-Maker (exécution de code généré — fail-closed) ──
# Le chargement du code des plugins (plugins/*/agent.py) exécute du code.
# Désactivé par défaut. Mettre à 1 UNIQUEMENT si les plugins sont de confiance.
MOTEUR_ENABLE_PLUGINS=0
# Le ToolMakerAgent écrit du code généré par le LLM dans plugins/auto_generated/.
# Désactivé par défaut : tant que ce flag n'est pas à 1, les outils sont générés
# + validés en sandbox mais JAMAIS persistés. 1 pour autoriser l'auto-écriture.
MOTEUR_ENABLE_TOOL_MAKER=0
# ── Confidentialité (#T337) ──
# Mode « inférence locale uniquement » : quand la valeur est `local_only`, AUCUNE
# requête ne part vers un provider cloud — seuls les modèles servis par un provider
# LOCAL (Ollama, LM Studio, Deck Edge AI) sont retenus. Si aucun modèle local n'est
# disponible dans le tier demandé, l'appel ÉCHOUE explicitement (fail-closed) : le
# moteur ne retombe JAMAIS en silence sur le cloud. Vide (défaut) = comportement
# historique inchangé.
# MOTEUR_PRIVACY_LEVEL=local_only
MOTEUR_PRIVACY_LEVEL=
# ── Concurrence d'exécution (#T344) ──
# Plafond d'exécutions LOURDES simultanées (pipeline complet, Engine partagé).
# Défaut : 3 (IHM + vocal + un DAG de fond). Les chemins légers (discussion,
# commandes HA, small-talk) ne consomment aucun créneau de ce plafond.
# - 1 : une seule exécution lourde à la fois (comportement historique).
# - >3 : réservé aux machines plus puissantes que le Deck.
MOTEUR_EXECUTION_MAX_CONCURRENCY=3
# ── Providers LLM (chaque clé active le provider dans la cascade Elo) ──
# Google Gemini — Free Tier (AI Studio). Jusqu'à 6 clés pour la rotation KeyPool
# (contournement des quotas). Sert AUSSI aux embeddings RAG (gemini-embedding).
GEMINI_API_KEY=
GEMINI_API_KEY_2=
GEMINI_API_KEY_3=
GEMINI_API_KEY_4=
GEMINI_API_KEY_5=
GEMINI_API_KEY_6=
# Modèle Gemini par défaut (optionnel, ex: gemini-2.5-flash).
GEMINI_MODEL=
# Google Gemini — plan PAYANT (GCP/Vertex). Débloque Search Grounding + quotas élevés.
GEMINI_PAYANT_API_KEY=
# Projet GCP ciblé (ex: projects/123456789).
GEMINI_PROJECT_NAME=
# Autres providers (tous optionnels).
DEEPSEEK_API_KEY=
ANTHROPIC_API_KEY=
MISTRAL_API_KEY=
COHERE_API_KEY=
CEREBRAS_API_KEY=
CEREBRAS_PAYANT_API_KEY=
OPENROUTER_API_KEY=
XAI_API_KEY=
MINIMAX_API_KEY=
DEEPINFRA_API_KEY=
GITHUB_TOKEN=
ZHIPU_API_KEY=
# Alibaba Cloud Model Studio / DashScope (Coding Plan = préfixe sk-sp-)
# Endpoint Coding Plan (défaut intl). CN: https://coding.dashscope.aliyuncs.com/v1
# DASHSCOPE_BASE_URL=https://coding-intl.dashscope.aliyuncs.com/v1
DASHSCOPE_API_KEY=
# ── Sandbox distante ToolMaker (#T207) ──
# Fine-grained PAT dédié, limité à CE dépôt uniquement (Contents: read/write,
# Actions: read). NE PAS réutiliser GITHUB_TOKEN (désormais sans usage LLM :
# GitHub Models a été retiré le 30/07/2026) ni un PAT existant plus large. Sans
# ce PAT, le ToolMaker rejette tout outil candidat (fail-closed, aucun repli
# vers une exécution locale).
MOTEUR_TOOLMAKER_PAT=
# Dépôt cible des branches éphémères toolmaker/validate-* (défaut ci-dessous).
MOTEUR_TOOLMAKER_REPO=Axellum/vromvrom-engine
# Délai max d'attente du verdict du runner (secondes, défaut 300).
MOTEUR_TOOLMAKER_TIMEOUT_S=300
# ── Home Assistant ──
# URL de l'instance HA (HASS_URL et HA_URL sont tous deux reconnus).
HASS_URL=http://192.168.1.10:8123
# Token longue durée HA (profil HA → Jetons d'accès). Requis pour la domotique.
HASS_TOKEN=
# ── TLS Home Assistant (P0-1.5) ──
# Vérification TLS sécurisée par défaut (true). HA en HTTPS auto-signé : définir
# soit HA_CA_BUNDLE (préféré, .pem/.crt du certif), soit HA_VERIFY_TLS=false.
HA_VERIFY_TLS=true
# HA_CA_BUNDLE=/chemin/vers/ha_ca.pem
# Nom d'hôte à vérifier dans le certificat, quand HASS_URL vise une IP que le
# certificat ne couvre pas (certificat émis pour un nom DNS seulement). On joint
# alors l'IP locale — rapide, sans dépendance WAN — en validant chaîne ET nom.
# Doit correspondre au certificat réellement servi, sinon la connexion est rejetée.
# HA_TLS_SERVER_HOSTNAME=mon-domaine.example.fr
# ── Observabilité (Langfuse — optionnel) ──
LANGFUSE_PUBLIC_KEY=
LANGFUSE_SECRET_KEY=
LANGFUSE_HOST=
# ── Divers ──
# Taux de conversion EUR→USD pour l'affichage des coûts GCP (ex: 1.08).
EUR_USD_RATE=
# [#T316] Plafond de sortie par défaut des providers OpenAI-compatibles, utilisé
# quand un modèle est absent du catalogue (models_registry.db) ou à
# `context_output` nul. Sinon, le plafond est dérivé du `context_output` du
# catalogue. Un `max_tokens` fourni par l'appelant n'est JAMAIS écrasé.
# Défaut : 8192. Exemple : MOTEUR_MAX_OUTPUT_TOKENS=16384
MOTEUR_MAX_OUTPUT_TOKENS=8192
# ── Vocal / fast-path (rapidité = chez vous) ──
# Ordre câblé dans services/pipeline_service.py :
# 1. gpt-oss-120b (Cerebras, ~430 ms TTFT) → CEREBRAS_API_KEY
# 2. LLM local (Ollama / llama.cpp OpenAI-compat) si l'hôte décroche
# 3. gemini-3.5-flash-free → GEMINI_API_KEY
# 4. deepseek-chat → DEEPSEEK_API_KEY
# Un provider sans clé ou hors-ligne est sauté (sonde d'hôte ~ms, pas 2,6 s).
# Entité météo Zero-LLM (défaut weather.home). Surcharger si besoin :
HA_WEATHER_ENTITY=weather.home