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
}
]
}
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
}
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"
}
]
}
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
}
]
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"
}
]
}
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
}
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
}
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"
}
]
}
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"
}
]
}
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
}
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"
}
]
}
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"
}
]
}
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
]
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"
}
]
}
Schema of the response body
{
"properties": {
"detail": {
"items": {
"$ref": "#/components/schemas/ValidationError"
},
"type": "array",
"title": "Detail"
}
},
"type": "object",
"title": "HTTPValidationError"
}
Search
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
}
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
}
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"
}
]
}
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"
}
]
}
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"
}
]
}
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
}
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"
}
]
}
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="
}
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
}
]
}
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"
}
]
}
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="
}
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"
}
]
}
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="
}
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"
}
]
}
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
}
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"
}
]
}
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
}
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"
}
]
}
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": [
{}
]
}
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"
}
]
}
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
}
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
}
}
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 |