Intégrer un modèle de classification par API

Authentification

Envoyer des documents en production

Pour classifier un document avec un modèle de classification donné, vous avez besoin :

  • du headers pour vous authentifier (voir Authentification)

  • du model (str), c’est-à-dire le nom du modèle dans lequel vous souhaitez charger les documents.

  • du folder_path, c’est-à-dire le répertoire dans lequel sont stockés les documents à classifier.

  • de webhook_url, c’est à dire l’adresse à laquelle seront renvoyées les valeurs extraites des documents. Voir Récupérer les résultats de l'extraction.

Si l'extrait de code ci-dessous s'exécute correctement, la variable file_id est incrémentée avec les ID des fichiers envoyés.

import os
import requests

URL_SERVER = 'https://classify.recital.ai/classify/api/v1'
model_name = ...
folder_path = "..."
webhook_url = "..."

files    = os.listdir(folder_path)
files_id = []
for file_name in files:
    file_path = folder_path+file_name
    with open(file_path, "rb") as file:
        file_post = requests.post(
            url=f'{URL_SERVER}/docs/predictions/',
            files={"file": (file_name, file, "application/pdf")},
            data={"model": model_name, "webhook_url":webhook_url},
            headers=headers
        )
        if file_post.status_code == 201:
            files_id.append(file_post.json()) # JSON response contains the files_id
        else:
            raise Exception(f'{file_path} has not been uploaded - {file_post.status_code} - {file_post.reason} - {file_post.content}')

Récupérer les résultats de la classification

Le traitement des documents étant asynchrone, les résultats de la classification ne seront pas envoyés directement en réponse de l'appel.

Via un callback (recommandé)

from fastapi import FastAPI, Request
import json

app = FastAPI()

@app.post("/callback")
async def receive_callback(request: Request):
    data = await request.json()  # Récupérer les données envoyées avec la requête
    # Sauvegarder les données dans un fichier
    with open("response.json", "w") as f:
        json.dump(data, f, indent=4)  # Ecrire les données dans un fichier JSON formaté
    return {"message": "Données reçues et sauvegardées"}

Via une méthode GET (non recommandé)

Il est possible de récupérer les résultats d'une prédiction de classification via API :

  • GET /classify/api/v1/docs/predictions/{id}/

Structure des résultats

Le JSON de réponse envoyé au callback a cette structure:

{
  "model": "Classification de docs",
  "label": "Bilan comptable actif",
  "probabilities": {
    "Facture fournisseur": 0.16779091954231262,
    "Kbis": 0.06958290189504623,
    "RIB": 0.09197935461997986,
    "Bilan comptable actif": 0.586195170879364,
    "Relevé d'information": 0.08445165306329727
  }
}

Last updated