Fonctionnalités

Chaque fonctionnalité ci-dessous a été vérifiée dans le code publié de l’édition Open, avec son statut dans le profil Compact. Les fonctions optionnelles ou désactivées sont indiquées comme telles.

Périmètre : dépôts ragatm-open, ai-gateway-open et ai-gateway-pool-open, branche main, vérifiés le 11 novembre 2026. Les capacités de vision, d’OCR et d’audio sont détaillées sur la page IA multimodale. IA multimodale · Formats

Documents, recherche et réponses

Espaces, utilisateurs, ingestion, indexation, retrieval, génération et citations.

  • Disponible par défaut 46
  • Disponible avec configuration 7
  • Non activé 1
  • Non disponible 1

Disponible par défaut dans le profil Compact

  • Workspaces et espaces documentaires (multi-organisation)
  • Isolation stricte entre espaces
  • Comptes utilisateurs : invitations, réinitialisation, aucune inscription publique
  • Second facteur TOTP obligatoire
  • Rôles et permissions par workspace
  • Console d’administration de la plateforme et admin Django
  • Interfaces d’administration du workspace et du cœur
  • Corpus métier partagé
  • Import de documents (formats par défaut)
  • Ingestion asynchrone (Celery)
  • Ré-import et déduplication
  • Suppression de documents et purge d’un espace
  • Réindexation (tâches durables)
  • Métadonnées des documents et des fragments
  • Extraction du texte natif
  • Découpage en fragments
  • Embeddings contrôlés via la passerelle (768 dimensions)
  • Recherche vectorielle (pgvector)
  • Recherche lexicale (PostgreSQL FTS)
  • Fusion hybride (RRF)
  • Diversification des candidats
  • Reranking par cross-encoder via la passerelle
  • Seuil de recherche et décision de réponse
  • Génération via la passerelle
  • Réponses en flux (SSE)
  • Citations et format des sources
  • Ancrage dans les sources et abstention
  • Fils de conversation et mémoire
  • Résumés de documents et de corpus
  • Analyse globale d’un corpus (tâches)
  • Réponses déterministes du chat (intercepteurs)
  • Visualiseur de documents
  • Retours utilisateurs et incidents
  • Journaux d’audit et rétention
  • Diagnostics
  • Sauvegarde et restauration
  • Interface bilingue (FR/EN)
  • API REST v1 et contrat OpenAPI
  • Limitation de débit
  • En-têtes et cookies de sécurité
  • Identifiant de requête (X-Request-ID)
  • Erreurs explicites en cas de dépendance indisponible
  • Quotas documentaires par workspace
  • Écran « Capacités documentaires » et sondes de la passerelle
  • Observabilité de la recherche et métriques d’exploitation
  • Politique de sortie réseau (fermée par défaut)

Configurable, optionnel ou absent

  • Portées par propriétaire et droits par espace Disponible avec configuration
  • Reranking local intégré (historique) Non activé
  • Politique de langue de réponse Disponible avec configuration
  • Routeur d’actions Disponible avec configuration
  • Requêtes tabulaires déterministes (DuckDB) Disponible avec configuration
  • Configuration dynamique (surcouche du cœur) Disponible avec configuration
  • Courriels .eml (sur activation) et .msg (retiré) Disponible avec configuration
  • Connecteurs de messagerie Non disponible
  • Reformulation de la requête par le modèle Disponible avec configuration
Voir le détail des 55 fonctionnalités, avec limites et preuves
Documents, recherche et réponses
FonctionnalitéStatutDescription et limitesDétails
Workspaces et espaces documentaires (multi-organisation)Disponible par défaut

Un workspace (tenant) regroupe des membres et des RagSpaces ; chaque RagSpace porte ses documents, chunks et sa configuration LLM/embeddings.

Suppression logique d’un espace (deleted_at) ; purge définitive sur DELETE.

Détails
Nécessite
PostgreSQL+pgvector
Activé dans Compact
Oui
Qualification
Exercé par la qualification Compact de bout en bout (script e2e_qualification.py).
Sources
Isolation stricte entre espacesDisponible par défaut

Le rag_space est dupliqué sur chaque Chunk et filtré par double clause SQL ; accès re-vérifié avant tout appel Core ; anti-énumération (404).

Le cloisonnement par propriétaire à l’intérieur d’un workspace est optionnel (voir « portées de propriétaire »).

Détails
Activé dans Compact
Oui
Qualification
Contrôles d’isolation de la qualification Compact ; test « aucune route protégée ne répond avant le MFA ».
Sources
Comptes utilisateurs : invitations, réinitialisation, aucune inscription publiqueDisponible par défaut

Comptes créés par invitation (lien à usage unique, hash SHA-256) ou par bootstrap admin ; réinitialisation de mot de passe anti-énumération ; aucune inscription publique.

L’envoi de courriels exige une configuration SMTP ; par défaut, les messages sont écrits dans la console.

Détails
Nécessite
EMAIL_BACKEND pour l’envoi de courriels (par défaut : console ; les liens d’invitation sont copiables)
Réglage
WORKSPACE_INVITATIONS_V2_ENABLED
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Second facteur TOTP obligatoireDisponible par défaut

Second facteur TOTP (django-otp) obligatoire pour tout compte, non désactivable ; verrouillage django-axes, anti-rejeu, jetons de secours, admin Django protégé par OTP.

TOTP et jetons de secours statiques uniquement ; ni WebAuthn ni SMS.

Détails
Réglage
MFA_CHALLENGE_TTL_SECONDS, MFA_CHALLENGE_MAX_ATTEMPTS (tuning only)
Activé dans Compact
Oui
Qualification
Test documenté : aucune route protégée ne répond avant le second facteur.
Sources
Rôles et permissions par workspaceDisponible par défaut

Rôles owner/admin/member/viewer ; viewer en lecture seule ; owner/admin gèrent membres, RagSpaces, réglages LLM et audit ; superuser orthogonal (corpus métier, config).

Le dernier propriétaire ne peut pas être retiré ; un administrateur ne peut pas retirer un propriétaire.

Détails
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Console d’administration de la plateforme et admin DjangoDisponible par défaut

Gouvernance cross-workspace (/api/v1/platform/*, écran /platform-admin) : utilisateurs, workspaces, owners, diagnostics ; aucun accès au contenu ; admin Django sous OTP.

Le superutilisateur n’a aucun accès implicite aux contenus.

Détails
Nécessite
superutilisateur (is_superuser)
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Interfaces d’administration du workspace et du cœurDisponible par défaut

Écrans /workspace-admin (membres, RagSpaces, invitations), /admin-core (config Core, capacités documentaires), /ragatm-admin (corpus métier).

Les sondes de la passerelle depuis la console sont désactivées par défaut.

Détails
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Corpus métier partagéDisponible par défaut

Couche documentaire partagée entre workspaces (tables domain_corpus_*), administrée par le superuser, ingestion synchrone, retrieval bi-source avec étanchéité conservée.

Le corpus partagé ne participe pas par défaut aux réponses (admission calibrée).

Détails
Nécessite
superutilisateur pour l’administration · accès explicite au corpus (WorkspaceDomainCorpusAccess)
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Import de documents (formats par défaut)Disponible par défaut

Dépôt via /api/v1/documents/upload/ avec détection par contenu ; formats actifs par défaut : PDF, DOCX, PPTX, XLSX, CSV, TXT, MD, HTML, images JPEG/PNG/TIFF/WEBP ; limite 50 Mo ; dédup sha256.

Les images sont acceptées à l’import mais échouent à l’extraction dans Compact (pas d’OCR). Limite d’envoi : 50 Mo dans Compact (25 Mo par défaut ailleurs dans la documentation).

Détails
Réglage
UPLOAD_MAX_FILE_SIZE_MB (50), DOCUMENT_*_ENABLED
Activé dans Compact
Oui
Qualification
Exercé par la qualification Compact de bout en bout (script e2e_qualification.py).
Sources
Ingestion asynchrone (Celery)Disponible par défaut

Ingestion via worker Celery/Redis ; Compact force RAG_INGEST_ASYNC_DEFAULT=1 ; OCR/Excel/PPTX/DXF/IFC forcent l’async ; broker indisponible → 503 dependency_unavailable.

Un seul worker, concurrence 2 dans Compact.

Détails
Nécessite
Redis · service worker
Réglage
RAG_INGEST_ASYNC_DEFAULT
Activé dans Compact
Oui
Qualification
Ingestion de 8 documents mesurée pendant la qualification Compact.
Sources
Ré-import et déduplicationDisponible par défaut

Déduplication par (rag_space, sha256) hors FAILED ; un doublon ne crée ni fichier ni tâche ; le même fichier peut être importé dans un autre espace.

Aucune limite particulière relevée.

Détails
Activé dans Compact
Oui
Qualification
Exercé par la qualification Compact de bout en bout (script e2e_qualification.py).
Sources
Suppression de documents et purge d’un espaceDisponible par défaut

Suppression dure et immédiate d’un document (409 si ingestion en cours) ; DELETE d’un RagSpace = purge irréversible (documents, chunks, vecteurs, fils) en conservant ActionAuditEvent.

Pas de corbeille.

Détails
Activé dans Compact
Oui
Qualification
Exercé par la qualification Compact de bout en bout (script e2e_qualification.py).
Sources
Réindexation (tâches durables)Disponible par défaut

Jobs de réindexation par RagSpace sur la file reindex, reprise des documents en erreur, stratégies auto / force_ocr / extended_timeout ; aucune réindexation implicite lors d’un changement de modèle.

Changer de modèle d’embeddings impose une réindexation explicite.

Détails
Nécessite
worker consommant la file reindex
Réglage
REINDEX_* settings
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Métadonnées des documents et des fragmentsDisponible par défaut

Document : filename, content_type (sniffé), size, sha256, document_date, status, meta JSON, embedding_provider/model, reindex_required… ; Chunk : chunk_index, page_number, pipeline_id/family, meta (locators par format).

Le champ « confidentialité » du document est inerte (lu par aucun code).

Détails
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Extraction du texte natifDisponible par défaut

pypdf (+pdfminer/pdfplumber fallbacks), DOCX via stdlib, python-pptx, openpyxl, csv/html stdlib ; PDF scanné sans OCR → échec explicite pdf_scanned_requires_ocr.

DOCX : en-têtes, pieds de page, notes, commentaires et zones de texte non extraits ; moteur PyMuPDF absent (AGPL).

Détails
Réglage
DOCUMENT_EXTRACTION_TIMEOUT_SECONDS (180), DOCUMENT_PDF_MAX_PAGES (500)
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Découpage en fragmentsDisponible par défaut

Découpage déterministe par page : 2500 car./recouvrement 250 ; espaces gouvernés (Gateway) : budget min(2500, plafond modèle) → 1200/180 avec Granite ; stratégies dédiées Excel (40 lignes) et PPTX (1 slide = 1 unité).

La limite de 1 200 caractères du modèle d’embeddings borne la taille des fragments.

Détails
Réglage
RAG_CHUNK_SIZE_CHARS, RAG_CHUNK_OVERLAP_CHARS, RAG_GOVERNED_CHUNK_SIZE_CHARS, RAG_GOVERNED_CHUNK_OVERLAP_CHARS
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Embeddings contrôlés via la passerelle (768 dimensions)Disponible par défaut

Provider unique ai_gateway ; modèle logique fr-en-retrieval (granite-embedding:278m, 768 dims) ; identité (pipeline_id, digest, identity_verified) vérifiée ; checks E101/E102 ; refus d’indexer/interroger avec un pipeline différent.

Profil granite qualifié « expérimental » ; l’ancien profil 768 (nomic) n’est pas installé dans Compact.

Détails
Nécessite
ai-gateway-open · Ollama avec granite-embedding:278m
Réglage
AI_GATEWAY_EMBEDDINGS_*, RAG_EMBEDDING_DIM=768, EMBEDDINGS_EXPECTED_MODEL
Activé dans Compact
Oui
Qualification
Vérification d’identité d’embeddings par la qualification Compact ; qualification « expérimentale » côté passerelle.
Sources
Recherche vectorielle (pgvector)Disponible par défaut

Leg vectoriel pgvector (cosine) filtré par rag_space et pipeline_family, soumis au seuil RAG_MIN_SCORE.

Seuil de similarité hérité d’un autre modèle : il peut vider la branche vectorielle avec granite (voir seuil de retrieval).

Détails
Nécessite
PostgreSQL 16 + pgvector
Réglage
RAG_HYBRID_ENABLED
Activé dans Compact
Oui
Qualification
Script retrieval-diagnostic.sh : mesure la branche vectorielle avant/après seuil.
Sources
Recherche lexicale (PostgreSQL FTS)Disponible par défaut

FTS to_tsvector/ts_rank, config simple par défaut, plan de requêtes de la plus sélective à la plus large ; vecteur lexical stocké activable par flag (off).

Le chemin « vecteur stocké » exige une migration et RAG_FTS_CONFIG=french.

Détails
Réglage
RAG_FTS_CONFIG (simple), RAG_FTS_STORED_VECTOR_ENABLED (0), RAG_MIN_TEXT_RANK
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Fusion hybride (RRF)Disponible par défaut

merge_hybrid fusionne FTS et vectoriel par Reciprocal Rank Fusion (K=60) avec renfort lexical conditionnel sur identifiants forts ; RAG_HYBRID_ENABLED=1 par défaut.

Aucune limite particulière relevée.

Détails
Réglage
RAG_HYBRID_ENABLED, RAG_RRF_CONDITIONAL_LEXICAL_WEIGHT_ENABLED
Activé dans Compact
Oui
Qualification
Exercé par la qualification Compact de bout en bout (script e2e_qualification.py).
Sources
Diversification des candidatsDisponible par défaut

Pool candidate_k ×3, max 2 par groupe (document), avant décision ; activé par défaut.

Aucune limite particulière relevée.

Détails
Réglage
RAG_RETRIEVAL_DIVERSITY_ENABLED, RAG_RETRIEVAL_CANDIDATE_MULTIPLIER, RAG_RETRIEVAL_MAX_PER_GROUP
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Reranking par cross-encoder via la passerelleDisponible par défaut

Reranking des passages via POST /v1/rerank (TEI bge-reranker-v2-m3 derrière la Gateway) ; OFF dans le code, ON en Compact (pool 20, timeout 20 s) ; en échec, repli compté sur l’ordre RRF canonique (fail_open_rrf).

Repli = ordre RRF hybride (pas un reranking lexical) ; latence CPU ≈ 1,5 s par paire ; deux réglages de reranking mutuellement exclusifs.

Détails
Nécessite
ai-gateway-open avec AI_GATEWAY_RERANK_ENABLED=1 · service TEI de reranking
Réglage
RAG_RERANKER_ENABLED, RAG_RERANKER_POOL_K, RAG_RERANKER_TIMEOUT_SECONDS, RAG_RERANKER_FAILURE_POLICY
Activé dans Compact
Oui
Qualification
Qualification « expérimentale » côté passerelle ; ni rappel ni latence qualifiés ; reranker réel exercé par la qualification Compact.
Sources
Seuil de recherche et décision de réponseDisponible par défaut

should_answer : min_sources, seuil lexical, seuil vectoriel RAG_MIN_SCORE (défaut code 0.76, calibré nomic) ; refus dur seulement si aucun chunk, sinon mode partial/low_confidence.

Divergence documentaire sur la valeur par défaut (0,20 vs 0,76) ; 0,76 non calibré pour granite.

Détails
Réglage
RAG_MIN_SCORE, RAG_MIN_SOURCES, RAG_MIN_TEXT_RANK, RAG_LOWCONF_ENABLED
Activé dans Compact
Oui
Qualification
retrieval-diagnostic.sh diagnostique une branche vectorielle vidée par le seuil.
Sources
Génération via la passerelleDisponible par défaut

Toute génération passe par POST /v1/generate de la Gateway (modèle logique compact-generation-8 = qwen2.5:1.5b-instruct en Compact) ; modèle par RagSpace ; chemin Ollama direct réservé aux tests.

Le modèle de 1,5 B démontre le chemin, pas la qualité des réponses ; modèles non enregistrés ou non installés refusés.

Détails
Nécessite
ai-gateway-open · Ollama
Réglage
AI_GATEWAY_ENABLED, AI_GATEWAY_MODEL, DEFAULT_RAGSPACE_CHAT_MODEL, RAG_FACTUAL_NUM_PREDICT (2048)
Activé dans Compact
Oui
Qualification
Qualification fonctionnelle Compact ; sélection de modèle testée de bout en bout.
Sources
Réponses en flux (SSE)Disponible par défaut

Le chat /chat/stream/ émet du SSE (meta → sources → token(s) → done, + error) ; avec AI_GATEWAY_STREAMING_ENABLED=1 (Compact) les fragments viennent de /v1/generate/stream (NDJSON) ; à 0, pseudo-stream en un bloc.

Certaines pages de documentation disent encore « pas de vrai streaming » : dérive documentaire, la configuration Compact active le flux natif.

Détails
Nécessite
AI_GATEWAY_ENABLED=1
Réglage
AI_GATEWAY_STREAMING_ENABLED (code default 0, Compact 1)
Activé dans Compact
Oui
Qualification
Scénario de résilience Compact « client interrompant un flux ».
Sources
Citations et format des sourcesDisponible par défaut

Sources v1 (rank, document_id, chunk_id, score, filename, page_number, snippet ≤200) ; contrat de réponse distinguant sources retrouvées / transmises / réellement citées ; ligne « Sources: » seulement pour les citations réelles.

La justesse des citations dépend du respect des marqueurs [n] par le modèle.

Détails
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Ancrage dans les sources et abstentionDisponible par défaut

Garde-fous de citation en tête de prompt ; no_answer sans LLM si aucune source ; Mode B « hors documents » désactivé ; détection d’abstention FR/EN ; aucune réponse fabriquée en cas de panne (erreurs typées).

Mesure d’« answerability » par cross-encoder présente mais non promue ; relance anti-abstention évaluée, non implémentée.

Détails
Réglage
RAG_MODE_B_FALLBACK_ENABLED (0), RAG_ANSWERABILITY_ENABLED (0)
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Fils de conversation et mémoireDisponible par défaut

ChatThread/ChatMessage persistés, privés à leur auteur ; mémoire hiérarchique (fenêtre 12 messages, résumé au-delà de 18) injectée dans le prompt seulement ; recherche de fils bornée (3 s).

Le résumé de mémoire utilise le modèle global, pas celui de l’espace (limite connue).

Détails
Réglage
CHAT_MEMORY_ENABLED (1), CHAT_MEMORY_*
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Résumés de documents et de corpusDisponible par défaut

Résumé court synchrone / long en Celery map-reduce, persisté comme ChatMessage ; résumé de documents de corpus métier activé par défaut (non qualifié).

Résumés de corpus non qualifiés.

Détails
Nécessite
worker
Réglage
DOMAIN_CORPUS_SUMMARY_ENABLED (1)
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Analyse globale d’un corpus (tâches)Disponible par défaut

CorpusAnalysisJob asynchrone (file analytics) avec cycle de vie, progression, annulation ; accès RagSpace re-vérifié à chaque opération.

Aucune limite particulière relevée.

Détails
Nécessite
worker consommant la file analytics
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Réponses déterministes du chat (intercepteurs)Disponible par défaut

Aide produit statique, garde analytique Excel (refus déterministe), listing documentaire : court-circuitent le RAG sans LLM.

Aucune limite particulière relevée.

Détails
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Visualiseur de documentsDisponible par défaut

Prévisualisation routée par preview_kind : pdf (iframe #page=N), spreadsheet, document (DOCX), presentation (PPTX), text, unsupported ; toujours actif.

CSV volontairement non pris en charge par le visualiseur.

Détails
Réglage
DOCUMENT_DOCX_PREVIEW_ENABLED, DOCUMENT_PPTX_PREVIEW_ENABLED, PREVIEW_CACHE_ENABLED
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Retours utilisateurs et incidentsDisponible par défaut

Pouce vers le bas → incident diagnosticable (lot 1 actif) ; export/import d’incidents et pseudonymisation par flags (off).

Aucune limite particulière relevée.

Détails
Réglage
FEEDBACK_INCIDENT_EXPORT_ENABLED (0), FEEDBACK_INCIDENT_IMPORT_ENABLED (0), DRF_THROTTLE_FEEDBACK_CREATE
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Journaux d’audit et rétentionDisponible par défaut

RagQueryLog (90 j), ActionAuditEvent (365 j), LlmEgressAuditEvent / EgressPolicyChangeLog (365 j, plancher protégé par system check), LlmSettingsChangeLog ; purge périodique.

Le journal des requêtes RAG stocke question et réponse en clair (données conversationnelles).

Détails
Nécessite
beat + worker pour la purge
Réglage
ACTION_AUDIT_ENABLED (1), CELERY_BEAT_AUDIT_PURGE_SECONDS
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
DiagnosticsDisponible par défaut

manage.py check (checks llm_router.*, config.*, rag_core.*), diagnose.sh (non inférentiel), retrieval-diagnostic.sh, contract_check.py, resilience_check.py, offline-check.sh, e2e_qualification.py.

Les sondes inférentielles de la passerelle ne sont jamais appelées automatiquement.

Détails
Nécessite
accès à docker compose
Activé dans Compact
Oui
Qualification
Scripts utilisés pendant la qualification Compact.
Sources
Sauvegarde et restaurationDisponible par défaut

backup.sh (pg_dump custom, archive media, configs, manifeste modèles, SHA256SUMS) et restore.sh dans une instance isolée ; secrets, Redis et poids de modèles exclus.

Les documents en cours d’ingestion au moment de la sauvegarde doivent être réindexés après restauration ; secrets à sauvegarder séparément.

Détails
Activé dans Compact
Oui
Qualification
Restauration vers une instance isolée exercée par la qualification Compact.
Sources
Interface bilingue (FR/EN)Disponible par défaut

next-intl sans préfixe de route ; locales fr (défaut) et en ; cookie ragatm_locale + préférence de compte ; 21 namespaces symétriques testés.

Généralisation aux écrans applicatifs en cours selon la documentation.

Détails
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
API REST v1 et contrat OpenAPIDisponible par défaut

~128 routes DRF sous /api/v1/ (auth, bootstrap, capabilities, workspaces, invitations, rag-spaces, documents, chat, analyses, prompts, audit, core, admin, platform, tabular) ; contrat shared/contracts/openapi.yaml 1.0.0 ; auth cookie token + CSRF ou Authorization: Token.

Contrat OpenAPI maintenu à la main, non vérifié automatiquement contre le code.

Détails
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Limitation de débitDisponible par défaut

DRF UserRateThrottle/AnonRateThrottle en production : user 120/min, anon 30/min, auth 20/min, mfa 10/min, feedback 10/min, recherche de fils 60/min, invitations 20/10 par min.

Compartiment anonyme partagé par tous les clients derrière le proxy Next (limite connue).

Détails
Nécessite
DJANGO_SETTINGS_MODULE=config.settings.prod (Compact)
Réglage
DRF_THROTTLE_ANON, DRF_THROTTLE_USER, DRF_THROTTLE_*
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
En-têtes et cookies de sécuritéDisponible par défaut

prod.py : HSTS 1 an + subdomains + preload, nosniff, X-Frame-Options SAMEORIGIN, Referrer-Policy same-origin, cookies Secure/HttpOnly/SameSite=Strict ; TLS attendu au reverse-proxy.

Pas de TLS dans la pile Compact ; aucune Content-Security-Policy dans les réglages examinés.

Détails
Nécessite
reverse proxy TLS pour tout accès hors boucle locale
Réglage
DJANGO_SECURE_SSL_REDIRECT
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Identifiant de requête (X-Request-ID)Disponible par défaut

Middleware : relaie un X-Request-ID conforme ([A-Za-z0-9._:-]{1,128}) sinon génère un UUID4 ; propagé à la Gateway (génération, embeddings, rerank) et aux flux SSE ; présent dans toutes les réponses.

Aucune limite particulière relevée.

Détails
Activé dans Compact
Oui
Qualification
contract_check.py relève les en-têtes X-Request-ID.
Sources
Erreurs explicites en cas de dépendance indisponibleDisponible par défaut

503 ai_gateway_unavailable (+Retry-After, retryable) ; 502 ai_gateway_error (non retryable) ; 503 dependency_unavailable (redis|broker) ; même charge utile dans l’événement SSE error ; jamais de réponse fabriquée.

Aucune limite particulière relevée.

Détails
Activé dans Compact
Oui
Qualification
Scénarios resilience_check.py de la qualification Compact.
Sources
Quotas documentaires par workspaceDisponible par défaut

max_document_count et max_document_bytes copiés depuis les défauts plateforme ; usage agrégé à la demande ; enforcement activé par défaut.

Pas de mode illimité.

Détails
Réglage
WORKSPACE_QUOTAS_ENFORCED (1)
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Écran « Capacités documentaires » et sondes de la passerelleDisponible par défaut

Écran superuser en lecture seule exposant l’état réel de chaque capacité (ACTIVE/DISABLED/UNAVAILABLE/UNKNOWN) ; sondes /health/* de la Gateway fermées par défaut.

États des services affichés « UNKNOWN » tant que les sondes sont désactivées.

Détails
Réglage
CAPABILITIES_GATEWAY_PROBES_ENABLED (0)
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Observabilité de la recherche et métriques d’exploitationDisponible par défaut

Trace structurée de chaque query_rag (dégradations observables), compteurs ops bornés (rag_reranker_*), route /ops/metrics hors /api/ avec jeton optionnel, /api/health/ non inférentiel.

Aucune limite particulière relevée.

Détails
Réglage
RAG_OPS_METRICS_TOKEN
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Politique de sortie réseau (fermée par défaut)Disponible par défaut

Tout appel LLM exige un LlmExecutionContext avec politique résolue ; tout provider non local refusé ; allow_external_fallback tracé mais sans provider externe existant.

Granularité limitée à l’espace documentaire ; champ de confidentialité inerte.

Détails
Activé dans Compact
Oui
Qualification
Tests de garde : aucun chemin de génération externe, aucun egress depuis le corpus.
Sources
Portées par propriétaire et droits par espaceDisponible avec configuration

Cloisonnement de plusieurs owners dans un même workspace et ACL par RagSpace ; implémenté de bout en bout mais désactivé par défaut.

Non activé dans Compact ; le transfert de portée depuis la console plateforme est en prévisualisation.

Détails
Nécessite
OWNER_SCOPE_ENABLED=1 · RAGSPACE_ACL_ENABLED=1
Réglage
OWNER_SCOPE_ENABLED, RAGSPACE_ACL_ENABLED
Activé dans Compact
Non
Qualification
Aucune qualification dédiée identifiée.
Sources
Politique de langue de réponseDisponible avec configuration

Préférence answer_language (auto/fr/en) pilotant la langue des réponses, distincte de la langue d’interface ; flag off dans le code.

Désactivé par défaut dans le code Open ; Compact ne le règle pas.

Détails
Nécessite
RAG_ANSWER_LANGUAGE_POLICY_ENABLED=1 + redéploiement
Réglage
RAG_ANSWER_LANGUAGE_POLICY_ENABLED
Activé dans Compact
Non
Qualification
Aucune qualification dédiée identifiée.
Sources
Routeur d’actionsDisponible avec configuration

Détection d’actions par le chat (apps.actions) ; mutations jamais déclenchables par phrase ; désactivé par défaut.

Aucune limite particulière relevée.

Détails
Nécessite
ACTIONS_ROUTER_ENABLED=1
Réglage
ACTIONS_ROUTER_ENABLED, ACTIONS_LLM_CLASSIFIER_ENABLED, ACTIONS_ALLOW_NL_DELETE
Activé dans Compact
Non
Qualification
Aucune qualification dédiée identifiée.
Sources
Requêtes tabulaires déterministes (DuckDB)Disponible avec configuration

Moteur DuckDB calculant sur le fichier source xlsx/csv (jamais le LLM, jamais les chunks) ; schéma fermé, bornes de lignes/colonnes/temps ; désactivé par défaut et en Compact.

Planificateur et narration par LLM non branchés.

Détails
Nécessite
TABULAR_QUERY_ENABLED=1
Réglage
TABULAR_QUERY_ENABLED
Activé dans Compact
Non
Qualification
Aucune qualification dédiée identifiée.
Sources
Configuration dynamique (surcouche du cœur)Disponible avec configuration

Overrides de configuration stockés en base, inertes par défaut ; édition et prise en compte runtime sous flags stricts (off).

Aucune limite particulière relevée.

Détails
Nécessite
CORE_CONFIG_EDIT_ENABLED=1 · CORE_CONFIG_RUNTIME_ENABLED=1
Réglage
CORE_CONFIG_EDIT_ENABLED, CORE_CONFIG_RUNTIME_ENABLED
Activé dans Compact
Non
Qualification
Aucune qualification dédiée identifiée.
Sources
Courriels .eml (sur activation) et .msg (retiré)Disponible avec configuration

Ingestion .eml avec pièces jointes, activable par flag et bornée par espace (off) ; .msg Outlook non pris en charge dans l’édition Open (parseur GPL écarté, code msg_unsupported_in_open_edition).

Pièces jointes : pas de vision ni d’extraction structurée ; IFC/DWG non pris en charge.

Détails
Nécessite
DOCUMENT_EML_ENABLED=1 + liste d’espaces autorisés
Réglage
DOCUMENT_EML_ENABLED, DOCUMENT_MSG_ENABLED (refused)
Activé dans Compact
Non
Qualification
Aucune qualification dédiée identifiée.
Sources
Reformulation de la requête par le modèleDisponible avec configuration

Réécriture/keywordisation de requête en mode explicatif ; réécriture LLM désactivée par mesure A/B (gain nul, P95 doublé).

Aucune limite particulière relevée.

Détails
Réglage
RAG_QUERY_REWRITE_ENABLED (0), RAG_KEYWORDIZE_ENABLED (1)
Activé dans Compact
Non
Qualification
Test A/B mesuré sur 100 questions (documentation du dépôt).
Sources
Reranking local intégré (historique)Non activé

Rerank historique chargeant un modèle dans le processus (extra rerank/torch) ; off ; jamais verrouillé pour l’image Compact.

Exclusif avec le reranking via la passerelle.

Détails
Nécessite
extra [rerank] (torch)
Réglage
RAG_RERANK_ENABLED
Activé dans Compact
Non
Qualification
Aucune qualification dédiée identifiée.
Sources
Connecteurs de messagerie
édition privée uniquement
Non disponible

Aucun connecteur de messagerie dans l’édition Open (mention explicite dans le code).

Aucune limite particulière relevée.

Détails
Activé dans Compact
Non
Qualification
Aucune qualification dédiée identifiée.
Sources

Passerelle de modèles (AI Gateway Open)

Le seul chemin vers les modèles : génération, embeddings, reranking, registre, limites, erreurs.

  • Disponible par défaut 14
  • Disponible avec configuration 1
  • Non activé 1
  • Non disponible 1
  • Non qualifié 3

Disponible par défaut dans le profil Compact

  • Génération POST /v1/generate
  • Flux POST /v1/generate/stream (NDJSON)
  • Embeddings POST /v1/embeddings
  • Reranking POST /v1/rerank (TEI)
  • Registre de modèles strict
  • Points de santé (health)
  • Délais d’expiration
  • Concurrence et saturation
  • Limites de taille des requêtes
  • Format et codes d’erreur
  • Sécurité réseau de la passerelle
  • Aucun fournisseur externe (par construction)
  • Identifiant de requête côté passerelle
  • Image de la passerelle durcie

Configurable, optionnel ou absent

  • Contrat gateway-api/1.0 (candidat) Non qualifié
  • Chat POST /v1/chat et /v1/chat/stream Non activé
  • Profils Compact CPU / GPU 12 Go Disponible avec configuration
  • Sortie structurée (JSON Schema) Non qualifié
  • Composants exclus de l’édition Open Non disponible
  • Matériel : CPU qualifié, GPU non qualifié Non qualifié
Voir le détail des 20 fonctionnalités, avec limites et preuves
Passerelle de modèles (AI Gateway Open)
FonctionnalitéStatutDescription et limitesDétails
Génération POST /v1/generateDisponible par défaut

prompt, model (logique), temperature, system, options{num_ctx,num_predict}, think, keep_alive, format/response_format ; extra=forbid ; réponse text/tokens/usage/done_reason ; bornes num_ctx ≤16384, num_predict ≤4096 (400).

Profil 7 B jamais exécuté dans Open.

Détails
Nécessite
Ollama + compact-generation-8
Réglage
OLLAMA_GENERATE_MODEL, AI_GATEWAY_TIMEOUT_SECONDS
Activé dans Compact
Oui
Qualification
Qualification Compact ; tests Open.
Sources
Flux POST /v1/generate/stream (NDJSON)Disponible par défaut

Événements delta / done (exactement un) / error en application/x-ndjson — pas du SSE ; fermeture client → fermeture upstream ; structured output non streamé.

Aucun événement de maintien de connexion.

Détails
Activé dans Compact
Oui
Qualification
Tests Open sur le NDJSON ; utilisé par le backend Compact.
Sources
Embeddings POST /v1/embeddingsDisponible par défaut

Champ texts (≤64), model, task query|document ; réponse 768 dims, pipeline_id emb-v2:…, model_digest, identity_verified, normalized ; overflow >1200 car. → reject ; dimension incompatible → 400.

Repli /api/embeddings seulement si la route /api/embed est absente.

Détails
Nécessite
Ollama + granite-embedding:278m
Réglage
OLLAMA_EMBEDDING_MODEL, AI_GATEWAY_EMBEDDINGS_DIMENSION (768), AI_GATEWAY_EMBEDDINGS_STRICT_REGISTRY
Activé dans Compact
Oui
Qualification
Qualification granite « expérimentale », identité vérifiée.
Sources
Reranking POST /v1/rerank (TEI)Disponible par défaut

query + documents (1..64, ≤2000/4000 car.) → scores bruts (calibrated:false) via TEI BAAI/bge-reranker-v2-m3 sur loopback obligatoire ; off dans Settings, on en .env.example et Compact ; timeout dédié (15 s défaut, 30 s Compact).

Aucun repli lexical dans la passerelle ; latence CPU non mesurée dans le dépôt.

Détails
Nécessite
conteneur TEI de reranking dans l’espace réseau de la passerelle
Réglage
AI_GATEWAY_RERANK_ENABLED, AI_GATEWAY_RERANK_TIMEOUT_SECONDS, AI_GATEWAY_RERANK_BACKEND_IMAGE_DIGEST
Activé dans Compact
Oui
Qualification
Qualification « expérimentale » ; contrôle d’identité /health/rerank.
Sources
Registre de modèles strictDisponible par défaut

models_registry.yaml : noms logiques, digests, capabilities, profils de gouvernance ; inconnu → 400 model_not_registered ; enregistré non installé → 503 model_not_installed non réessayable ; jamais de téléchargement.

Aucune limite particulière relevée.

Détails
Réglage
AI_GATEWAY_MODELS_REGISTRY, AI_GATEWAY_*_STRICT_REGISTRY (1)
Activé dans Compact
Oui
Qualification
Exercé par la qualification Compact de bout en bout (script e2e_qualification.py).
Sources
Points de santé (health)Disponible par défaut

/health/live (non inférentiel), /health/runtime (capabilities, installed, limits, inflight), /health (inventaire) ; /health/ready, /health/embeddings, /health/rerank sont inférentiels (explicit_only) ; /health/asr, /health/vision → disabled.

Pas de route /health/startup ; les sondes inférentielles ne doivent pas être câblées à des battements automatiques.

Détails
Réglage
AI_GATEWAY_READINESS_CACHE_SECONDS, AI_GATEWAY_READINESS_TIMEOUT_SECONDS
Activé dans Compact
Oui
Qualification
Test Open : sondes de santé non inférentielles.
Sources
Délais d’expirationDisponible par défaut

AI_GATEWAY_TIMEOUT_SECONDS (60 défaut, 300 Compact) borne generate/stream/embed ; flux : timeout de lecture + budget mural → event error upstream_timeout ; rerank 15/30 s ; readiness 5/30 s.

Aucune limite particulière relevée.

Détails
Réglage
AI_GATEWAY_TIMEOUT_SECONDS, AI_GATEWAY_RERANK_TIMEOUT_SECONDS, AI_GATEWAY_READINESS_TIMEOUT_SECONDS
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Concurrence et saturationDisponible par défaut

BoundedSemaphore non bloquant : generate/chat 2, embeddings 2, rerank 2, vision 1, ASR 1 → 503 *_saturated + Retry-After ; aucune file applicative, aucun retry vers Ollama/TEI ; Ollama NUM_PARALLEL=1.

Charge au-delà d’une génération concurrente non vérifiée.

Détails
Réglage
AI_GATEWAY_GENERATE_MAX_CONCURRENCY (2), *_MAX_CONCURRENCY
Activé dans Compact
Oui
Qualification
Saturation observée (200/200/503) pendant la qualification Compact.
Sources
Limites de taille des requêtesDisponible par défaut

Content-Length > 2 Mio → 413 request_too_large ; POST chunked → 411 ; /v1/audio et /v1/vision exemptés.

Aucune limite particulière relevée.

Détails
Réglage
AI_GATEWAY_REQUEST_MAX_BYTES
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Format et codes d’erreurDisponible par défaut

{detail:{status,provider,message,code?,retryable?}} avec messages publics fixes ; table de codes au contrat (model_not_registered 400, model_not_installed 503, *_saturated 503, asr_unavailable 503, vision_not_enabled 503…) ; erreurs de validation → 400.

Aucune limite particulière relevée.

Détails
Activé dans Compact
Oui
Qualification
contract_check.py.
Sources
Sécurité réseau de la passerelleDisponible par défaut

Aucune authentification, CORS, rate-limit ni en-têtes de sécurité dans le code ; confiance réseau : standalone publie 127.0.0.1:8100, Compact ne publie aucun port (réseaux internes ai + inference) ; backends rerank/ASR exigés en loopback.

Ni authentification, ni TLS, ni quotas, ni journal d’audit (hors périmètre selon la documentation).

Détails
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Aucun fournisseur externe (par construction)Disponible par défaut

Tests interdisant jetons/SDK de fournisseurs et appels de téléchargement dans app/ ; contrat external_providers: none ; OLLAMA_BASE_URL local.

Aucune limite particulière relevée.

Détails
Activé dans Compact
Oui
Qualification
Test Open : aucun fournisseur externe.
Sources
Identifiant de requête côté passerelleDisponible par défaut

Relayé si ^[A-Za-z0-9._:-]{1,128}$, sinon UUID v4 ; présent sur toutes les réponses y compris erreurs middleware.

Aucune limite particulière relevée.

Détails
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Image de la passerelle durcieDisponible par défaut

python:3.12-slim épinglé par digest, pip --require-hashes (986 hashes), utilisateur appuser, HEALTHCHECK /health/live, CI pip-audit/detect-secrets/SBOM (non bloquant lint).

Avertissements de style (lint) non bloquants.

Détails
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Profils Compact CPU / GPU 12 GoDisponible avec configuration

compact-generation-8 (qwen2.5:1.5b, experimental, digest relevé) = profil CPU qualifié fonctionnellement ; compact-generation (qwen2.5:7b, candidate, sans digest) = profil 12 Go NON qualifié, jamais exécuté dans Open.

Budgets GPU estimés, non mesurés.

Détails
Nécessite
compose.gpu-12gb.yml + provision --with-12gb (profil GPU)
Réglage
OLLAMA_GENERATE_MODEL
Activé dans Compact
Oui
Qualification
Profil CPU : qualification fonctionnelle ; GPU : non exécuté.
Sources
Contrat gateway-api/1.0 (candidat)Non qualifié

OpenAPI 3.1, version 1.0.0-candidate.2, statut CANDIDATE_FOR_RATIFICATION, 19 routes ; conformité fichier↔API testée ; SHA déclarée dans le CHANGELOG ≠ SHA du fichier commité.

Non ratifié ; points ouverts : 503 vs 424, identifiant de requête dans le corps, authentification inter-services.

Détails
Activé dans Compact
Oui
Qualification
Test de conformité OpenAPI ; contract_check.py contre une passerelle réelle.
Sources
Sortie structurée (JSON Schema)Non qualifié

format json ou response_format json_schema avec sous-ensemble fermé de JSON Schema (pas de $ref/pattern/combinators ; 32 Kio, profondeur 16, 512 nœuds), revalidation Draft 2020-12 ; 502 output_invalid/mismatch.

Non diffusable en flux.

Détails
Activé dans Compact
Oui
Qualification
Documentation : non qualifiée sur les modèles Compact.
Sources
Matériel : CPU qualifié, GPU non qualifiéNon qualifié

Profil CPU qualifié ; GPU optionnel, budgets 8/12 Go = estimations non mesurées ; Ollama 0.30.8 et TEI cpu-1.8 épinglés par digest.

Aucune limite particulière relevée.

Détails
Activé dans Compact
Oui
Qualification
CPU : qualification fonctionnelle Compact ; GPU : non exécuté.
Sources
Chat POST /v1/chat et /v1/chat/streamNon activé

Routes de chat gouverné (messages, reasoning, response_format) exigeant un modèle à capability chat + reasoning_profile ; aucun modèle Compact ne le déclare → 400 model_not_registered / chat_not_supported.

RAGatm Open n’utilise que /v1/generate*.

Détails
Nécessite
modèle enregistré avec capacité de chat
Activé dans Compact
Non
Qualification
Aucune qualification dédiée identifiée.
Sources
Composants exclus de l’édition Open
édition privée uniquement
Non disponible

Modules de vision avancée, d’extraction structurée et de contrôle d’admission hôte : absents, drapeaux refusés au démarrage (ConfigurationError), états UNAVAILABLE dans /health/runtime.

Aucune limite particulière relevée.

Détails
Réglage
AI_GATEWAY_STRUCTURED_EXTRACT_*, AI_GATEWAY_V2H_*, AI_GATEWAY_VISION_SEMANTIC_ENABLED (refused)
Activé dans Compact
Non
Qualification
Test Open : ASR et vision absents (ImportError attendu).
Sources

Déploiement et montée en charge

Mode Direct, Pool facultatif, files de tâches, limites de concurrence documentées.

  • Disponible par défaut 5
  • Module optionnel 3
  • Non disponible 1
  • Non qualifié 2

Disponible par défaut dans le profil Compact

  • Mode Direct (backend → passerelle)
  • Séparation des composants (9 services)
  • Files de tâches Celery et worker
  • Gestion de capacité et limites de concurrence
  • Stockage documentaire mono-hôte

Configurable, optionnel ou absent

  • AI Gateway Pool (routeur optionnel) Module optionnel
  • Admission, disjoncteur et basculement (Pool) Module optionnel
  • Affinité des tâches de transcription (Redis) Module optionnel
  • Mise à l’échelle horizontale automatique Non disponible
  • Limites de charge documentées Non qualifié
  • Multi-nœuds / multi-GPU (Pool) Non qualifié
Voir le détail des 11 fonctionnalités, avec limites et preuves
Déploiement et montée en charge
FonctionnalitéStatutDescription et limitesDétails
Mode Direct (backend → passerelle)Disponible par défaut

Les trois URL Gateway (génération, embeddings, rerank) pointent sur http://ai-gateway:8100 ; AI_GATEWAY_POOL_HOSTS vide ⇒ route direct ; profil nominal Compact.

Aucune limite particulière relevée.

Détails
Nécessite
ai-gateway-open
Réglage
AI_GATEWAY_BASE_URL, AI_GATEWAY_EMBEDDINGS_BASE_URL, RAG_RERANKER_BASE_URL, AI_GATEWAY_POOL_HOSTS
Activé dans Compact
Oui
Qualification
Qualification Compact.
Sources
Séparation des composants (9 services)Disponible par défaut

Compact : db (pgvector), redis, backend (gunicorn 2×4), worker (Celery), beat, frontend (Next), ai-gateway, ollama, reranker (TEI) sur 5 réseaux dont 4 internes ; budgets mémoire par service.

Un seul hôte ; aucun déploiement multi-machines vérifié.

Détails
Nécessite
Docker Compose v2
Réglage
COMPACT_MEM_*
Activé dans Compact
Oui
Qualification
Qualification Compact.
Sources
Files de tâches Celery et workerDisponible par défaut

Files publiques celery, reindex, maintenance, analytics consommées par un worker (concurrence 2, max-tasks-per-child 50) ; files dédiées ingest_visual/audio/ifc/dwg définies mais sans consommateur dans Compact.

Ingestion séquentielle à l’échelle d’un poste.

Détails
Nécessite
Redis (file de tâches)
Réglage
COMPACT_WORKER_CONCURRENCY (2), CELERY_*
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Gestion de capacité et limites de concurrenceDisponible par défaut

Gateway 2 générations concurrentes (503 au-delà), Ollama NUM_PARALLEL=1 / 2 modèles chargés, worker concurrence 2, gunicorn 2 workers × 4 threads, timeout 600 s ; aucune file côté Gateway.

Charge au-delà d’une génération concurrente non vérifiée.

Détails
Réglage
AI_GATEWAY_GENERATE_MAX_CONCURRENCY, OLLAMA_NUM_PARALLEL, GUNICORN_WORKERS/THREADS
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Stockage documentaire mono-hôteDisponible par défaut

Les originaux sont écrits sur un volume local (media) : stockage lié à un hôte unique.

Pas de stockage objet ni partagé.

Détails
Réglage
MEDIA_ROOT
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
AI Gateway Pool (routeur optionnel)Module optionnel

Routeur HTTP autonome relayant les 19 routes gateway-api/1.0 vers 1..N Gateways (SINGLE_NODE, WEIGHTED_ROUND_ROBIN, LEAST_INFLIGHT), registre de nœuds avec allowlist, gouvernance de modèle (pas de substitution, identité par digest) ; absent de Compact ; bascule tout-ou-rien (llm_router.E008).

ASR/vision non qualifiés via le Pool ; RAG complet via le Pool non démontré dans les dépôts.

Détails
Nécessite
déploiement ai-gateway-pool-open + Redis (Compose) · AI_GATEWAY_POOL_HOSTS renseigné et les trois URL pointant vers le Pool
Réglage
POOL_CONFIG_FILE, POOL_ENVIRONMENT, AI_GATEWAY_POOL_HOSTS
Activé dans Compact
Non
Qualification
Parité mono-nœud contre une passerelle réelle (santé, modèles, génération, flux, embeddings, reranking) ; multi-nœuds sur nœuds simulés.
Sources
Admission, disjoncteur et basculement (Pool)Module optionnel

max_inflight par nœud → AT_CAPACITY (refus, pas de file) ; disjoncteur CLOSED/OPEN/HALF_OPEN sur pannes de transport ; suspension douce sur 503+Retry-After ; basculement seulement avant tout octet envoyé (connect errors) ; compteurs par processus.

État local au processus, sans coordination distribuée ; ni file d’attente, ni priorités, ni limitation de débit.

Détails
Nécessite
« AI Gateway Pool (routeur optionnel) » · au moins 2 nœuds pour le basculement
Réglage
nodes[].max_inflight, circuit_breaker.*, failover.enabled
Activé dans Compact
Non
Qualification
Tests unitaires et d’intégration sur nœuds simulés.
Sources
Affinité des tâches de transcription (Redis)Module optionnel

Store d’affinité job→nœud (none/memory/sqlite/redis) pour les jobs ASR asynchrones ; Redis = seul usage de Redis par le Pool ; backend none en Compact (routes audio refusées).

Aucune limite particulière relevée.

Détails
Nécessite
Redis · moteur de transcription (ASR) derrière la passerelle
Réglage
job_affinity.backend, AIGP_REDIS_URL
Activé dans Compact
Non
Qualification
Tests avec Redis réel ; chaîne ASR de bout en bout non exécutée.
Sources
Limites de charge documentéesNon qualifié

README : charge au-delà d’une génération concurrente non vérifiée ; Pool : débit en forte concurrence non remesuré ; ingestion séquentielle.

Aucune limite particulière relevée.

Détails
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Multi-nœuds / multi-GPU (Pool)Non qualifié

Configuration multi-nœuds préparée (exemple EXAMPLE_ONLY) ; MULTINODE_HARDWARE_QUALIFIED = NO ; LIVE_MULTI_GPU NOT_EXECUTED.

Aucune limite particulière relevée.

Détails
Nécessite
« AI Gateway Pool (routeur optionnel) » · hôtes GPU réels
Activé dans Compact
Non
Qualification
Aucune qualification dédiée identifiée.
Sources
Mise à l’échelle horizontale automatiqueNon disponible

Aucune fonction d’autoscaling ni de coordination multi-réplicas : Pool mono-processus, états par processus ; seule l’affinité ASR est partagée.

Aucune limite particulière relevée.

Détails
Activé dans Compact
Non
Qualification
Aucune qualification dédiée identifiée.
Sources

Sécurité : fonctions et limites

Les mécanismes ci-dessous existent dans le code publié. Ils réduisent les risques ; ils ne les suppriment pas.

  • Disponible par défaut 15
  • Non activé 1

Disponible par défaut dans le profil Compact

  • Aucun fournisseur d’IA externe
  • Un seul port publié (127.0.0.1)
  • Réseaux internes et exécution hors ligne
  • Aucun secret versionné
  • Conteneurs non-root
  • Images épinglées par digest
  • Dépendances verrouillées à empreintes
  • Politique de sécurité et contact
  • Licence Apache-2.0
  • Licences tierces (LGPL/MPL ; GPL/AGPL optionnels)
  • Pas de TLS ni d’authentification inter-services
  • Contrôles de la chaîne d’approvisionnement en CI
  • Cookies HttpOnly, CSRF et anti-énumération
  • Validation défensive des fichiers
  • Rétention d’audit avec durée minimale de sécurité

Configurable, optionnel ou absent

  • Champ « confidentialité » inerte Non activé
Voir le détail des 16 fonctionnalités, avec limites et preuves
Sécurité et confidentialité
FonctionnalitéStatutDescription et limitesDétails
Aucun fournisseur d’IA externeDisponible par défaut

System checks config.E009 / llm_router.E009 refusent toute variable OPENAI_*/ANTHROPIC_*… ; AI_GATEWAY_FALLBACK_PROVIDER=none seul admis ; politique d’egress fail-closed ; Gateway sans provider distant par construction.

Aucune limite particulière relevée.

Détails
Réglage
AI_GATEWAY_FALLBACK_PROVIDER (none), AI_GATEWAY_FALLBACK_ENABLED (0)
Activé dans Compact
Oui
Qualification
Tests de garde ; script offline-check.sh.
Sources
Un seul port publié (127.0.0.1)Disponible par défaut

Seul le frontend publie 127.0.0.1:${COMPACT_FRONTEND_PORT:-18080} ; backend, Gateway, Ollama, TEI, db, redis non publiés.

L’exposition sur le réseau local exige un reverse proxy TLS.

Détails
Réglage
COMPACT_FRONTEND_PORT
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Réseaux internes et exécution hors ligneDisponible par défaut

Réseaux app/data/ai/inference internal: true ; Ollama joignable uniquement par la Gateway ; approvisionnement des modèles en phase distincte (compose.provision.yml) ; HF_HUB_OFFLINE=1 ; aucun téléchargement en requête.

L’hôte Docker lui-même peut atteindre les réseaux internes (documenté ; aucune règle de pare-feu livrée).

Détails
Activé dans Compact
Oui
Qualification
Script offline-check.sh.
Sources
Aucun secret versionnéDisponible par défaut

gen-secrets.sh crée .env (0600) avec secrets aléatoires et refuse les valeurs de démonstration ; .env ignoré par git ; manage.py check refuse les valeurs de démo ; aucun secret dans images/Dockerfile/.env.example.

Aucune limite particulière relevée.

Détails
Activé dans Compact
Oui
Qualification
Scan de secrets en CI.
Sources
Conteneurs non-rootDisponible par défaut

Backend uid 10001 (app), frontend utilisateur node (npm/yarn retirés), Gateway appuser, Pool uid 10001.

Les images tierces (Ollama, TEI, Redis, pgvector) gardent leurs réglages amont.

Détails
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Images épinglées par digestDisponible par défaut

python:3.12-slim, node:22-alpine, pgvector/pgvector:pg16, redis:7.2-alpine, ollama/ollama (0.30.8), TEI référencées par digest sha256.

Le Dockerfile de qualification du Pool utilise un digest de base différent de son image de service.

Détails
Réglage
AI_GATEWAY_RERANK_BACKEND_IMAGE_DIGEST
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Dépendances verrouillées à empreintesDisponible par défaut

backend/requirements.lock (uv, 1241 hashes, --require-hashes), Gateway requirements.txt (986 hashes), Pool requirements.lock (253 hashes), frontend package-lock.json ; CI vérifie cohérence des locks.

La dérive des verrous par rapport à PyPI est consultative en CI.

Détails
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Politique de sécurité et contactDisponible par défaut

SECURITY.md dans les 3 dépôts : contact@ragatm.com (canal privé), divulgation coordonnée ≤90 jours, seule main maintenue, pas de délai contractuel.

Aucune limite particulière relevée.

Détails
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Licence Apache-2.0Disponible par défaut

LICENSE + NOTICE Apache-2.0 dans les trois dépôts (code original) ; THIRD_PARTY_NOTICES séparés.

Deux pages de documentation Compact disent encore « licence à poser » (obsolète).

Détails
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Licences tierces (LGPL/MPL ; GPL/AGPL optionnels)Disponible par défaut

psycopg LGPL-3.0, ifcopenshell LGPL (extra), certifi MPL-2.0, libvips LGPL (frontend node_modules), caniuse-lite CC-BY-4.0 ; LibreDWG GPL-3.0 et PyMuPDF AGPL-3.0 jamais inclus par défaut (garde automatisée) ; modèles Apache-2.0, aucun poids redistribué.

Aucune limite particulière relevée.

Détails
Activé dans Compact
Oui
Qualification
Test : les dépendances du cœur excluent les bibliothèques copyleft.
Sources
Pas de TLS ni d’authentification inter-servicesDisponible par défaut

La pile Compact n’embarque pas de TLS et aucune authentification entre backend, Gateway, Pool, TEI, Ollama (confiance réseau).

Placer un reverse proxy TLS pour tout accès hors boucle locale.

Détails
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Contrôles de la chaîne d’approvisionnement en CIDisponible par défaut

Workflows : installation à empreintes vérifiées, cohérence des locks, pip-audit, npm audit (0 avis), detect-secrets, inventaire de licences, build d’images sans push ; lint non bloquant.

L’en-tête du workflow de la passerelle dit encore « non exécutée » (obsolète).

Détails
Activé dans Compact
Oui
Qualification
Exécutions CI réussies sur GitHub.
Sources
Cookies HttpOnly, CSRF et anti-énumérationDisponible par défaut

Jeton d’auth en cookie HttpOnly + CSRF double-submit, SameSite=Strict, challenge MFA en cookie dédié ; 404 pour ressources non lisibles ; messages identiques introuvable/refusé.

Aucune limite particulière relevée.

Détails
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Validation défensive des fichiersDisponible par défaut

Détection par contenu (jamais l’extension), refus des macros .docm/.xlsm/.pptm, OLE2 legacy, archives, vidéos, exécutables, XML avec DOCTYPE/ENTITY ; bornes anti zip-bomb (200 Mo décompressé, ratio 200).

Aucune limite particulière relevée.

Détails
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Rétention d’audit avec durée minimale de sécuritéDisponible par défaut

Rétention par catégorie (90/365/365/30 j) ; security_audit ne peut descendre sous SECURITY_AUDIT_MIN_DAYS (check bloquant).

Aucune limite particulière relevée.

Détails
Réglage
AUDIT_RETENTION_* (per retention.py)
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources
Champ « confidentialité » inerteNon activé

Document.confidentiality existe (défaut internal) mais n’est lu par aucun code : ne constitue pas un contrôle.

Ne doit pas être présenté comme une protection.

Détails
Activé dans Compact
Oui
Qualification
Aucune qualification dédiée identifiée.
Sources