REST API Documentation

Cléa API VERSION

API pour gérer les documents et effectuer des recherches sémantiques.


Database


POST /database/documents

Ajouter un document avec ses chunks

Description

Insère le document puis ses chunks dans une transaction unique.

Args: payload: Objet contenant les données du document et ses chunks. db: Session de base de données injectée par dépendance.

Returns: DocumentResponse: Document créé avec le nombre de chunks associés.

Raises: HTTPException: Si une erreur survient pendant l'insertion.

Request body

{
    "document": {
        "title": "string",
        "theme": "string",
        "documentType": "string",
        "publishDate": "2022-04-13",
        "corpusId": null
    },
    "chunks": [
        {
            "id": null,
            "content": "string",
            "startChar": 0,
            "endChar": 0,
            "hierarchyLevel": 0,
            "parentChunkId": null
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "properties": {
        "document": {
            "$ref": "#/components/schemas/DocumentCreate"
        },
        "chunks": {
            "items": {
                "$ref": "#/components/schemas/ChunkCreate"
            },
            "type": "array",
            "title": "Chunks"
        }
    },
    "type": "object",
    "required": [
        "document",
        "chunks"
    ],
    "title": "DocumentWithChunks",
    "description": "Payload complet pour `POST /database/documents`."
}

Response 200 OK

{
    "id": 0,
    "title": "string",
    "theme": "string",
    "documentType": "string",
    "publishDate": "2022-04-13",
    "corpusId": null,
    "chunkCount": 0,
    "indexNeeded": true
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "id": {
            "type": "integer",
            "title": "Id"
        },
        "title": {
            "type": "string",
            "title": "Title"
        },
        "theme": {
            "type": "string",
            "title": "Theme"
        },
        "documentType": {
            "type": "string",
            "title": "Documenttype"
        },
        "publishDate": {
            "type": "string",
            "format": "date",
            "title": "Publishdate"
        },
        "corpusId": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Corpusid"
        },
        "chunkCount": {
            "type": "integer",
            "minimum": 0,
            "title": "Chunkcount"
        },
        "indexNeeded": {
            "type": "boolean",
            "title": "Indexneeded",
            "default": false
        }
    },
    "type": "object",
    "required": [
        "id",
        "title",
        "theme",
        "documentType",
        "publishDate",
        "chunkCount"
    ],
    "title": "DocumentResponse",
    "description": "Réponse standard lorsqu’un document est renvoyé côté API.\n\nAttributs:\n    id (int): Identifiant du document.\n    title (str): Titre du document.\n    theme (str): Thème du document.\n    document_type (str): Type de document.\n    publish_date (date): Date de publication.\n    corpus_id (Optional[str]): Identifiant du corpus.\n    chunk_count (int): Nombre de chunks associés (>= 0)."
}

Response 422 Unprocessable Content

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string"
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

GET /database/documents

Lister les documents

Description

Liste l'ensemble des documents de la base de données avec leur nombre de chunks.

Cette fonction permet de récupérer un ensemble paginé de documents avec possibilité de filtrage sur différents critères.

Args: theme: Filtre optionnel pour le thème du document. document_type: Filtre optionnel pour le type du document. corpus_id: Filtre optionnel sur l'identifiant du corpus. skip: Nombre de documents à ignorer (pour la pagination). limit: Nombre maximal de documents à retourner. db: Session de base de données fournie par dépendance.

Returns: Liste des documents formatés avec leur nombre de chunks associés.

Input parameters

Parameter In Type Default Nullable Description
corpusId query None No
documentType query None No
limit query integer 100 No
skip query integer 0 No
theme query None No

Response 200 OK

[
    {
        "id": 0,
        "title": "string",
        "theme": "string",
        "documentType": "string",
        "publishDate": "2022-04-13",
        "corpusId": null,
        "chunkCount": 0,
        "indexNeeded": true
    }
]
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "type": "array",
    "items": {
        "$ref": "#/components/schemas/DocumentResponse"
    },
    "title": "Response List Documents Database Documents Get"
}

Response 422 Unprocessable Content

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string"
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

PUT /database/documents/{document_id}

Mettre à jour un document (et/ou ajouter des chunks)

Description

Met à jour les métadonnées d'un document et peut ajouter de nouveaux chunks.

Cette fonction permet de modifier les informations d'un document existant et d'y ajouter de nouveaux fragments de texte (chunks) en une seule opération.

Args: payload: Objet de mise à jour contenant le document et éventuellement des nouveaux chunks. document_id: Identifiant numérique du document à mettre à jour (≥ 1). db: Session de base de données injectée par dépendance.

Returns: DocumentResponse: Document mis à jour avec le nombre total de chunks associés.

Raises: HTTPException: - 404: Si le document n'existe pas dans la base

Input parameters

Parameter In Type Default Nullable Description
document_id path integer No Identifiant du document à mettre à jour (>= 1).

Request body

{
    "document": {
        "id": 0,
        "title": null,
        "theme": null,
        "documentType": null,
        "publishDate": null,
        "corpusId": null
    },
    "newChunks": null
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "properties": {
        "document": {
            "$ref": "#/components/schemas/DocumentUpdate"
        },
        "newChunks": {
            "anyOf": [
                {
                    "items": {
                        "$ref": "#/components/schemas/ChunkCreate"
                    },
                    "type": "array"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Newchunks"
        }
    },
    "type": "object",
    "required": [
        "document"
    ],
    "title": "UpdateWithChunks",
    "description": "Payload de mise-à-jour :\n\n* `document`  → DTO `DocumentUpdate`\n* `newChunks` → éventuelle liste de nouveaux chunks à ajouter"
}

Response 200 OK

{
    "id": 0,
    "title": "string",
    "theme": "string",
    "documentType": "string",
    "publishDate": "2022-04-13",
    "corpusId": null,
    "chunkCount": 0,
    "indexNeeded": true
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "id": {
            "type": "integer",
            "title": "Id"
        },
        "title": {
            "type": "string",
            "title": "Title"
        },
        "theme": {
            "type": "string",
            "title": "Theme"
        },
        "documentType": {
            "type": "string",
            "title": "Documenttype"
        },
        "publishDate": {
            "type": "string",
            "format": "date",
            "title": "Publishdate"
        },
        "corpusId": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Corpusid"
        },
        "chunkCount": {
            "type": "integer",
            "minimum": 0,
            "title": "Chunkcount"
        },
        "indexNeeded": {
            "type": "boolean",
            "title": "Indexneeded",
            "default": false
        }
    },
    "type": "object",
    "required": [
        "id",
        "title",
        "theme",
        "documentType",
        "publishDate",
        "chunkCount"
    ],
    "title": "DocumentResponse",
    "description": "Réponse standard lorsqu’un document est renvoyé côté API.\n\nAttributs:\n    id (int): Identifiant du document.\n    title (str): Titre du document.\n    theme (str): Thème du document.\n    document_type (str): Type de document.\n    publish_date (date): Date de publication.\n    corpus_id (Optional[str]): Identifiant du corpus.\n    chunk_count (int): Nombre de chunks associés (>= 0)."
}

Response 422 Unprocessable Content

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string"
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

DELETE /database/documents/{document_id}

Supprimer un document et tous ses chunks

Input parameters

Parameter In Type Default Nullable Description
document_id path integer No

Response 200 OK

Schema of the response body
{
    "type": "object",
    "additionalProperties": true,
    "title": "Response Remove Document Database Documents  Document Id  Delete"
}

Response 422 Unprocessable Content

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string"
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

GET /database/documents/{document_id}

Récupérer un document

Description

Récupère un document à partir de son identifiant et le formate en DocumentResponse.

Args: document_id (int): Identifiant du document à récupérer. db (Session): Session de base de données fournie par dépendance.

Returns: DocumentResponse: Document formaté avec le nombre de chunks associés.

Raises: HTTPException: Si le document n'existe pas dans la base.

Input parameters

Parameter In Type Default Nullable Description
document_id path integer No

Response 200 OK

{
    "id": 0,
    "title": "string",
    "theme": "string",
    "documentType": "string",
    "publishDate": "2022-04-13",
    "corpusId": null,
    "chunkCount": 0,
    "indexNeeded": true
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "id": {
            "type": "integer",
            "title": "Id"
        },
        "title": {
            "type": "string",
            "title": "Title"
        },
        "theme": {
            "type": "string",
            "title": "Theme"
        },
        "documentType": {
            "type": "string",
            "title": "Documenttype"
        },
        "publishDate": {
            "type": "string",
            "format": "date",
            "title": "Publishdate"
        },
        "corpusId": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Corpusid"
        },
        "chunkCount": {
            "type": "integer",
            "minimum": 0,
            "title": "Chunkcount"
        },
        "indexNeeded": {
            "type": "boolean",
            "title": "Indexneeded",
            "default": false
        }
    },
    "type": "object",
    "required": [
        "id",
        "title",
        "theme",
        "documentType",
        "publishDate",
        "chunkCount"
    ],
    "title": "DocumentResponse",
    "description": "Réponse standard lorsqu’un document est renvoyé côté API.\n\nAttributs:\n    id (int): Identifiant du document.\n    title (str): Titre du document.\n    theme (str): Thème du document.\n    document_type (str): Type de document.\n    publish_date (date): Date de publication.\n    corpus_id (Optional[str]): Identifiant du corpus.\n    chunk_count (int): Nombre de chunks associés (>= 0)."
}

Response 422 Unprocessable Content

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string"
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

DELETE /database/documents/{document_id}/chunks

Supprimer des chunks d'un document

Input parameters

Parameter In Type Default Nullable Description
chunk_ids query None No IDs à supprimer ; vide ⇒ tous les chunks du document
document_id path integer No

Response 200 OK

Schema of the response body
{
    "type": "object",
    "additionalProperties": true,
    "title": "Response Remove Chunks Database Documents  Document Id  Chunks Delete"
}

Response 422 Unprocessable Content

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string"
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

GET /database/documents/{document_id}/chunks

Récupérer les chunks d'un document

Input parameters

Parameter In Type Default Nullable Description
document_id path integer No
hierarchyLevel query None No
limit query integer 100 No
parentChunkId query None No
skip query integer 0 No

Response 200 OK

[
    null
]
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "type": "array",
    "items": {},
    "title": "Response Get Chunks Database Documents  Document Id  Chunks Get"
}

Response 422 Unprocessable Content

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string"
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

POST /search/hybrid_search

Recherche hybride (vecteur + filtres)

Description

Retourne les top k chunks les plus pertinents avec évaluation de confiance.

Le moteur combine :

  • Filtres SQL (theme, document_type, dates, corpus_id)
  • Index vectoriel pgvector (IVFFLAT ou HNSW)
  • Rerank Cross-Encoder sur un sous-ensemble élargi (top k × 3)
  • Évaluation de confiance analyse la pertinence globale des résultats
  • Filtrage de pertinence élimine les résultats sous le seuil minimal
  • Normalisation des scores facilite l'interprétation (0-1)

Les résultats incluent des métriques de confiance qui permettent d'identifier les requêtes hors du domaine de connaissances.

Request body

{
    "query": "string",
    "topK": 0,
    "theme": null,
    "documentType": null,
    "startDate": null,
    "endDate": null,
    "corpusId": null,
    "hierarchyLevel": null,
    "hierarchical": true,
    "filterByRelevance": true,
    "normalizeScores": true
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "properties": {
        "query": {
            "type": "string",
            "title": "Query",
            "description": "Requête en langage naturel"
        },
        "topK": {
            "type": "integer",
            "title": "Topk",
            "description": "Nombre de résultats à retourner",
            "default": 10
        },
        "theme": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Theme",
            "description": "Filtre par thème"
        },
        "documentType": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Documenttype",
            "description": "Filtre par type de document"
        },
        "startDate": {
            "anyOf": [
                {
                    "type": "string",
                    "format": "date-time"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Startdate",
            "description": "Date de début"
        },
        "endDate": {
            "anyOf": [
                {
                    "type": "string",
                    "format": "date-time"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Enddate",
            "description": "Date de fin"
        },
        "corpusId": {
            "anyOf": [
                {
                    "type": "integer"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Corpusid",
            "description": "ID du corpus"
        },
        "hierarchyLevel": {
            "anyOf": [
                {
                    "type": "integer"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Hierarchylevel",
            "description": "Niveau hiérarchique (0-2)"
        },
        "hierarchical": {
            "type": "boolean",
            "title": "Hierarchical",
            "description": "Récupérer le contexte hiérarchique",
            "default": false
        },
        "filterByRelevance": {
            "type": "boolean",
            "title": "Filterbyrelevance",
            "description": "Filtrer les résultats sous le seuil de pertinence",
            "default": false
        },
        "normalizeScores": {
            "type": "boolean",
            "title": "Normalizescores",
            "description": "Normaliser les scores entre 0 et 1",
            "default": false
        }
    },
    "type": "object",
    "required": [
        "query"
    ],
    "title": "SearchRequest",
    "description": "Paramètres pour la recherche hybride.\n\nCombine la requête textuelle avec des filtres de métadonnées optionnels."
}

Response 200 OK

{
    "query": "string",
    "topK": 0,
    "totalResults": 0,
    "results": [
        {
            "chunkId": 0,
            "documentId": 0,
            "title": "string",
            "content": "string",
            "theme": "string",
            "documentType": "string",
            "publishDate": "2022-04-13",
            "score": 10.12,
            "hierarchyLevel": 0,
            "context": null
        }
    ],
    "confidence": null,
    "normalized": true,
    "message": null
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "query": {
            "type": "string",
            "title": "Query",
            "description": "Requête originale"
        },
        "topK": {
            "type": "integer",
            "title": "Topk",
            "description": "Nombre de résultats demandés"
        },
        "totalResults": {
            "type": "integer",
            "title": "Totalresults",
            "description": "Nombre total de résultats trouvés"
        },
        "results": {
            "items": {
                "$ref": "#/components/schemas/ChunkResult"
            },
            "type": "array",
            "title": "Results",
            "description": "Résultats de la recherche"
        },
        "confidence": {
            "anyOf": [
                {
                    "$ref": "#/components/schemas/ConfidenceMetrics"
                },
                {
                    "type": "null"
                }
            ],
            "description": "Métriques de confiance sur les résultats"
        },
        "normalized": {
            "type": "boolean",
            "title": "Normalized",
            "description": "Indique si les scores sont normalisés (0-1)",
            "default": false
        },
        "message": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Message",
            "description": "Message informatif sur les résultats"
        }
    },
    "type": "object",
    "required": [
        "query",
        "topK",
        "totalResults",
        "results"
    ],
    "title": "SearchResponse",
    "description": "Réponse à une requête de recherche.\n\nContient les résultats triés par pertinence avec métadonnées et évaluation de confiance."
}

Response 422 Unprocessable Content

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string"
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

Index


POST /index/create-index/{corpus_id}

Créer un index vectoriel pour un corpus

Description

Crée un index vectoriel pour un corpus spécifique.

Cette fonction crée un index IVFFLAT simple pour accélérer les recherches vectorielles sur le corpus spécifié.

Args: corpus_id: Identifiant UUID du corpus à indexer.

Returns: dict: Résultat de l'opération avec statut et message.

Raises: HTTPException: Si une erreur survient lors de la création de l'index.

Input parameters

Parameter In Type Default Nullable Description
corpus_id path string No Identifiant UUID du corpus

Response 200 OK

Schema of the response body
{
    "type": "object",
    "additionalProperties": true,
    "title": "Response Create Corpus Index Index Create Index  Corpus Id  Post"
}

Response 422 Unprocessable Content

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string"
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

DELETE /index/drop-index/{corpus_id}

Supprimer l'index vectoriel d'un corpus

Description

Supprime l'index vectoriel pour un corpus spécifique.

Args: corpus_id: Identifiant UUID du corpus.

Returns: dict: Résultat de l'opération.

Raises: HTTPException: Si une erreur survient lors de la suppression de l'index.

Input parameters

Parameter In Type Default Nullable Description
corpus_id path string No Identifiant UUID du corpus

Response 200 OK

Schema of the response body
{
    "type": "object",
    "additionalProperties": true,
    "title": "Response Remove Corpus Index Index Drop Index  Corpus Id  Delete"
}

Response 422 Unprocessable Content

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string"
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

GET /index/index-status/{corpus_id}

Vérifier l'état de l'index pour un corpus

Description

Vérifie l'état de l'index pour un corpus spécifique.

Args: corpus_id: Identifiant UUID du corpus.

Returns: IndexStatus: État de l'index et métadonnées.

Raises: HTTPException: Si une erreur survient lors de la vérification de l'état.

Input parameters

Parameter In Type Default Nullable Description
corpus_id path string No Identifiant UUID du corpus

Response 200 OK

{
    "corpusId": null,
    "indexExists": true,
    "configExists": true,
    "isIndexed": true,
    "indexType": null,
    "chunkCount": 0,
    "indexedChunks": 0,
    "lastIndexed": null
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "corpusId": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Corpusid"
        },
        "indexExists": {
            "type": "boolean",
            "title": "Indexexists"
        },
        "configExists": {
            "type": "boolean",
            "title": "Configexists"
        },
        "isIndexed": {
            "type": "boolean",
            "title": "Isindexed"
        },
        "indexType": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Indextype"
        },
        "chunkCount": {
            "type": "integer",
            "title": "Chunkcount"
        },
        "indexedChunks": {
            "type": "integer",
            "title": "Indexedchunks"
        },
        "lastIndexed": {
            "anyOf": [
                {
                    "type": "string",
                    "format": "date"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Lastindexed"
        }
    },
    "type": "object",
    "required": [
        "corpusId",
        "indexExists",
        "configExists",
        "isIndexed",
        "indexType",
        "chunkCount",
        "indexedChunks",
        "lastIndexed"
    ],
    "title": "IndexStatus",
    "description": "Statut de l'indexation d'un document."
}

Response 422 Unprocessable Content

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string"
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

GET /index/indexes

Vérifier l'état de tous les index vectoriels

Description

Vérifie l'état de tous les index vectoriels.

Returns: dict: État des index pour tous les corpus.

Response 200 OK

Schema of the response body
{
    "additionalProperties": true,
    "type": "object",
    "title": "Response Get All Indexes Index Indexes Get"
}

POST /index/cleanup-indexes

Nettoyer les index vectoriels orphelins

Description

Nettoie les index vectoriels orphelins.

Cette route identifie et supprime les configurations d'index et vues matérialisées qui ne sont plus associées à des corpus existants dans la base de données.

Returns: dict: Résultat de l'opération avec statistiques.

Response 200 OK

Schema of the response body
{
    "additionalProperties": true,
    "type": "object",
    "title": "Response Cleanup Orphaned Indexes Index Cleanup Indexes Post"
}

DocLoader


POST /doc_loader/upload-file

Uploader un fichier et le traiter

Description

Uploade un fichier, l'extrait et le divise en chunks.

Args: file (UploadFile): Fichier uploadé par l'utilisateur. max_length (int): Taille maximale d'un chunk. Par défaut 1000. theme (str): Thème du document. Par défaut "Thème générique".

Returns: List[DocumentWithChunks]: Liste des documents extraits.

Raises: HTTPException: Si une erreur survient lors du traitement ou si aucun contenu n'est extrait.

Input parameters

Parameter In Type Default Nullable Description
max_length query integer 1000 No Taille maximale d'un chunk
theme query string Thème générique No Thème du document

Request body

{
    "file": "TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQ="
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "properties": {
        "file": {
            "type": "string",
            "format": "binary",
            "title": "File",
            "description": "Fichier à traiter"
        }
    },
    "type": "object",
    "required": [
        "file"
    ],
    "title": "Body_upload_and_process_file_doc_loader_upload_file_post"
}

Response 200 OK

{
    "document": {
        "title": "string",
        "theme": "string",
        "documentType": "string",
        "publishDate": "2022-04-13",
        "corpusId": null
    },
    "chunks": [
        {
            "id": null,
            "content": "string",
            "startChar": 0,
            "endChar": 0,
            "hierarchyLevel": 0,
            "parentChunkId": null
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "document": {
            "$ref": "#/components/schemas/DocumentCreate"
        },
        "chunks": {
            "items": {
                "$ref": "#/components/schemas/ChunkCreate"
            },
            "type": "array",
            "title": "Chunks"
        }
    },
    "type": "object",
    "required": [
        "document",
        "chunks"
    ],
    "title": "DocumentWithChunks",
    "description": "Payload complet pour `POST /database/documents`."
}

Response 422 Unprocessable Content

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string"
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

Pipeline


POST /pipeline/process-and-store

Charger un fichier, l'extraire et l'insérer dans la base de données avec segmentation adaptative

Description

Charge un fichier, l'extrait avec segmentation hiérarchique et l'insère dans la base de données.

Le fichier est temporairement sauvegardé sur le disque, traité pour en extraire le contenu textuel, segmenté selon une approche hiérarchique, puis inséré dans la base de données avec génération automatique d'embeddings.

Args: file: Fichier uploadé par l'utilisateur. max_length: Taille maximale d'un chunk final. overlap: Chevauchement entre les chunks. theme: Thème à appliquer au document. corpus_id: Identifiant du corpus (généré si non spécifié).

Returns: Dict: Résultats de l'opération avec l'ID du document et les statistiques de segmentation.

Raises: HTTPException: Si une erreur survient pendant le traitement du document.

Input parameters

Parameter In Type Default Nullable Description
corpus_id query None No Identifiant du corpus (généré si non spécifié)
max_length query integer 500 No Taille maximale d'un chunk
overlap query integer 100 No Chevauchement entre les chunks
theme query string Thème générique No Thème du document

Request body

{
    "file": "TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQ="
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "properties": {
        "file": {
            "type": "string",
            "format": "binary",
            "title": "File",
            "description": "Fichier à traiter"
        }
    },
    "type": "object",
    "required": [
        "file"
    ],
    "title": "Body_process_and_store_endpoint_pipeline_process_and_store_post"
}

Response 200 OK

Schema of the response body
{
    "type": "object",
    "additionalProperties": true,
    "title": "Response Process And Store Endpoint Pipeline Process And Store Post"
}

Response 422 Unprocessable Content

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string"
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

POST /pipeline/process-and-store-async

Traiter un fichier en arrière-plan et l'insérer dans la base de données

Description

Traite un fichier en arrière-plan et l'insère dans la base de données.

Similaire à process-and-store mais s'exécute de manière asynchrone pour les fichiers volumineux. Le client reçoit immédiatement une réponse avec un identifiant de tâche pendant que le traitement se poursuit en arrière-plan.

Args: background_tasks: Gestionnaire de tâches en arrière-plan de FastAPI. file: Fichier uploadé par l'utilisateur. max_length: Taille maximale d'un chunk final. overlap: Chevauchement entre les chunks. theme: Thème à appliquer au document. corpus_id: Identifiant du corpus (généré si non spécifié).

Returns: Dict: Informations sur la tâche en arrière-plan créée.

Input parameters

Parameter In Type Default Nullable Description
corpus_id query None No Identifiant du corpus (généré si non spécifié)
max_length query integer 500 No Taille maximale d'un chunk
overlap query integer 100 No Chevauchement entre les chunks
theme query string Thème générique No Thème du document

Request body

{
    "file": "TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQ="
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "properties": {
        "file": {
            "type": "string",
            "format": "binary",
            "title": "File",
            "description": "Fichier à traiter"
        }
    },
    "type": "object",
    "required": [
        "file"
    ],
    "title": "Body_process_and_store_async_endpoint_pipeline_process_and_store_async_post"
}

Response 200 OK

Schema of the response body
{
    "type": "object",
    "additionalProperties": true,
    "title": "Response Process And Store Async Endpoint Pipeline Process And Store Async Post"
}

Response 422 Unprocessable Content

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string"
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

AskAI


POST /askai/ask

Ask Ai

Description

Endpoint pour poser une question et obtenir une réponse basée sur les documents.

Cette fonction interroge la base documentaire avec la question fournie, récupère les documents pertinents et utilise un modèle LLM pour générer une réponse contextuelle.

Args: request: Paramètres de la requête (query, filters, etc.). db: Session de base de données SQLAlchemy. search_engine: Instance du moteur de recherche vectorielle.

Returns: Dict[str, Any] ou StreamingResponse: Réponse générée avec contexte.

Raises: HTTPException: Si une erreur survient lors du traitement.

Request body

{
    "query": "string",
    "filters": null,
    "theme": null,
    "modelName": null,
    "stream": true,
    "promptType": "string",
    "enableThinking": true
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "properties": {
        "query": {
            "type": "string",
            "title": "Query",
            "description": "Question à poser au système"
        },
        "filters": {
            "anyOf": [
                {
                    "additionalProperties": true,
                    "type": "object"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Filters",
            "description": "Filtres pour la recherche"
        },
        "theme": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Theme",
            "description": "Thème pour filtrer les documents"
        },
        "modelName": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Modelname",
            "description": "Modèle à utiliser",
            "default": "Qwen3-0.6B"
        },
        "stream": {
            "type": "boolean",
            "title": "Stream",
            "description": "Réponse en streaming",
            "default": false
        },
        "promptType": {
            "type": "string",
            "title": "Prompttype",
            "description": "Type de prompt (standard, summary, comparison)",
            "default": "standard"
        },
        "enableThinking": {
            "type": "boolean",
            "title": "Enablethinking",
            "description": "Activer le mode 'think' pour le modèle",
            "default": false
        }
    },
    "type": "object",
    "required": [
        "query"
    ],
    "title": "AskRequest",
    "description": "Requête pour poser une question au système RAG.\n\nArgs:\n    query: Question à poser au système.\n    filters: Filtres pour la recherche documentaire.\n    theme: Thème pour filtrer les documents.\n    model_name: Nom du modèle à utiliser.\n    stream: Indique si la réponse doit être streamée.\n    prompt_type: Type de prompt à utiliser.\n\nAttributes:\n    query (str): Question ou requête de l'utilisateur.\n    filters (Optional[Dict[str, Any]]): Filtres pour la recherche documentaire.\n    theme (Optional[str]): Thème pour filtrer les documents.\n    model_name (Optional[str]): Nom du modèle à utiliser.\n    stream (bool): Indique si la réponse doit être streamée.\n    prompt_type (str): Type de prompt à utiliser ('standard', 'summary', 'comparison')."
}

Response 200 OK

Schema of the response body

Response 422 Unprocessable Content

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string"
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

GET /askai/models

Get Models

Description

Endpoint pour récupérer la liste des modèles disponibles.

Returns: List[str]: Liste des noms de modèles disponibles.

Response 200 OK

Schema of the response body

Stats


GET /stats/documents

Statistiques sur les documents

Description

Récupère les statistiques sur les documents présents dans la base de données.

Cette route calcule différentes métriques sur les documents indexés, notamment la distribution par thème, par type de document, ainsi que les tendances récentes d'ajout de documents.

Args: skip: Nombre d'éléments à ignorer pour la pagination. limit: Nombre maximal d'éléments à retourner. db: Session de base de données fournie par dépendance.

Returns: DocumentStats: Objet contenant les statistiques sur les documents.

Raises: HTTPException: Si une erreur survient lors du calcul des statistiques.

Input parameters

Parameter In Type Default Nullable Description
limit query integer 100 No Nombre maximal d'éléments à retourner
skip query integer 0 No Nombre d'éléments à ignorer

Response 200 OK

{
    "totalCount": 0,
    "byTheme": {},
    "byType": {},
    "recentlyAdded": 0,
    "percentChange": 10.12
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "totalCount": {
            "type": "integer",
            "title": "Totalcount"
        },
        "byTheme": {
            "additionalProperties": {
                "type": "integer"
            },
            "type": "object",
            "title": "Bytheme"
        },
        "byType": {
            "additionalProperties": {
                "type": "integer"
            },
            "type": "object",
            "title": "Bytype"
        },
        "recentlyAdded": {
            "type": "integer",
            "title": "Recentlyadded"
        },
        "percentChange": {
            "type": "number",
            "title": "Percentchange"
        }
    },
    "type": "object",
    "required": [
        "totalCount",
        "byTheme",
        "byType",
        "recentlyAdded",
        "percentChange"
    ],
    "title": "DocumentStats",
    "description": "Corps pour créer un chunk (texte + méta hiérarchiques)."
}

Response 422 Unprocessable Content

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string"
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

GET /stats/searches

Statistiques sur les recherches effectuées

Description

Récupère les statistiques sur les recherches effectuées dans le système.

Cette route analyse l'historique des recherches pour fournir des métriques comme le nombre total de recherches, l'activité récente et les requêtes les plus populaires.

Args: skip: Nombre d'éléments à ignorer pour la pagination. limit: Nombre maximal d'éléments à retourner. db: Session de base de données fournie par dépendance.

Returns: SearchStats: Objet contenant les statistiques sur les recherches.

Raises: HTTPException: Si une erreur survient lors du calcul des statistiques.

Input parameters

Parameter In Type Default Nullable Description
limit query integer 100 No Nombre maximal d'éléments à retourner
skip query integer 0 No Nombre d'éléments à ignorer

Response 200 OK

{
    "totalCount": 0,
    "lastMonthCount": 0,
    "percentChange": 10.12,
    "topQueries": [
        {}
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "totalCount": {
            "type": "integer",
            "title": "Totalcount"
        },
        "lastMonthCount": {
            "type": "integer",
            "title": "Lastmonthcount"
        },
        "percentChange": {
            "type": "number",
            "title": "Percentchange"
        },
        "topQueries": {
            "items": {
                "additionalProperties": true,
                "type": "object"
            },
            "type": "array",
            "title": "Topqueries"
        }
    },
    "type": "object",
    "required": [
        "totalCount",
        "lastMonthCount",
        "percentChange",
        "topQueries"
    ],
    "title": "SearchStats",
    "description": "Payload complet pour `POST /database/documents`."
}

Response 422 Unprocessable Content

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string"
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

GET /stats/system

Statistiques système globales

Description

Récupère les statistiques système globales.

Cette route analyse les métriques de confiance des recherches effectuées et l'état des corpus dans le système pour fournir une vue d'ensemble de la performance et de l'état de l'indexation.

Args: db: Session de base de données fournie par dépendance.

Returns: SystemStats: Objet contenant les métriques système.

Raises: HTTPException: Si une erreur survient lors du calcul des statistiques.

Response 200 OK

{
    "satisfaction": 10.12,
    "avgConfidence": 10.12,
    "percentChange": 10.12,
    "indexedCorpora": 0,
    "totalCorpora": 0
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "satisfaction": {
            "type": "number",
            "title": "Satisfaction"
        },
        "avgConfidence": {
            "type": "number",
            "title": "Avgconfidence"
        },
        "percentChange": {
            "type": "number",
            "title": "Percentchange"
        },
        "indexedCorpora": {
            "type": "integer",
            "title": "Indexedcorpora"
        },
        "totalCorpora": {
            "type": "integer",
            "title": "Totalcorpora"
        }
    },
    "type": "object",
    "required": [
        "satisfaction",
        "avgConfidence",
        "percentChange",
        "indexedCorpora",
        "totalCorpora"
    ],
    "title": "SystemStats",
    "description": "Payload complet pour `POST /database/documents`."
}

GET /stats/dashboard

Toutes les statistiques pour le tableau de bord

Description

Récupère l'ensemble des statistiques pour le tableau de bord.

Cette route agrège les résultats des différentes fonctions de calcul de statistiques pour fournir un objet unique contenant toutes les métriques nécessaires au tableau de bord d'administration.

Args: db: Session de base de données fournie par dépendance.

Returns: DashboardStats: Objet contenant l'ensemble des statistiques.

Raises: HTTPException: Si une erreur survient lors du calcul des statistiques.

Response 200 OK

{
    "documentStats": {
        "totalCount": 0,
        "byTheme": {},
        "byType": {},
        "recentlyAdded": 0,
        "percentChange": 10.12
    },
    "searchStats": {
        "totalCount": 0,
        "lastMonthCount": 0,
        "percentChange": 10.12,
        "topQueries": [
            {}
        ]
    },
    "systemStats": {
        "satisfaction": 10.12,
        "avgConfidence": 10.12,
        "percentChange": 10.12,
        "indexedCorpora": 0,
        "totalCorpora": 0
    }
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "documentStats": {
            "$ref": "#/components/schemas/DocumentStats"
        },
        "searchStats": {
            "$ref": "#/components/schemas/SearchStats"
        },
        "systemStats": {
            "$ref": "#/components/schemas/SystemStats"
        }
    },
    "type": "object",
    "required": [
        "documentStats",
        "searchStats",
        "systemStats"
    ],
    "title": "DashboardStats",
    "description": "Corps minimal pour créer un document (hors contenu)."
}

POST /stats/refresh

Rafraîchir le cache des statistiques

Description

Force le rafraîchissement du cache des statistiques.

Cette route permet d'invalider les caches potentiels et de forcer un recalcul complet de toutes les métriques du système. Utile après des opérations importantes comme des imports massifs ou des maintenances.

Args: db: Session de base de données fournie par dépendance.

Returns: dict: Résultat de l'opération avec statut et message.

Raises: HTTPException: Si une erreur survient lors du rafraîchissement.

Response 200 OK

Schema of the response body
{
    "additionalProperties": true,
    "type": "object",
    "title": "Response Refresh Stats Cache Stats Refresh Post"
}

Endpoints


GET /

Root

Description

Endpoint racine pour vérifier l'état de l'API.

Returns: dict: Message indiquant que l'API est en cours d'exécution.

Response 200 OK

Schema of the response body


Schemas

AskRequest

Name Type
enableThinking boolean
filters
modelName
promptType string
query string
stream boolean
theme

Body_process_and_store_async_endpoint_pipeline_process_and_store_async_post

Name Type
file string(binary)

Body_process_and_store_endpoint_pipeline_process_and_store_post

Name Type
file string(binary)

Body_upload_and_process_file_doc_loader_upload_file_post

Name Type
file string(binary)

ChunkCreate

Name Type
content string
endChar integer
hierarchyLevel integer
id
parentChunkId
startChar integer

ChunkResult

Name Type
chunkId integer
content string
context
documentId integer
documentType string
hierarchyLevel integer
publishDate string(date)
score number
theme string
title string

ConfidenceMetrics

Name Type
level number
message string
stats

DashboardStats

Name Type
documentStats DocumentStats
searchStats SearchStats
systemStats SystemStats

DocumentCreate

Name Type
corpusId
documentType string
publishDate string(date)
theme string
title string

DocumentResponse

Name Type
chunkCount integer
corpusId
documentType string
id integer
indexNeeded boolean
publishDate string(date)
theme string
title string

DocumentStats

Name Type
byTheme
byType
percentChange number
recentlyAdded integer
totalCount integer

DocumentUpdate

Name Type
corpusId
documentType
id integer
publishDate
theme
title

DocumentWithChunks

Name Type
chunks Array<ChunkCreate>
document DocumentCreate

HierarchicalContext

Name Type
level0
level1
level2

HTTPValidationError

Name Type
detail Array<ValidationError>

IndexStatus

Name Type
chunkCount integer
configExists boolean
corpusId
indexedChunks integer
indexExists boolean
indexType
isIndexed boolean
lastIndexed

SearchRequest

Name Type
corpusId
documentType
endDate
filterByRelevance boolean
hierarchical boolean
hierarchyLevel
normalizeScores boolean
query string
startDate
theme
topK integer

SearchResponse

Name Type
confidence
message
normalized boolean
query string
results Array<ChunkResult>
topK integer
totalResults integer

SearchStats

Name Type
lastMonthCount integer
percentChange number
topQueries Array<>
totalCount integer

SystemStats

Name Type
avgConfidence number
indexedCorpora integer
percentChange number
satisfaction number
totalCorpora integer

UpdateWithChunks

Name Type
document DocumentUpdate
newChunks

ValidationError

Name Type
loc Array<>
msg string
type string