Passer au contenu principal
Chapitres du guide d’entraînement Toute la documentation

Référence de l’API d’entraînement

Endpoints enregistrés, corps des requêtes, réponses, limites de propriété et gestion des erreurs.

Les commandes et le code restent en anglais dans toutes les langues. Remplacez les espaces réservés en majuscules par les valeurs de votre compte et de votre tâche payante ; ne collez pas de vraies clés dans des carnets ou des journaux partagés.

Cycle de vie des ressources API

Un devis, une tâche payante et une session d’entraînement sont des ressources distinctes.
  1. Devis Valider la configuration et le prix actuel
  2. Tâche Créer et régler le paiement approuvé
  3. Session Choisir l’environnement d’exécution et la référence incluse
  4. Préparation Produire des manifestes de données vérifiés
  5. Rapport Consigner l’entraînement réel et les métadonnées de l’artefact

Devis: Valider la configuration et le prix actuel. Tâche: Créer et régler le paiement approuvé. Session: Choisir l’environnement d’exécution et la référence incluse. Préparation: Produire des manifestes de données vérifiés. Rapport: Consigner l’entraînement réel et les métadonnées de l’artefact

Authentification et règles des requêtes

Utilisez HTTPS avec Authorization: Bearer et une clé API de compte dotée de la portée ai:training. Envoyez Accept: application/json ; ajoutez Content-Type: application/json pour les corps JSON. Toutes les ressources appartiennent à un compte. Le groupe de routes est limité à 30 requêtes par minute, avec des contrôles supplémentaires lorsqu’ils sont configurés. Les ID des exemples sont des espaces réservés et non des ressources partagées.

  • Les ID de devis, UUID de tâche, ID de session, ID de modèle et ID d’artefact sont des identifiants différents.
  • Après une interruption réseau, lisez l’état actuel avant de répéter une écriture.
  • N’utilisez pas le texte des pages publiques ni les paramètres d’URL de tarification dans les requêtes API.
Exemple · bash
export TRAINING_API='https://fusionpointai.com/api/v1/training'
# Set the key securely as shown in Quickstart.
export JOB_UUID='REPLACE_WITH_YOUR_JOB_UUID'
export SESSION_ID='REPLACE_WITH_YOUR_SESSION_ID'
curl --fail-with-body --silent --show-error "$TRAINING_API/jobs" \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" -H 'Accept: application/json'

Requêtes, réponses et états

Créez un devis à partir d’une configuration admissible, puis la tâche correspondante et terminez le paiement approuvé avant d’ouvrir une session. Les endpoints de projet autorisent l’accès payant existant au modèle de référence et permettent de demander un programme ou des leçons, sans créer de facture ni modifier les prix. Les réponses de session incluent la configuration, la référence choisie, les manifestes de données, l’étape signalée et le rapport. Préparation et rapports sont des requêtes distinctes ; les états de tâche et de session le sont aussi.

  • L’autorisation de projet nécessite provider et reference_model_id ; les requêtes au modèle de référence nécessitent aussi action et objective.
  • Les exemples du modèle de référence se limitent au matériel d’entraînement approuvé ; les lignes de validation et de test final restent locales.
  • Les rapports de fin décrivent un véritable artefact local ; vérifiez ses données d’intégrité et d’évaluation.
Exemple · text
POST /api/v1/training/quotes
reference_model_id     required eligible integer model ID
training_plan_id       required public provider-plan integer ID
mode                   automatic | advanced
objective              required string, 10..4000 characters
language               required string, at most 120 characters
performance_criteria   required string, 10..2000 characters
student_release_slug   optional eligible slug, at most 190 characters
method                 optional eligible method, at most 80 characters
dataset_megabytes      optional integer, 1..1000000
gpu_count              optional integer, 1..128
delivery               optional: artifact | hosted
execution_target       optional: fusionpointai_hosting | customer_datacenter | colab

Availability and approved plan policies can impose narrower constraints.
Do not submit price, fixed_total, currency, price_version_id or model_training.
Exemple · json
{
  "reference_model_id": 123,
  "training_plan_id": "<INTEGER_FROM_YOUR_PROVIDER_PLAN>",
  "mode": "advanced",
  "objective": "Train a German support-message classifier.",
  "language": "German",
  "performance_criteria": "Evaluate per-class precision and recall on held-out data.",
  "student_release_slug": "<ELIGIBLE_STUDENT_RELEASE_SLUG>",
  "method": "LoRA",
  "dataset_megabytes": 8,
  "gpu_count": 1,
  "delivery": "artifact"
}
Exemple · bash
# Save the body as quote.json; replace ID placeholders with integers.
# Automatic mode omits student_release_slug and method.
curl --fail-with-body --silent --show-error "$TRAINING_API/quotes" \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
  -H 'Accept: application/json' -H 'Content-Type: application/json' \
  --data-binary @quote.json
# Save {"quote":"YOUR_QUOTE_UUID"} as job.json.
# Creates a native job/invoice; this is not payment confirmation.
curl --fail-with-body --silent --show-error "$TRAINING_API/jobs" \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
  -H 'Accept: application/json' -H 'Content-Type: application/json' \
  --data-binary @job.json
curl --fail-with-body --silent --show-error "$TRAINING_API/jobs/$JOB_UUID" \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" -H 'Accept: application/json'
Exemple · text
POST /api/v1/training/quotes: 201
{quote: UUID, currency: ISO_CODE, fixed_total: DECIMAL_STRING, expires_at: ISO_8601}

POST /api/v1/training/jobs: {"quote":"OWNED_QUOTE_UUID"}
201 for a newly created job; 200 when an accepted quote reuses its job.
Job fields:
id                job UUID
status            native job state, such as awaiting_payment
progress_percent  recorded progress, not an independent quality score
invoice_id        owned native invoice ID or null
created_at        ISO 8601 timestamp
completed_at      ISO 8601 timestamp or null
training_session  null or {id, status, step, delivery, verification}

GET /api/v1/training/jobs:
{data: JOB_ARRAY, current_page: INTEGER, last_page: INTEGER, per_page: 50, total: INTEGER}

This is a response-shape reference, not a fabricated live response.
Exemple · bash
# Save as session.json, using your paid job UUID and optional reference ID:
# {"job":"YOUR_PAID_JOB_UUID","runtime":"customer_datacenter","reference_model_id":123}
curl --fail-with-body --silent --show-error "$TRAINING_API/sessions" \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
  -H 'Accept: application/json' -H 'Content-Type: application/json' \
  --data-binary @session.json
curl --fail-with-body --silent --show-error "$TRAINING_API/sessions/$SESSION_ID" \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" -H 'Accept: application/json'
# One preparation batch; inspect progress before another request.
curl --fail-with-body --silent --show-error "$TRAINING_API/sessions/$SESSION_ID/prepare" \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
  -H 'Accept: application/json' -H 'Content-Type: application/json' --data '{}'
Exemple · text
Session response fields (shape reference, not a fabricated live result):
id                  session UUID
job                 owned job UUID
status              preparing | ready | running | evaluating | completed | failed | cancelled
configuration       approved method, student_checkpoint, sdk_training and selected reference
reference_model_id  selected integer reference ID
expires_at          ISO 8601 access expiry
step                last reported integer step
datasets[]          {split, rows, bytes, sha256}
report              current report object; event metrics live under report.last_event.metrics
delivery            runtime_local
verification        runtime_reported
Exemple · bash
curl --fail-with-body --silent --show-error \
  "$TRAINING_API/sessions/$SESSION_ID/datasets/train" \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
  -H 'Accept: application/x-ndjson' --output train.jsonl
# Use /datasets/validation for the other supported split.
sha256sum train.jsonl
# Compare bytes, rows and SHA-256 with the session manifest.
# For published server-side artifacts only, not the local SDK ZIP:
# GET /api/v1/training/jobs/{job}/artifacts/{file}
Exemple · text
POST /api/v1/training/sessions/{session}/events
Content-Type: application/json

state         required: running | evaluating | failed
step          required integer: 0..2000
total_steps   required integer: 1..2000
metrics       optional; only loss and eval_loss, each 0..1000000
error_code    optional: training_failed | evaluation_failed | runtime_unavailable |
              dataset_invalid | report_failed

Send actual trainer observations, never sample or invented metrics.
Exemple · bash
# Build the body from a REAL SDK report; requires jq.
jq '{artifact_name:"model-package.zip",report:.completion_report}' \
  customer-model-run-001/training-report.json > completion.json
curl --fail-with-body --silent --show-error "$TRAINING_API/sessions/$SESSION_ID/complete" \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
  -H 'Accept: application/json' -H 'Content-Type: application/json' \
  --data-binary @completion.json
# Cancel eligible service state, not the operating-system process:
curl --fail-with-body --silent --show-error "$TRAINING_API/sessions/$SESSION_ID/cancel" \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
  -H 'Accept: application/json' -H 'Content-Type: application/json' --data '{}'
Exemple · bash
curl --fail-with-body --silent --show-error \
  'https://fusionpointai.com/api/v1/training/projects/authorize' \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
  -H 'Accept: application/json' -H 'Content-Type: application/json' \
  --data '{"provider":"openai","reference_model_id":123}'
# The response identifies the owned paid job/grant and access expiry.
Exemple · bash
curl --fail-with-body --silent --show-error \
  'https://fusionpointai.com/api/v1/training/projects/teacher' \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
  -H 'Accept: application/json' -H 'Content-Type: application/json' \
  --data '{"provider":"openai","reference_model_id":123,"action":"lessons","objective":"Classify support messages into agreed categories.","topic":"ambiguous_requests","count":2,"approved_examples":["A reviewed support training example."]}'
# Send only explicitly approved training examples. Never send held-out rows.
# Curriculum action returns topics; lessons action returns text/topic examples.
Exemple · python
import os
from fusionpointai_training import TrainingClient

client = TrainingClient(api_key=os.environ["FUSIONPOINTAI_API_KEY"])
session = client.get_session(os.environ["FUSIONPOINTAI_SESSION_ID"])
print("Session:", session["id"])
print("Status:", session["status"])
print("Last reported step:", session["step"])
# Inspection is read-only; status and step are server-reported state.
Exemple · python
import os
from fusionpointai_training import TrainingClient

client = TrainingClient(api_key=os.environ["FUSIONPOINTAI_API_KEY"])
session = client.get_session(os.environ["FUSIONPOINTAI_SESSION_ID"])
for manifest in session["datasets"]:
    print(
        manifest["split"],
        "rows:", manifest["rows"],
        "bytes:", manifest["bytes"],
        "sha256:", manifest["sha256"],
    )
# These are server-provided manifest values, not a local integrity pass.
Exemple · python
import os
from fusionpointai_training import TrainingClient

client = TrainingClient(api_key=os.environ["FUSIONPOINTAI_API_KEY"])
session = client.get_session(os.environ["FUSIONPOINTAI_SESSION_ID"])
server_report = session.get("report")
runtime_report = server_report.get("runtime") if isinstance(server_report, dict) else None
if (
    session.get("status") == "completed"
    and isinstance(runtime_report, dict)
    and runtime_report.get("artifact_sha256") == os.environ["LOCAL_ARTIFACT_SHA256"]
    and server_report.get("delivery") == "runtime_local"
    and server_report.get("verification") == "runtime_reported"
):
    print("Server report matches the local artifact digest.")
else:
    print("Completion is not confirmed for this local artifact.")
# Reconcile by reading state; do not repeat training or invent a result.

Erreurs et intégration fiable

Appuyez-vous sur le statut HTTP et les détails de validation renvoyés au lieu de supposer que chaque erreur est temporaire. Attendez-vous à 401 pour les requêtes non authentifiées, 403 pour un accès refusé, 404 pour une ressource absente ou appartenant à un autre compte, 409 pour un état incompatible, 422 pour une entrée invalide et 429 en cas de limitation du débit. Les défaillances du fournisseur ou de l’environnement d’exécution peuvent renvoyer d’autres erreurs. Le SDK expose APIError sans renvoyer la sortie brute d’un service amont susceptible de contenir des secrets.

  • Les événements autorisent running, evaluating ou failed ; les clés de métriques sont loss et eval_loss.
  • step et total_steps sont limités à 2000 ; total_steps doit être positif.
  • Le corps de complete doit contenir artifact_name et chacun des champs de rapport présentés dans l’exemple.
Exemple · text
401  Authentication missing or invalid
403  Account/key scope or access denied
404  Resource missing, non-owned or intentionally hidden
409  Invalid session transition, runtime, paid-access or model configuration
410  Writable session expired
422  Invalid request fields or completion criteria not met
429  Request rate limited
502  Upstream reference data malformed or preparation failed

Do not retry a write blindly. Read session state and inspect the response.
Keep error_code distinct from the HTTP status. Never log authorization.
Exemple · text
POST /api/v1/training/sessions/{session}/complete
artifact_name                 safe filename ending in .zip, max 160 characters
report.training_steps         integer 1..2000
report.weights_before_sha256  lowercase SHA-256 of actual pre-training weights
report.weights_after_sha256   lowercase SHA-256 of actual changed weights
report.artifact_sha256        lowercase SHA-256 of the real local ZIP
report.artifact_bytes         integer 1..107374182400
report.eval_loss_before       finite number >0 and <=1000000
report.eval_loss_after        finite number >=0 and <=1000000
report.base_repository        pinned student repository, max 255 characters
report.base_revision          lowercase immutable 40-character revision
report.method                 SFT | LoRA | QLoRA

Values must match the approved session and actual local training.
Additional report keys are rejected. This body does not upload the ZIP.
Exemple · python
import os
from fusionpointai_training import TrainingClient
from fusionpointai_training.errors import APIError

client = TrainingClient(
    api_key=os.environ["FUSIONPOINTAI_API_KEY"],
    timeout=30.0,
    max_get_retries=2,
)
try:
    session = client.get_session(os.environ["FUSIONPOINTAI_SESSION_ID"])
except APIError:
    # GET retries are bounded. Do not blindly retry a write after an error.
    print("Session inspection failed; check access and current server state.")
else:
    print("Status:", session["status"])
# Never print the API key, authorization headers, or response secrets.

Référence de l’API

Point d’accèsRôle et comportement
POST /api/v1/training/quotes Authorization: Bearer ai:training Valider une référence, une offre et une configuration admissibles ; renvoyer un UUID de devis, une devise, fixed_total et expires_at. Utilisez l’offre approuvée et les paramètres admissibles du modèle entraînable, pas des prix client arbitraires.
GET /api/v1/training/jobs Authorization: Bearer ai:training Lister les tâches du client authentifié. Examinez la collection renvoyée et les ID des ressources au lieu de deviner des identifiants numériques.
POST /api/v1/training/jobs Authorization: Bearer ai:training Créer la tâche appartenant au compte à partir d’un UUID de devis valide. La réponse contient l’ID de la tâche, son état, l’ID de facture et des horodatages ; la création d’une tâche ne prouve pas que le paiement a été effectué.
GET /api/v1/training/jobs/{job} Authorization: Bearer ai:training Lire une tâche appartenant au compte à l’aide de son UUID, ainsi que sa progression et son état de livraison.
GET /api/v1/training/jobs/{job}/artifacts/{file} Authorization: Bearer ai:training Télécharger un fichier publié appartenant à cette tâche. Le ZIP local du SDK n’est pas automatiquement téléversé ni disponible via cette route.
POST /api/v1/training/sessions Authorization: Bearer ai:training Corps : UUID de la tâche, environnement d’exécution et reference_model_id positif facultatif. Renvoyer la session créée ou réutilisée ; la référence ne peut être modifiée qu’avant le début de la préparation.
GET /api/v1/training/sessions/{session} Authorization: Bearer ai:training Lire une session appartenant au compte, ainsi que sa configuration, ses jeux de données, son rapport et son état. La lecture de l’état ne démarre pas l’entraînement.
POST /api/v1/training/sessions/{session}/prepare Authorization: Bearer ai:training Envoyer un objet JSON vide pour demander un lot de préparation plafonné. Répéter tant que le traitement progresse, jusqu’à ce que la session soit prête et dans la limite du budget de requêtes.
GET /api/v1/training/sessions/{session}/datasets/{split} Authorization: Bearer ai:training Télécharger train ou validation au format application/x-ndjson. Vérifier les octets, le SHA-256 et les lignes par rapport au manifeste de cette session.
POST /api/v1/training/sessions/{session}/events Authorization: Bearer ai:training Signaler l’état réel, step, total_steps et éventuellement les métriques loss/eval_loss. Utiliser uniquement les valeurs d’état et de code d’erreur prises en charge.
POST /api/v1/training/sessions/{session}/complete Authorization: Bearer ai:training Envoyer artifact_name et le rapport complet de l’entraînement réel. Le service vérifie la méthode, la révision de base, les changements de poids, l’empreinte de l’artefact et les critères d’évaluation.
POST /api/v1/training/sessions/{session}/cancel Authorization: Bearer ai:training Envoyer un objet JSON vide pour annuler un état de service admissible. Si nécessaire, arrêtez vous-même le processus GPU distinct ; il ne s’agit pas d’une pause ni d’une reprise.
POST /api/v1/training/projects/authorize Authorization: Bearer ai:training Envoyez POST /api/v1/training/projects/authorize avec provider et un reference_model_id positif. Le service revérifie les droits payants du compte authentifié pour l’entraînement avec ce modèle de référence et renvoie la tâche, l’autorisation, le fournisseur, le modèle et son expiration, appartenant au compte. Aucun devis ni paiement n’est créé ou modifié.
POST /api/v1/training/projects/teacher Authorization: Bearer ai:training Envoyez POST /api/v1/training/projects/teacher avec provider, reference_model_id, action (curriculum ou lessons), objective, un topic facultatif, count (1–4) et jusqu’à huit approved_examples (2 000 caractères maximum chacun). La réponse contient des thèmes ou des lignes de texte/thème de leçon. N’envoyez que des contenus d’entraînement approuvés, jamais des données de validation ou de test final.