Passer au contenu principal
Toute la configuration se fait via .env. Copiez example.env et remplissez vos valeurs :
cp example.env .env

Niveaux de Configuration

Chaque intégration a un niveau de configuration indiquant son importance :
NiveauSignificationComportement si non configuré
RequisDépendance système essentielleLe système génère une erreur — le chat et les fonctions principales ne fonctionnent pas
RecommandéActivateur de fonctionnalité significativeDégradation progressive — la fonctionnalité est visiblement indisponible mais le système fonctionne
OptionnelCapacité d’améliorationDégradation transparente — le système fonctionne correctement, la capacité est simplement absente
Remarque : Les modèles configurés par l’administrateur (Admin → page Modèles) peuvent remplacer les variables d’environnement LLM. La vérification de santé considère les deux sources.

Frontend (Développement local uniquement)

Le frontend a un fichier env séparé uniquement pour le développement local : frontend/.env.local.
Ce fichier n’est PAS utilisé dans Docker. À l’intérieur du conteneur Docker, Next.js proxifie /api/* vers le backend Python en interne (le port 8000 est interne au conteneur), donc aucun fichier env frontend n’est nécessaire.
Pour le développement local, les valeurs par défaut fonctionnent directement — vous n’avez pas besoin de créer frontend/.env.local sauf si votre backend s’exécute sur un port non-standard. Si vous devez remplacer les valeurs, créez frontend/.env.local manuellement :
echo 'NEXT_PUBLIC_API_URL=http://localhost:9000' > frontend/.env.local
VariablePar défautDescription
NEXT_PUBLIC_API_URLhttp://localhost:8000 (auto)URL du backend que le navigateur utilise pour les appels API directs (redirections OAuth, streaming). Détectée automatiquement à partir de window.location si non définie — remplacez-la uniquement si votre backend s’exécute sur un port non-standard localement.
Note au moment de la compilation : les variables NEXT_PUBLIC_* sont intégrées au bundle JS au moment de pnpm build. Les modifier à l’exécution (par ex. via le fichier .env racine) n’a aucun effet — c’est pourquoi elles se trouvent dans frontend/.env.local pour le développement local uniquement.

LLM (Requis)

VariableRequisPar défautDescription
LLM_API_KEYOuiClé API du fournisseur LLM
LLM_BASE_URLNonhttps://api.openai.com/v1URL de base de toute API compatible OpenAI
LLM_MODELNongpt-4oModèle principal — utilisé pour la planification, l’analyse et l’agent ReAct
FAST_LLM_MODELNon(revient à LLM_MODEL)Modèle rapide — utilisé pour l’exécution des étapes DAG (moins cher, plus rapide)
LLM_TEMPERATURENon0.7Température d’échantillonnage par défaut
LLM_CONTEXT_SIZENon128000Taille de la fenêtre de contexte pour le LLM principal
LLM_MAX_OUTPUT_TOKENSNon64000Nombre maximal de jetons de sortie par appel pour le LLM principal
FAST_LLM_API_KEYNon(revient à LLM_API_KEY)Clé API du fournisseur de modèle rapide. À utiliser lorsque le modèle rapide est hébergé par un fournisseur différent du modèle principal
FAST_LLM_BASE_URLNon(revient à LLM_BASE_URL)URL de base du fournisseur de modèle rapide
FAST_LLM_TEMPERATURENon(revient à LLM_TEMPERATURE)Température d’échantillonnage pour le modèle rapide
FAST_LLM_CONTEXT_SIZENon(revient à LLM_CONTEXT_SIZE)Taille de la fenêtre de contexte pour le LLM rapide
FAST_LLM_MAX_OUTPUT_TOKENSNon(revient à LLM_MAX_OUTPUT_TOKENS)Nombre maximal de jetons de sortie par appel pour le LLM rapide
LLM_REASONING_EFFORTNon(désactivé)Niveau de réflexion étendue pour les modèles supportés (OpenAI série o, Gemini 2.5+, Claude). Valeurs : low, medium, high. LiteLLM traduit cela au format natif de chaque fournisseur automatiquement. La chaîne de pensée du modèle est affichée dans l’étape « thinking » de l’interface utilisateur.
LLM_REASONING_BUDGET_TOKENSNon(auto à partir de l’effort)Budget de jetons explicite pour la réflexion Anthropic (minimum 1024). Pour OpenAI/Gemini, le niveau d’effort est utilisé directement. Effectif uniquement lorsque LLM_REASONING_EFFORT est défini.
LLM_JSON_MODE_ENABLEDNontrueDéfinir à false pour désactiver response_format=json_object pour les modèles configurés via ENV. Requis lors de l’utilisation d’un relais tiers soutenu par AWS Bedrock (les versions plus récentes rejettent l’injection de préfixe assistant de LiteLLM, causant une ValidationException à la 2e itération d’agent et au-delà). Les modèles configurés en base de données remplacent cela par modèle via Admin → Models → Advanced settings.
REASONING_LLM_MODELNon(revient à LLM_MODEL)Nom du modèle pour le niveau de réflexion. Utilisé pour les tâches nécessitant une analyse approfondie (par exemple, planification DAG, analyse de plan)
REASONING_LLM_API_KEYNon(revient à LLM_API_KEY)Clé API du fournisseur de modèle de réflexion
REASONING_LLM_BASE_URLNon(revient à LLM_BASE_URL)URL de base du fournisseur de modèle de réflexion
REASONING_LLM_TEMPERATURENon(revient à LLM_TEMPERATURE)Température d’échantillonnage pour le modèle de réflexion
REASONING_LLM_CONTEXT_SIZENon(revient à LLM_CONTEXT_SIZE)Taille de la fenêtre de contexte pour le modèle de réflexion
REASONING_LLM_MAX_OUTPUT_TOKENSNon(revient à LLM_MAX_OUTPUT_TOKENS)Nombre maximal de jetons de sortie par appel pour le modèle de réflexion
REASONING_LLM_EFFORTNon(revient à LLM_REASONING_EFFORT)Niveau d’effort de réflexion pour le niveau de modèle de réflexion. Valeurs : low, medium, high
REASONING_LLM_BUDGETNon(revient à LLM_REASONING_BUDGET_TOKENS)Budget de jetons pour la réflexion (principalement Anthropic). Remplace le budget calculé automatiquement pour le niveau de réflexion
Ordre de résolution : Préférence utilisateur → Modèles Admin (BD) → Secours ENV. Si un modèle admin avec le rôle « General » est configuré dans Admin → Models, ces variables ENV servent de secours uniquement. Le contrôle de santé considère les deux sources.

Réflexion étendue (Raisonnement)

Lorsque LLM_REASONING_EFFORT est défini, FIM One active la capacité de réflexion étendue du modèle afin que la chaîne de pensée interne soit affichée dans l’étape « thinking » de l’interface utilisateur. FIM One utilise LiteLLM pour traduire automatiquement le paramètre d’effort de raisonnement dans le format natif de chaque fournisseur.

Fournisseurs pris en charge

FournisseurLLM_BASE_URLFonctionnementContenu de raisonnement retourné ?
OpenAI (o1 / o3 / o4-mini)https://api.openai.com/v1reasoning_effort envoyé nativementOui
Anthropic (Claude 3.7+)https://api.anthropic.com/v1/LiteLLM achemine via l’API Anthropic native avec le paramètre thinkingOui
Google Gemini (2.5+)https://generativelanguage.googleapis.com/v1beta/openai/reasoning_effort envoyé sur le point de terminaison de compatibilitéOui
LiteLLM détecte automatiquement le fournisseur à partir de LLM_BASE_URL et le mappe au format API correct. Les URL inconnues sont traitées comme compatibles avec OpenAI.

Avertissements importants

Les proxies tiers / points de terminaison personnalisés ne sont pas garantis. Si votre LLM_BASE_URL pointe vers un proxy API tiers (par exemple, OpenRouter, one-api, passerelle personnalisée), LiteLLM tentera d’acheminer correctement en fonction de l’URL. Cependant, si votre proxy s’attend à un format non standard, le raisonnement peut ne pas fonctionner comme prévu. Consultez la documentation du proxy pour connaître le format de paramètre attendu.

Contraintes de température avec le raisonnement

Certains fournisseurs imposent des restrictions de température lorsque le raisonnement est actif :
  • Anthropic : Nécessite temperature=1 lorsque la réflexion étendue est activée. Si vous utilisez Anthropic avec la réflexion étendue, vous devez définir LLM_TEMPERATURE=1 — Anthropic rejette les autres valeurs lorsque la réflexion est activée.
  • OpenAI GPT-5.x : Supporte uniquement temperature=1 à tout moment. Le filtrage drop_params de LiteLLM gère cela automatiquement — les valeurs de température non supportées sont silencieusement supprimées. Aucune action de l’utilisateur n’est nécessaire pour GPT-5.x.

Comment fonctionne LLM_REASONING_BUDGET_TOKENS

Cette variable est principalement significative pour le chemin Anthropic. Lorsqu’elle est définie, elle remplace le budget calculé automatiquement et est envoyée en tant que budget_tokens dans le paramètre thinking via LiteLLM. Lorsqu’elle n’est pas définie, le budget est dérivé de LLM_MAX_OUTPUT_TOKENS x ratio d’effort :
LLM_REASONING_EFFORTRatio de budgetExemple (max_tokens = 64000)
low20%12 800 tokens
medium50%32 000 tokens
high80%51 200 tokens
Le budget minimum est de 1 024 tokens (minimum absolu d’Anthropic). Pour OpenAI et Gemini, le fournisseur gère l’allocation de tokens en interne en fonction du niveau reasoning_effortLLM_REASONING_BUDGET_TOKENS n’a aucun effet.

Exécution de l’agent

VariableRequisPar défautDescription
REACT_MAX_ITERATIONSNon20Nombre max d’itérations d’appels d’outils par requête ReAct
MAX_CONCURRENCYNon5Nombre max d’étapes parallèles dans l’exécuteur DAG
DAG_STEP_MAX_ITERATIONSNon15Nombre max d’itérations d’appels d’outils dans chaque étape DAG
DAG_MAX_REPLAN_ROUNDSNon3Nombre max de tentatives de re-planification autonome lorsque l’objectif n’est pas atteint
DAG_REPLAN_STOP_CONFIDENCENon0.8Arrêter les tentatives lorsque la confiance de l’agent que l’objectif est inatteignable dépasse ce seuil (0.0 = ne jamais arrêter tôt, 1.0 = arrêter en cas d’échec)
DAG_TOOL_CACHENontrueMettre en cache les appels d’outils identiques au sein d’une seule exécution DAG. Les verrous asynchrones par clé préviennent les pics de charge. Définir à false pour désactiver la mise en cache
DAG_STEP_VERIFICATIONNonfalseActiver la vérification de qualité basée sur LLM après la fin de chaque étape DAG. En cas d’échec, l’étape se réessaie une fois avec retour de vérification. Ajoute de la latence mais améliore la précision des résultats
AUTO_ROUTINGNontrueActiver la classification automatique des requêtes. Un LLM rapide analyse chaque requête et l’achemine vers le mode d’exécution ReAct (une seule étape) ou DAG (multi-étapes). Le point de terminaison /api/auto utilise ceci. Définir à false pour exiger une sélection de mode explicite

Outils Web (Optionnel)

VariableRequisDéfautDescription
JINA_API_KEYNonClé API Jina — également utilisée pour l’intégration et le reclassement ; obtenez la vôtre sur jina.ai
TAVILY_API_KEYNonClé API Tavily Search (sélectionnée automatiquement si définie et WEB_SEARCH_PROVIDER n’est pas défini)
BRAVE_API_KEYNonClé API Brave Search (sélectionnée automatiquement si définie et WEB_SEARCH_PROVIDER n’est pas défini)
WEB_SEARCH_PROVIDERNonjinaSélecteur de fournisseur de recherche : jina / tavily / brave
WEB_FETCH_PROVIDERNonjina (si clé définie, sinon httpx)Fournisseur de récupération : jina / httpx

RAG et base de connaissances (Recommandé)

VariableRequisPar défautDescription
EMBEDDING_MODELNonjina-embeddings-v3Identifiant du modèle d’embedding
EMBEDDING_DIMENSIONNon1024Dimension du vecteur d’embedding
EMBEDDING_API_KEYNon(utilise JINA_API_KEY)Clé API de remplacement pour un fournisseur d’embedding différent
EMBEDDING_BASE_URLNonhttps://api.jina.ai/v1URL de base de remplacement pour un fournisseur d’embedding différent
RETRIEVAL_MODENongroundinggrounding (pipeline complet avec citations/conflits/confiance) ou simple (RAG basique)
RERANKER_MODELNonjina-reranker-v2-base-multilingualIdentifiant du modèle de reranking
RERANKER_PROVIDERNonjinaFournisseur de reranking : jina / cohere / openai
COHERE_API_KEYNonClé API Cohere (sélectionne automatiquement le reranker Cohere lorsqu’elle est définie)
COHERE_RERANKER_MODELNonrerank-multilingual-v3.0Modèle de reranking Cohere
VECTOR_STORE_DIRNon./data/vector_storeRépertoire pour les données du magasin vectoriel LanceDB
L’embedding est recommandé pour les fonctionnalités de base de connaissances. Le reranking est optionnel — la recherche fonctionne sans lui en utilisant le scoring de fusion.

Exécution de Code

VariableRequisDéfautDescription
CODE_EXEC_BACKENDNonlocallocal (exécution directe sur l’hôte) ou docker (conteneurs isolés)
DOCKER_PYTHON_IMAGENonpython:3.11-slimImage Docker pour l’exécution Python
DOCKER_NODE_IMAGENonnode:20-slimImage Docker pour l’exécution Node.js
DOCKER_SHELL_IMAGENonpython:3.11-slimImage Docker pour l’exécution shell
DOCKER_MEMORYNon(défaut Docker)Limite de RAM par conteneur (ex. 256m, 512m, 1g)
DOCKER_CPUSNon(défaut Docker)Quota CPU par conteneur (ex. 0.5, 1.0)
SANDBOX_TIMEOUTNon120Délai d’exécution par défaut en secondes
DOCKER_HOST_DATA_DIRNon(non défini)Chemin absolu côté hôte du montage de volume ./data. Requis pour les déploiements DooD (Docker-outside-of-Docker) ; docker-compose.yml le définit automatiquement via ${PWD}/data.
Sécurité : Le mode local exécute le code généré par l’IA directement sur l’hôte. Pour les déploiements accessibles sur Internet ou multi-utilisateurs, définissez toujours CODE_EXEC_BACKEND=docker.

Artefacts d’outil

Limites de taille pour les fichiers produits par l’exécution d’outils (exécution de code, rendu de modèle, génération d’image).
VariableRequisPar défautDescription
MAX_ARTIFACT_SIZENon10485760 (10 MB)Taille maximale d’un fichier artefact unique en octets
MAX_ARTIFACTS_TOTALNon52428800 (50 MB)Taille totale maximale des artefacts par session en octets

Génération d’images (Optionnel)

VariableRequisPar défautDescription
IMAGE_GEN_PROVIDERNongooglegoogle (API native Gemini) ou openai (API compatible OpenAI /v1/images/generations)
IMAGE_GEN_API_KEYNonClé Google AI Studio (google) ou clé proxy/OpenAI (openai)
IMAGE_GEN_MODELNongemini-3.1-flash-image-previewModèle de génération d’images (par ex. dall-e-3, gemini-nano-banana-2)
IMAGE_GEN_BASE_URLNon(par fournisseur)Google : https://generativelanguage.googleapis.com/v1beta ; OpenAI : https://api.openai.com/v1

Email (SMTP) (Recommandé)

Enregistre automatiquement l’outil intégré email_send lorsque SMTP_HOST, SMTP_USER et SMTP_PASS sont tous définis.
VariableRequisPar défautDescription
SMTP_HOSTCond.Nom d’hôte du serveur SMTP
SMTP_PORTNon465Port SMTP
SMTP_SSLNonsslMode TLS : ssl (port 465) / tls (STARTTLS, port 587) / "" (plain)
SMTP_USERCond.Nom d’utilisateur de connexion SMTP
SMTP_PASSCond.Mot de passe de connexion SMTP
SMTP_FROMNon(utilise SMTP_USER)Adresse de l’expéditeur affichée dans l’en-tête From
SMTP_FROM_NAMENonNom d’affichage affiché dans l’en-tête From
SMTP_ALLOWED_DOMAINSNonListe d’autorisation de domaines séparés par des virgules (ex. example.com,corp.io) ; bloque les destinataires en dehors des domaines listés
SMTP_ALLOWED_ADDRESSESNonListe d’autorisation d’adresses exactes séparées par des virgules ; combinée avec SMTP_ALLOWED_DOMAINS ; laissez les deux non définis pour autoriser n’importe quel destinataire (non recommandé pour les boîtes aux lettres partagées)

Connecteurs

VariableRequisPar défautDescription
CONNECTOR_RESPONSE_MAX_CHARSNon50000Nombre maximum de caractères pour les réponses de connecteur JSON non-tableau / texte brut
CONNECTOR_RESPONSE_MAX_ITEMSNon10Nombre maximum d’éléments de tableau à conserver lorsque la réponse du connecteur est un tableau JSON
CREDENTIAL_ENCRYPTION_KEYNon(non défini)Clé de chiffrement Fernet pour les blobs d’identifiants de connecteur. Lorsqu’elle est définie, les jetons d’authentification stockés dans connector_credentials sont chiffrés au repos. Si elle n’est pas définie, les identifiants sont stockés en tant que JSON en texte brut (rétro-compatible). La modification de cette clé invalide tous les identifiants chiffrés existants.

Plateforme

VariableRequisDéfautDescription
DATABASE_URLNonsqlite+aiosqlite:///./data/fim_one.dbChaîne de connexion à la base de données. SQLite (zéro configuration) : sqlite+aiosqlite:///./data/fim_one.db. PostgreSQL (production) : postgresql+asyncpg://user:pass@localhost:5432/fim_one. Docker Compose configure automatiquement PostgreSQL.
JWT_SECRET_KEYNonCHANGE_MEClé secrète pour la signature des jetons JWT. La valeur d’espace réservé CHANGE_ME (ou tout défaut hérité) déclenche la génération automatique d’une clé aléatoire sécurisée de 256 bits au premier démarrage, qui est écrite dans .env. Définissez explicitement en production pour maintenir la validité des jetons entre les redémarrages et les réplicas.
CORS_ORIGINSNonListe séparée par des virgules d’origines CORS supplémentaires autorisées au-delà des entrées localhost par défaut. Requis lorsque le frontend s’exécute sur un domaine non-localhost (par ex. https://app.example.com).
UPLOADS_DIRNon./uploadsRépertoire pour les fichiers téléchargés
MAX_UPLOAD_SIZE_MBNon50Taille maximale de téléchargement de fichier en mégaoctets (application backend)
NEXT_PUBLIC_MAX_UPLOAD_SIZE_MBNon50Taille maximale de téléchargement de fichier affichée dans l’interface utilisateur du frontend. Variable de temps de construction — doit correspondre à MAX_UPLOAD_SIZE_MB.
MCP_SERVERSNonTableau JSON des configurations de serveur MCP (nécessite uv sync --extra mcp)
ALLOW_STDIO_MCPNonfalseAutoriser les serveurs MCP stdio. Définissez true uniquement pour les déploiements locaux de confiance
ALLOWED_STDIO_COMMANDSNonnpx,uvx,node,python,python3,deno,bunListe séparée par des virgules des commandes de base autorisées pour les serveurs MCP stdio. Effectif uniquement lorsque ALLOW_STDIO_MCP=true
LOG_LEVELNonINFONiveau de journalisation : DEBUG / INFO / WARNING / ERROR / CRITICAL
REDIS_URLNonURL de connexion Redis pour le relais d’interruption entre workers. Auto-configuré par Docker Compose. Nécessaire uniquement pour les configurations locales multi-worker (WORKERS>1).
WORKERSNon1Processus workers Uvicorn. 1 est sûr et ne nécessite aucun service externe. >1 nécessite PostgreSQL (SQLite est à writer unique). L’authentification, OAuth et les opérations de fichiers sont entièrement sûrs pour multi-worker (basés sur JWT). Limitation : sans REDIS_URL, l’interruption/injection en cours de flux fonctionne uniquement dans le même processus worker. Docker Compose configure automatiquement Redis.

OAuth (Optionnel)

Quand CLIENT_ID et CLIENT_SECRET sont tous les deux définis pour un fournisseur, la page de connexion affiche automatiquement le bouton OAuth correspondant.
VariableRequisPar défautDescription
GITHUB_CLIENT_IDNonID client de l’application GitHub OAuth. Créer sur github.com/settings/developers → OAuth Apps
GITHUB_CLIENT_SECRETNonSecret client de l’application GitHub OAuth
GOOGLE_CLIENT_IDNonID client Google OAuth. Créer sur console.cloud.google.com/apis/credentials
GOOGLE_CLIENT_SECRETNonSecret client Google OAuth
DISCORD_CLIENT_IDNonID client Discord OAuth2. Créer sur discord.com/developers
DISCORD_CLIENT_SECRETNonSecret client Discord OAuth2
FEISHU_APP_IDNonID d’application Feishu (Lark). Créer sur open.feishu.cn. Nécessite la permission contact:user.email:readonly
FEISHU_APP_SECRETNonSecret d’application Feishu (Lark)
FRONTEND_URLProdhttp://localhost:3000Où le navigateur arrive après la fin d’OAuth. Doit être défini en production (ex. https://yourdomain.com)
API_BASE_URLProdhttp://localhost:8000URL du backend accessible de l’extérieur, utilisée pour construire les URLs de rappel OAuth. Doit être défini en production
NEXT_PUBLIC_API_URLProd(détecté automatiquement comme <hostname>:8000)URL de base de l’API côté navigateur pour les redirections OAuth. C’est une variable de temps de construction du frontend — définissez-la dans frontend/.env.local pour le développement local, ou passez-la comme argument de construction Docker pour les déploiements de production personnalisés. La détection automatique fonctionne pour les configurations de proxy inverse standard (port 80/443).
Prod = optionnel localement (les valeurs par défaut fonctionnent), mais requis pour tout déploiement accessible sur Internet.

URLs de rappel OAuth à enregistrer auprès de chaque fournisseur

Le backend construit les URLs de rappel comme : {API_BASE_URL}/api/auth/oauth/{provider}/callback
FournisseurURL de rappel à enregistrer
GitHubhttps://yourdomain.com/api/auth/oauth/github/callback
Googlehttps://yourdomain.com/api/auth/oauth/google/callback
Discordhttps://yourdomain.com/api/auth/oauth/discord/callback

Analytique (Optionnel)

Tous les fournisseurs d’analytique sont optionnels. Définissez n’importe quelle combinaison — tous les fournisseurs actifs se chargent simultanément. Laissez tous les champs vides pour désactiver complètement l’analytique (recommandé pour le développement local).
VariableRequisPar défautDescription
NEXT_PUBLIC_GA_MEASUREMENT_IDNonID de mesure Google Analytics 4 (par ex. G-XXXXXXXXXX). Obtenez le vôtre sur analytics.google.com
NEXT_PUBLIC_UMAMI_SCRIPT_URLNonURL du script d’analytique Umami (par ex. https://your-umami.com/script.js). Alternative auto-hébergée et respectueuse de la vie privée — umami.is
NEXT_PUBLIC_UMAMI_WEBSITE_IDNonID du site web Umami. Requis quand NEXT_PUBLIC_UMAMI_SCRIPT_URL est défini
NEXT_PUBLIC_PLAUSIBLE_DOMAINNonDomaine d’analytique Plausible (par ex. yourdomain.com). Léger et respectueux de la vie privée — plausible.io
NEXT_PUBLIC_PLAUSIBLE_SCRIPT_URLNonhttps://plausible.io/js/script.jsURL de script Plausible personnalisée pour les instances auto-hébergées
Toutes les variables d’analytique NEXT_PUBLIC_* sont au moment de la compilation — les modifications nécessitent une reconstruction du frontend pour prendre effet.