Zum Hauptinhalt springen
Kapitel des Trainingsleitfadens Alle Dokumentationen

Referenz der Training-API

Registrierte Endpunkte, Anfragekörper, Antworten, Zuständigkeitsgrenzen und Fehlerbehandlung.

Befehle und Code bleiben in allen Sprachen auf Englisch. Ersetzen Sie GROSSGESCHRIEBENE Platzhalter durch Werte Ihres eigenen Kontos und bezahlten Auftrags. Fügen Sie echte Schlüssel nicht in gemeinsam genutzte Notebooks oder Protokolle ein.

Lebenszyklus der API-Ressourcen

Angebot, bezahlter Auftrag und Trainingssitzung sind getrennte Ressourcen.
  1. Angebot Konfiguration und aktuellen Preis validieren
  2. Auftrag Anlegen und genehmigte Zahlung abschließen
  3. Sitzung Laufzeitumgebung und enthaltene Referenz auswählen
  4. Vorbereitung Geprüfte Datensatzmanifeste erstellen
  5. Bericht Echtes Training und Artefaktmetadaten dokumentieren

Angebot: Konfiguration und aktuellen Preis validieren. Auftrag: Anlegen und genehmigte Zahlung abschließen. Sitzung: Laufzeitumgebung und enthaltene Referenz auswählen. Vorbereitung: Geprüfte Datensatzmanifeste erstellen. Bericht: Echtes Training und Artefaktmetadaten dokumentieren

Authentifizierung und Anfrageregeln

Verwenden Sie HTTPS mit Authorization: Bearer und einem Konto-API-Schlüssel mit dem Geltungsbereich ai:training. Senden Sie Accept: application/json; bei JSON-Anfragekörpern zusätzlich Content-Type: application/json. Alle Ressourcen gehören jeweils einem Konto. Die Routengruppe ist auf 30 Anfragen pro Minute begrenzt; je nach Konfiguration gelten weitere Kontrollen. IDs in Beispielen sind Platzhalter und keine gemeinsam genutzten Ressourcen.

  • Angebots-IDs, Auftrags-UUIDs, Sitzungs-IDs, Modell-IDs und Artefakt-IDs sind unterschiedliche Kennungen.
  • Lesen Sie nach einer Netzwerkunterbrechung den aktuellen Status, bevor Sie einen Schreibvorgang wiederholen.
  • Verwenden Sie für API-Anfragen keine Formulierungen oder Preisabfrageparameter öffentlicher Seiten.
Beispiel · 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'

Anfragen, Antworten und Status

Erstellen Sie aus einer geeigneten Konfiguration ein Angebot, legen Sie daraus den nativen Auftrag an und schließen Sie die genehmigte Zahlung ab, bevor Sie eine Sitzung öffnen. Beim Erstellen einer Sitzung wird 201 zurückgegeben, bei Wiederverwendung 200. Die Antwort enthält Konfiguration, Referenzmodell, Datensatzmanifeste, zuletzt gemeldeten Schritt und Bericht. Vorbereitung und Berichterstattung sind getrennte Anfragen; Auftrags- und Sitzungsstatus sind nicht dasselbe.

  • Laufzeitwerte für Sitzungen: fusionpointai_hosting, customer_datacenter, colab.
  • Datensatz-Splits: train, validation; Antworten sind JSONL und kein JSON-Array.
  • Abschlussberichte müssen ein echtes lokales Artefakt beschreiben und Integritäts- sowie Evaluationsprüfungen bestehen.
Beispiel · 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.
Beispiel · 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"
}
Beispiel · 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'
Beispiel · 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.
Beispiel · 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 '{}'
Beispiel · 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
Beispiel · 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}
Beispiel · 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.
Beispiel · 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 '{}'
Beispiel · 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.
Beispiel · 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.
Beispiel · 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.
Beispiel · 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.
Beispiel · 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.

Fehler und sichere Integration

Orientieren Sie sich am HTTP-Status und den zurückgegebenen Validierungsdetails, statt jeden Fehler als vorübergehend anzusehen. Mögliche Statuscodes: 401 für nicht authentifizierte Anfragen, 403 für verweigerten Zugriff, 404 für fehlende oder nicht eigene Ressourcen, 409 für einen inkompatiblen Status, 422 für ungültige Eingaben und 429 für Drosselung. Anbieter- oder Laufzeitfehler können andere Codes zurückgeben. Das SDK stellt APIError bereit, ohne rohe Upstream-Ausgaben mit möglichen Geheimnissen zurückzugeben.

  • Ereignisse erlauben running, evaluating oder failed; zulässige Metrikschlüssel sind loss und eval_loss.
  • step und total_steps sind auf 2000 begrenzt; total_steps muss positiv sein.
  • Der vollständige Anfragekörper erfordert artifact_name sowie alle im Beispiel aufgeführten Berichtsfelder.
Beispiel · 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.
Beispiel · 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.
Beispiel · 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.

API-Referenz

EndpunktZweck und Verhalten
POST /api/v1/training/quotes Authorization: Bearer ai:training Kompatible Referenz, Plan und Konfiguration validieren; eine Angebots-UUID, Währung, fixed_total und expires_at zurückgeben. Verwenden Sie den genehmigten Plan und geeignete Student-Einstellungen, keine willkürlichen Client-Preise.
GET /api/v1/training/jobs Authorization: Bearer ai:training Aufträge des authentifizierten Kunden auflisten. Prüfen Sie die zurückgegebene Sammlung und Ressourcen-IDs, statt numerische Kennungen zu erraten.
POST /api/v1/training/jobs Authorization: Bearer ai:training Aus einer gültigen Angebots-UUID den dem Konto zugehörigen Auftrag erstellen. Die Antwort enthält Auftrags-ID, Status, Rechnungs-ID und Zeitstempel; das Anlegen eines Auftrags belegt keine Zahlung.
GET /api/v1/training/jobs/{job} Authorization: Bearer ai:training Einen eigenen Auftrag anhand seiner Auftrags-UUID lesen, einschließlich des laufenden Fortschritts und Lieferstatus.
GET /api/v1/training/jobs/{job}/artifacts/{file} Authorization: Bearer ai:training Eine veröffentlichte Datei dieses eigenen Auftrags herunterladen. Eine lokale SDK-ZIP-Datei wird nicht automatisch hochgeladen und ist über diese Route nicht zwangsläufig verfügbar.
POST /api/v1/training/sessions Authorization: Bearer ai:training Anfragekörper: Auftrags-UUID, Laufzeitumgebung und optionale positive reference_model_id. Die neue oder wiederverwendete Sitzung zurückgeben; Referenzänderungen sind nur vor Beginn der Vorbereitung zulässig.
GET /api/v1/training/sessions/{session} Authorization: Bearer ai:training Eine eigene Sitzung sowie deren Konfiguration, Datensätze, Bericht und Status lesen. Das Lesen des Status startet kein Training.
POST /api/v1/training/sessions/{session}/prepare Authorization: Bearer ai:training Ein leeres JSON-Objekt senden, um einen begrenzten Vorbereitungsschritt anzufordern. Bei Fortschritt wiederholen, bis der Status bereit ist, dabei das Anfragebudget einhalten.
GET /api/v1/training/sessions/{session}/datasets/{split} Authorization: Bearer ai:training train oder validation als application/x-ndjson herunterladen. Bytes, SHA-256 und Zeilen anhand des Manifests der jeweiligen Sitzung prüfen.
POST /api/v1/training/sessions/{session}/events Authorization: Bearer ai:training Echten Status, step, total_steps und optionale Metriken loss/eval_loss melden. Nur unterstützte Status- und Fehlercodewerte verwenden.
POST /api/v1/training/sessions/{session}/complete Authorization: Bearer ai:training artifact_name und den vollständigen echten Trainingsbericht übermitteln. Der Dienst prüft Methode, Basisrevision, Gewichtsänderungen, Artefakt-Digest und Evaluationskriterien.
POST /api/v1/training/sessions/{session}/cancel Authorization: Bearer ai:training Ein leeres JSON-Objekt senden, um einen abbrechbaren Dienststatus zu beenden. Den separaten GPU-Prozess bei Bedarf selbst stoppen; dies ist kein Pausieren oder Fortsetzen.
POST /api/v1/training/projects/authorize Authorization: Bearer ai:training POST /api/v1/training/projects/authorize mit provider und positiver reference_model_id senden. Prüft erneut, ob das angemeldete Konto bezahlten Trainingszugriff auf die Referenz hat, und gibt den eigenen Auftrag, die Berechtigung, den Anbieter, das Referenzmodell und deren Ablaufzeit zurück. Erstellt keine Rechnung und ändert keine Zahlung.
POST /api/v1/training/projects/teacher Authorization: Bearer ai:training POST /api/v1/training/projects/teacher mit provider, reference_model_id, action (curriculum oder lessons), objective, optional topic, count (1–4) und höchstens acht approved_examples (je maximal 2.000 Zeichen) senden. Gibt Themen oder Zeilen mit Lektionstext und Thema zurück. Nur freigegebene Trainingsdaten senden, niemals Validierungs- oder Abschlusstestdaten.