Passer au contenu principal

Documentation Index

Fetch the complete documentation index at: https://docs.fim.ai/llms.txt

Use this file to discover all available pages before exploring further.

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_TOKENSNon64000Tokens de sortie max par appel pour le LLM principal
FAST_LLM_API_KEYNon(revient à LLM_API_KEY)Clé API du fournisseur du modèle rapide. À utiliser quand 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 du 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)Tokens de sortie max 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 réflexion du modèle est affichée dans l’étape « thinking » de l’interface.
LLM_REASONING_BUDGET_TOKENSNon(auto à partir de l’effort)Budget de tokens explicite pour la réflexion Anthropic (minimum 1024). Pour OpenAI/Gemini, le niveau d’effort est utilisé directement. Effectif uniquement quand LLM_REASONING_EFFORT est défini.
LLM_JSON_MODE_ENABLEDNontrueBasculement global pour response_format=json_object. Définir à false si votre fournisseur rejette l’injection de prefill assistant de LiteLLM (par ex. relais AWS Bedrock → ValidationException à la 2e itération d’agent+). Quand désactivé, les appels structurés ignorent le mode JSON et reviennent à l’extraction regex en texte brut — aucune perte de qualité. S’applique à tous les modèles (configurés par ENV et Admin).
LLM_TOOL_CHOICE_ENABLEDNontrueBasculement global pour tool_choice forcé dans l’extraction de sortie structurée (Niveau 1 — Appel de fonction natif). Définir à false si votre modèle retourne des erreurs avec la sélection d’outil forcée (par ex. modèles en mode réflexion qui rejettent tool_choice='specified'). Quand désactivé, les appels structurés ignorent le FC natif et commencent à partir du mode JSON. Remplacement par modèle disponible dans Paramètres → Modèles → Avancé.
REASONING_LLM_MODELNon(revient à LLM_MODEL)Nom du modèle pour le tier de réflexion. Utilisé pour les tâches nécessitant une analyse approfondie (par ex., planification DAG, analyse de plan)
REASONING_LLM_API_KEYNon(revient à LLM_API_KEY)Clé API du fournisseur du modèle de réflexion
REASONING_LLM_BASE_URLNon(revient à LLM_BASE_URL)URL de base du fournisseur du 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)Tokens de sortie max par appel pour le modèle de réflexion
REASONING_LLM_EFFORTNon(revient à LLM_REASONING_EFFORT)Niveau d’effort de réflexion pour le tier du modèle de réflexion. Valeurs : low, medium, high
REASONING_LLM_BUDGETNon(revient à LLM_REASONING_BUDGET_TOKENS)Budget de tokens pour la réflexion (principalement Anthropic). Remplace le budget auto-calculé pour le tier de réflexion
LLM_SUPPORTS_VISIONNontrue (optimiste)Contrôle si l’OCR de document en mode ENV (via MarkItDown + markitdown-ocr) est tenté. S’applique uniquement quand aucun groupe de modèles actif n’est configuré dans Admin → Modèles (mode ENV pur). Quand la valeur par défaut true est en vigueur, convert_to_markdown et l’ingestion RAG supposent que LLM_MODEL supporte la vision et l’appellent pour l’OCR d’image — c’est le comportement correct pour tous les choix courants (gpt-4o, claude-3-5-sonnet, gemini-1.5-pro/flash). Définir à false quand votre LLM_MODEL configuré par ENV ne supporte pas la vision (par ex. deepseek-v3, qwen-chat, llama-3.1, gpt-3.5-turbo, o1-mini) pour ignorer l’appel de vision défaillant et aller directement à l’extraction texte uniquement. Quand un groupe de modèles actif existe dans le panneau Admin → Modèles, ce drapeau est ignoré et les drapeaux supports_vision du groupe prennent le relais — le choix curé par l’admin est toujours la source de vérité en mode DB.
Ordre de résolution : Préférence utilisateur → Modèles Admin (DB) → Fallback ENV. Si un modèle admin avec le rôle « General » est configuré dans Admin → Modèles, ces variables ENV servent de fallback uniquement. La vérification de santé considère les deux sources.

Résolution OCR MarkItDown

L’outil intégré convert_to_markdown et le pipeline d’ingestion RAG utilisent tous deux MarkItDown de Microsoft + le plugin officiel markitdown-ocr pour extraire du texte à partir de documents — y compris l’OCR sur les images intégrées et les pages PDF numérisées lorsqu’un LLM capable de vision est disponible. Ordre de résolution du LLM Vision (première correspondance gagne) :
#SourceJustification de la priorité
1LLM principal de l’agent si supports_vision=TrueCohérence : même clé API, même bucket de facturation, même pool de limite de débit que la conversation.
2ModelGroup → Fast Model actif si supports_vision=TrueLes modèles rapides (gpt-4o-mini, claude-haiku, gemini-1.5-flash) sont l’outil OCR idéal — bon marché, faible latence, généralement multimodaux.
3ModelGroup → General Model actif si supports_vision=TrueFallback de qualité lorsque le modèle principal n’est pas dans le groupe.
4LLM principal ENV (LLM_MODEL)Fallback optimiste pour le mode ENV pur. Utilisé uniquement lorsqu’aucun ModelGroup actif n’existe. Contrôlé par LLM_SUPPORTS_VISION.
Les modèles de reasoning ne sont jamais préférés pour l’OCR. Les niveaux de reasoning (o1, o3-mini, DeepSeek-R1) manquent historiquement de support vision et ne sont pas l’outil approprié pour l’OCR de toute façon — l’OCR est une tâche de perception, pas de délibération. Si un espace de travail n’a qu’un modèle de reasoning avec supports_vision=True, il sera toujours sélectionné via le chemin du LLM principal, mais le résolveur ne le classe pas activement au-dessus des modèles rapides/généraux. Fallback sans régression : lorsqu’aucun modèle capable de vision n’est trouvé à aucun niveau, l’OCR est silencieusement désactivé et MarkItDown s’exécute en mode texte uniquement. L’OCR des images intégrées dans Word/PowerPoint/Excel devient indisponible (comme avant le lancement de cette fonctionnalité), mais toute autre extraction de texte (titres, tableaux, texte de paragraphe) continue de fonctionner sans modification. Il n’y a jamais de cas où l’ajout de cette fonctionnalité a rendu l’extraction pire que le comportement précédent. Les fournisseurs non-OpenAI (Anthropic, Google Gemini, etc.) sont pris en charge de manière transparente : le LLM résolu est enveloppé dans un LiteLLMOpenAIShim qui achemine les appels chat.completions.create(...) via litellm.completion(), qui gère la traduction du format de message spécifique au fournisseur (par exemple, le bloc d’image source.type="base64" d’Anthropic). Un seul shim couvre chaque fournisseur que LiteLLM supporte — l’ajout d’un nouveau fournisseur ne coûte aucune modification de code dans FIM One.

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

Agent ReAct

VariableRequisPar défautDescription
REACT_MAX_ITERATIONSNon20Nombre maximal d’itérations d’appels d’outils par requête ReAct. Plus élevé = plus approfondi mais plus lent et plus coûteux
REACT_MAX_TURN_TOKENSNon0Disjoncteur d’urgence : nombre maximal de tokens cumulatifs (prompt + completion sur toutes les itérations) par tour ReAct unique. Par défaut 0 = illimité. Ceci n’est PAS pour le contrôle quotidien des tokens — utilisez token_quota par utilisateur pour cela. C’est une soupape de sécurité de dernier recours pour les scénarios extrêmes comme un agent bloqué dans une boucle infinie d’appels d’outils. Atteindre cette limite interrompt la tâche en cours d’exécution, gaspillant tous les tokens consommés jusqu’à présent et renvoyant un résultat incomplet. Gardez à 0 sauf si vous avez un problème spécifique d’agent incontrôlable à contenir
REACT_TOOL_SELECTION_THRESHOLDNon12Lorsque le nombre total d’outils enregistrés dépasse ce seuil, un appel LLM léger sélectionne le sous-ensemble le plus pertinent avant chaque requête
REACT_TOOL_SELECTION_MAXNon6Nombre maximal d’outils à conserver après sélection intelligente (effectif uniquement lorsque le nombre d’outils dépasse REACT_TOOL_SELECTION_THRESHOLD)
REACT_SELF_REFLECTION_INTERVALNon6Injecter une invite d’auto-réflexion tous les N appels d’outils pour aider l’agent à se réorienter et éviter les boucles
REACT_TOOL_OBS_TRUNCATIONNon8000Nombre maximal de caractères par observation d’outil lors de la synthèse de la réponse finale. Les valeurs plus élevées préservent plus de données structurées (JSON, tableaux) au prix de plus de tokens
REACT_TOOL_RESULT_BUDGETNon40000Budget de tokens agrégé pour tous les résultats d’outils dans une session unique. Lorsque le total des tokens de résultats d’outils dépasse ce plafond, les nouveaux résultats sont tronqués avec un avis. Prévient la surcharge du contexte due aux grandes réponses API (par ex., 5 appels de connecteur renvoyant 8K chacun). Définissez à 0 pour désactiver le plafond
REACT_COMPLETION_CHECK_SKIP_CHARSNon800Ignorer l’appel LLM de vérification post-réponse lorsque la réponse finale de l’agent dépasse ce nombre de caractères. Les réponses longues et détaillées n’ont pas besoin d’un aller-retour de vérification « ai-je manqué quelque chose ? ». Définissez plus bas pour ignorer plus agressivement ; définissez à une très grande valeur pour toujours exécuter la vérification
REACT_CYCLE_DETECTION_THRESHOLDNon2Lorsque le même outil est appelé avec des arguments identiques ce nombre de fois d’affilée, un avertissement déterministe est injecté indiquant à l’agent d’essayer une approche différente. Contrairement à l’auto-réflexion (qui s’appuie sur le LLM remarquant la boucle), c’est une vérification basée sur le hash qui ne peut pas être contournée. S’applique également aux étapes DAG
REACT_COMPLETION_CHECK_MIN_TOOLSNon3Nombre minimal d’appels d’outils avant que la liste de vérification d’achèvement se déclenche. Les tâches simples (1-2 appels d’outils) ignorent la vérification pour éviter une latence inutile. Définissez à 1 pour une vérification toujours active. S’applique également aux étapes DAG
REACT_TURN_PROFILE_ENABLEDNontrueÉmettre des journaux de synchronisation au niveau des phases par tour (memory_load, compact, tool_schema_build, llm_first_token, llm_total, tool_exec). Une ligne de journal structurée par tour. Définissez à false pour désactiver entièrement le profilage (zéro surcharge)
LLM_RATE_LIMIT_PER_USERNontrueUtiliser des buckets de limite de débit à clé par utilisateur au lieu d’un bucket global unique au processus. Empêche un utilisateur bruyant de priver tous les autres sur le même worker. Le débit sous-jacent est codé en dur à 60 requêtes/min et 100K tokens/min par bucket — ce paramètre contrôle uniquement si le bucket est partagé (global) ou partitionné (par utilisateur). Définissez à false pour revenir au bucket global hérité (non recommandé)

Planificateur DAG

VariableRequisPar défautDescription
MAX_CONCURRENCYNon5Nombre maximum d’étapes parallèles dans l’exécuteur DAG
DAG_STEP_MAX_ITERATIONSNon15Nombre maximum d’itérations d’appels d’outils au sein de chaque étape DAG
DAG_STEP_TIMEOUTNon600Délai d’expiration de l’exécution d’une étape en secondes. Les étapes dépassant ce délai sont marquées comme échouées et leurs dépendants sont ignorés en cascade
DAG_MAX_REPLAN_ROUNDSNon3Nombre maximum de tentatives de re-planification autonome lorsque l’objectif n’est pas atteint. Les interruptions utilisateur (injection) sont illimitées et ne sont pas comptabilisées dans ce budget
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_VERIFY_TRUNCATIONNon2000Nombre maximum de caractères de la sortie d’étape envoyés au LLM vérificateur d’étape pour l’évaluation de la qualité
DAG_ANALYZER_TRUNCATIONNon10000Nombre maximum de caractères par résultat d’étape lors du formatage pour l’analyseur post-exécution
DAG_REPLAN_RECENT_TRUNCATIONNon500Nombre maximum de caractères par résultat d’étape de la ronde la plus récente lors de la construction du contexte de re-planification
DAG_REPLAN_OLDER_TRUNCATIONNon200Nombre maximum de caractères par résultat d’étape des rondes antérieures lors de la construction du contexte de re-planification. Les rondes antérieures sont tronquées plus agressivement pour économiser le contexte
DAG_TOOL_CACHENontrueMettre en cache les appels d’outils identiques au sein d’une seule exécution DAG. Seuls les outils explicitement marqués comme cacheable (outils en lecture seule comme la recherche, la récupération de connaissances) sont mis en cache. Définir sur false pour désactiver complètement la mise en cache
DAG_STEP_VERIFICATIONNonfalseVérification générique de la qualité basée sur LLM après chaque étape DAG. En cas d’échec, l’étape est relancée une fois avec des commentaires. Désactivé par défaut — ajoute de la latence à chaque étape et est rarement nécessaire ; la plupart des sorties d’étape sont acceptables sans revérification. À utiliser uniquement si vous observez des résultats d’étape de faible qualité fréquents
DAG_CITATION_VERIFICATIONNontrueVérification de l’exactitude des citations pour les étapes de domaine spécialisé. Condition préalable : la requête doit d’abord être classée comme domaine spécialisé par le classificateur de domaine LLM (voir ESCALATION_DOMAINS). Lorsque le domaine est détecté ET cet indicateur est true, chaque étape complétée est analysée pour les citations juridiques/médicales/financières et vérifiée pour l’exactitude — détectant les numéros d’articles halluccinés, les références de cas fabriquées et les citations réglementaires incorrectes. Si la classification de domaine retourne null (requête générale), la vérification des citations ne s’exécute pas quel que soit ce paramètre
DAG_CITATION_VERIFY_TRUNCATIONNon6000Nombre maximum de caractères du résultat d’étape envoyés à l’invite de vérification des citations

Classification des domaines

Contrôle la couche de détection de domaine indépendante basée sur LLM qui s’exécute avant l’exécution de ReAct et DAG. Lorsqu’une requête est classée comme appartenant à un domaine spécialisé, le système active les fonctionnalités sensibles au domaine : escalade du modèle vers le modèle de raisonnement, instructions SOP spécifiques au domaine et vérification des citations (DAG uniquement).
VariableRequisPar défautDescription
ESCALATION_DOMAINSNonlegal,medical,financial,tax,compliance,patentListe séparée par des virgules des domaines spécialisés. Un LLM rapide classe chaque requête par rapport à cette liste. En cas de correspondance, le système : (1) bascule vers le modèle de raisonnement pour une plus grande précision, (2) injecte des instructions SOP spécifiques au domaine (par exemple, vérifier les citations via la recherche avant d’écrire), (3) active la vérification des citations pour les étapes DAG. Ajoutez des domaines personnalisés selon les besoins (par exemple, legal,education,construction)

Context Guard

Contrôle la gestion automatique de la fenêtre de contexte qui empêche les conversations de dépasser la limite du modèle.
VariableRequisPar défautDescription
CONTEXT_GUARD_DEFAULT_BUDGETNon32000Budget de jetons par défaut pour la gestion de la fenêtre de contexte. Lorsque la conversation dépasse cette limite, les messages plus anciens sont compactés
CONTEXT_GUARD_MAX_MSG_CHARSNon50000Limite de caractères stricte pour tout message unique. Les messages dépassant cette limite sont tronqués comme filet de sécurité
CONTEXT_GUARD_KEEP_RECENTNon4Nombre de messages les plus récents à conserver lors de la compaction de l’historique de conversation

Espace de travail de l’agent

VariableRequisPar défautDescription
WORKSPACE_OFFLOAD_THRESHOLDNon8000Lorsqu’une sortie d’outil dépasse ce nombre de caractères, elle est enregistrée dans un fichier d’espace de travail et un aperçu tronqué est injecté dans le contexte de conversation
WORKSPACE_PREVIEW_CHARSNon2000Nombre de caractères d’aperçu à inclure dans les références d’espace de travail tronquées
WORKSPACE_CLEANUP_MAX_HOURSNon72Les fichiers d’espace de travail plus anciens que ce nombre d’heures sont éligibles au nettoyage automatique

Système

VariableRequisePar défautDescription
SYSTEM_PROMPT_RESERVESupprimée. Précédemment, elle soustrayait une réserve fixe de 4K du budget de contexte pour les invites système. Cela causait un double comptage car ContextGuard inclut déjà l’invite système lors de l’estimation des jetons de la liste de messages. La formule de budget est maintenant simplement context_size - max_output_tokens, et la taille réelle de l’invite système est comptabilisée dynamiquement

Outils Web (Optionnel)

VariableRequisPar défautDescription
JINA_API_KEYNonClé API Jina. Agit comme un fallback partagé pour search, fetch, embedding, et reranker quand aucune clé spécifique au service n’est définie. 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)
EXA_API_KEYNonClé API Exa Search (sélectionnée automatiquement si définie et WEB_SEARCH_PROVIDER n’est pas défini). Obtenez la vôtre sur exa.ai
WEB_SEARCH_PROVIDERNonjinaSélecteur de fournisseur de recherche : jina / tavily / brave / exa
WEB_FETCH_PROVIDERNonjina (si clé définie, sinon httpx)Fournisseur de fetch : jina (utilise l’API Jina Reader) / httpx (requête HTTP directe, aucune clé API nécessaire)
Conseil de démarrage rapide : Définir simplement JINA_API_KEY active la recherche web, le fetch web, l’embedding et le reranking en même temps — une clé, quatre services. Vous pouvez remplacer chaque service individuellement avec les variables ci-dessous.

RAG et Base de Connaissances (Recommandé)

Intégration

L’intégration convertit le texte en vecteurs pour la recherche de base de connaissances. FIM One utilise le point de terminaison standard compatible OpenAI /v1/embeddings, il fonctionne donc avec n’importe quel fournisseur qui expose cette interface — pas seulement Jina.
VariableRequisPar défautDescription
EMBEDDING_API_KEYNon(revient à JINA_API_KEY)Clé API pour le fournisseur d’intégration
EMBEDDING_BASE_URLNonhttps://api.jina.ai/v1URL de base pour le fournisseur d’intégration
EMBEDDING_MODELNonjina-embeddings-v3Identifiant du modèle
EMBEDDING_DIMENSIONNon1024Dimension du vecteur
Exemples de fournisseurs — définissez simplement les trois variables pour basculer :
FournisseurEMBEDDING_BASE_URLEMBEDDING_MODELEMBEDDING_DIMENSION
Jina (par défaut)https://api.jina.ai/v1jina-embeddings-v31024
OpenAIhttps://api.openai.com/v1text-embedding-3-small1536
Voyagehttps://api.voyageai.com/v1voyage-31024
Ollama (local)http://localhost:11434/v1nomic-embed-text768
Modifier le modèle d’intégration ou la dimension invalide tous les vecteurs de base de connaissances existants. Les anciens vecteurs ont été calculés dans un espace d’intégration différent — la précision de la récupération se dégradера silencieusement. Vous devez reconstruire tous les index de base de connaissances après le basculement.

Récupération

VariableRequisPar défautDescription
RETRIEVAL_MODENongroundinggrounding (pipeline complet avec citations et scoring de confiance) ou simple (RAG basique)

Réorganiseur

Le réorganiseur reclasse les documents récupérés pour améliorer la pertinence. Trois fournisseurs sont pris en charge — sélectionnez via RERANKER_PROVIDER ou laissez le système détecter automatiquement à partir des clés API disponibles.
VariableRequisPar défautDescription
RERANKER_PROVIDERNon(auto-détection)jina / cohere / openai. Si non défini : utilise Cohere si COHERE_API_KEY est défini, sinon Jina
RERANKER_MODELNonjina-reranker-v2-base-multilingualIdentifiant du modèle (s’applique aux fournisseurs Jina et OpenAI)
COHERE_API_KEYNonClé API Cohere (sélectionne automatiquement le réorganiseur Cohere quand défini et RERANKER_PROVIDER n’est pas défini)
COHERE_RERANKER_MODELNonrerank-multilingual-v3.0Modèle de réorganiseur spécifique à Cohere
Jina utilise JINA_API_KEY (à partir des outils Web ci-dessus). OpenAI réutilise LLM_API_KEY / LLM_BASE_URL — aucune clé supplémentaire nécessaire. Cohere nécessite sa propre COHERE_API_KEY.
Le réorganiseur est optionnel — la recherche de base de connaissances fonctionne sans lui en utilisant le score de fusion. L’intégration est recommandée pour les fonctionnalités de base de connaissances.

Magasin vectoriel

VariableRequisPar défautDescription
VECTOR_STORE_DIRNon./data/vector_storeRépertoire pour les données du magasin vectoriel LanceDB (basé sur fichier, zéro services externes)

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

Traitement des documents (Optionnel)

Contrôle le traitement des fichiers PDF/DOCX téléchargés pour la consommation par LLM. Les modèles compatibles avec la vision (GPT-4o, Claude 3/4, Gemini) peuvent recevoir les pages PDF sous forme d’images rendues pour une meilleure fidélité.
VariableRequisPar défautDescription
DOCUMENT_PROCESSING_MODENonautoauto (vision si le modèle la supporte), vision (toujours rendre les pages), text (toujours extraire le texte uniquement)
DOCUMENT_VISION_DPINon150DPI pour le rendu des pages PDF. Plus élevé = meilleure qualité, plus de tokens
DOCUMENT_VISION_MAX_PAGESNon20Nombre maximum de pages à rendre sous forme d’images par PDF
Remarque : Le support de la vision par modèle est configuré via le bouton supports_vision dans Admin → Models. Lorsqu’il n’est pas explicitement défini, le système détecte automatiquement la capacité de vision à partir du nom du modèle.

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_REPLY_TONonAdresse Reply-To ; les réponses vont ici au lieu de SMTP_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 JSON en texte brut (rétrocompatible). La modification de cette clé invalide tous les identifiants chiffrés existants.
CONNECTOR_TOOL_MODENonprogressiveComment les outils de connecteur sont exposés aux agents. progressive : un seul ConnectorMetaTool avec les sous-commandes discover/execute (~30 jetons/connecteur). classic : un outil par action (hérité, ~250 jetons/action).
DATABASE_TOOL_MODENonprogressiveComment les outils de connecteur de base de données sont exposés aux agents. progressive : un seul DatabaseMetaTool avec les sous-commandes list_tables/discover/query. legacy : un outil par action par connecteur de base de données (3 outils chacun).
MCP_TOOL_MODENonprogressiveComment les outils du serveur MCP sont exposés aux agents. progressive : un seul MCPServerMetaTool avec les sous-commandes discover/call. legacy : un outil par action du serveur MCP (outils individuels originaux).

Plateforme

VariableRequisPar dé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 autre 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 lors des redémarrages et des répliques.
CORS_ORIGINSNonListe séparée par des virgules des 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 exemple 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 frontend. Variable au moment de la compilation — 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. Requis lorsque WORKERS>1 — sans cela, les demandes d’interruption/injection en milieu de flux peuvent atteindre un worker différent et échouer silencieusement. Configuré automatiquement par Docker Compose.
WORKERSNon1Processus workers Uvicorn. 1 est sûr et ne nécessite aucun service externe. Pour la production multi-worker, utilisez PostgreSQL (SQLite est à écrivain unique). SQLite fonctionne pour le développement local sous charge légère. L’authentification, OAuth et les opérations sur fichiers sont entièrement sûrs pour multi-worker (basés sur JWT). Docker Compose configure automatiquement PostgreSQL et Redis.
Liste de contrôle multi-worker (WORKERS>1) :
  • Arrêt (interruption du streaming) — fonctionne toujours, aucune configuration supplémentaire nécessaire (le signal voyage sur la même connexion TCP).
  • Injection (suivi en milieu de flux)nécessite REDIS_URL. Sans Redis, la demande d’injection peut atterrir sur un worker différent qui n’a aucune connaissance de l’exécution en cours, ce qui provoque un échec silencieux.
  • Production : utilisez PostgreSQL (DATABASE_URL). Le verrou à écrivain unique de SQLite peut causer de la contention lors d’écritures concurrentes.
  • Développement local : SQLite + multi-worker est correct pour une utilisation légère ; ajoutez simplement REDIS_URL si vous utilisez la fonctionnalité d’injection.

Rétention des exécutions de flux de travail

Tâche de nettoyage en arrière-plan qui purge automatiquement les anciennes exécutions de flux de travail. Les remplacements par flux de travail (configurés dans l’interface utilisateur des paramètres du flux de travail) ont priorité sur ces valeurs par défaut globales.
VariableRequisPar défautDescription
WORKFLOW_RUN_MAX_AGE_DAYSNon30Supprimer les exécutions de flux de travail antérieures à ce nombre de jours
WORKFLOW_RUN_MAX_PER_WORKFLOWNon100Conserver au maximum ce nombre d’exécutions par flux de travail (les plus anciennes supprimées en premier)
WORKFLOW_RUN_CLEANUP_INTERVAL_HOURSNon24Fréquence d’exécution de la tâche de nettoyage en arrière-plan, en heures

Expiration des demandes de confirmation de canal

Sweeper en arrière-plan qui marque les demandes d’approbation en attente obsolètes (produites par des hooks de canal comme FeishuGateHook ou le Approval Playground) comme expirées. Garantit qu’un clic quelques jours plus tard sur une carte oubliée ne bascule pas l’état de l’agent qui a déjà été démonté.
VariableRequisPar défautDescription
CHANNEL_CONFIRMATION_TTL_MINUTESNon1440Les confirmations en attente plus anciennes que ceci sont automatiquement expirées (par défaut : 24 heures)
CHANNEL_CONFIRMATION_SWEEP_INTERVAL_SECONDSNon600Fréquence d’exécution du sweeper d’expiration (par défaut : toutes les 10 minutes)

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

Tunnel Cloudflare (Optionnel)

Acheminez tout le trafic via le réseau de Cloudflare au lieu d’exposer directement les ports. Élimine le besoin de Nginx, de certificats SSL et de règles de pare-feu ouvertes. Consultez la section Déploiement en Production pour les instructions de configuration.
Utilisateurs de la Chine continentale : Les plans Cloudflare Free/Pro/Business n’ont pas de PoPs en Chine continentale. Le trafic est acheminé vers des edges à l’étranger, causant des erreurs 502 fréquentes. N’utilisez pas ceci si vos utilisateurs principaux sont en Chine continentale, sauf si vous disposez de Cloudflare Enterprise avec China Network.
VariableRequisPar défautDescription
CLOUDFLARE_TUNNEL_TOKENOui (si vous utilisez Tunnel)Jeton de Cloudflare Zero Trust → Networks → Tunnels → votre tunnel → Configure. Commence par eyJ.... Requis par le sidecar cloudflared dans docker-compose.tunnel.yml.

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.