Ressourcen · Ausgabeverträge

Einheitliche Ausgabeverträge

Eine Spezifikation für Produktionsverträge, die Antworten über Text-, Sprach-, Bild- und Videoanbieter hinweg stabil hält.

Kanonischer Antwortvertrag

{
  "success": true,
  "content": "Primary human-readable output",
  "provider": "openai",
  "usage": {
    "input_tokens": 120,
    "output_tokens": 64
  },
  "metadata": {
    "model": "gpt-x",
    "latency_ms": 540,
    "trace_id": "trc_123"
  },
  "images": [],
  "files": [],
  "videos": []
}

Designprinzipien

  • Ein Envelope für alle Modalitäten und Anbieter.
  • Feldnamen bleiben über Laufzeitversionen hinweg stabil.
  • Anbieterspezifische Details gehören in die Metadaten, nicht zu Änderungen der Top-Level-Struktur.
  • Fehlende Modalitätsausgaben liefern leere Arrays zurück, keine Strukturänderungen.
  • Das success-Flag ist für deterministisches Client-Verhalten Pflicht.

Feldreferenz

  • success: boolesches Ergebnis der Operation.
  • content: primäre, für Menschen lesbare Ausgabe.
  • provider: normalisierter Anbieterkennzeichner.
  • usage: normalisiertes Abrechnungsobjekt.
  • metadata: Diagnose- und Ausführungskontext.
  • images/files/videos: Ausgabe-Arrays der Modalitäten.
  • error: strukturiertes Fehlerobjekt, wenn success=false.

Beispiele für mehrere Anbieter

Im OpenAI-Stil normalisierte Antwort

{
  "success": true,
  "content": "Generated response",
  "provider": "openai",
  "usage": { "input_tokens": 90, "output_tokens": 52 },
  "metadata": { "latency_ms": 480 },
  "images": [],
  "files": [],
  "videos": []
}

Im Replicate-Stil normalisierte Antwort

{
  "success": true,
  "content": "Image generation completed",
  "provider": "replicate",
  "usage": { "input_tokens": 0, "output_tokens": 0 },
  "metadata": { "duration_ms": 2300 },
  "images": [{ "url": "https://..." }],
  "files": [],
  "videos": []
}

Client-Kompatibilitätsregeln

  • Die Rendering-Logik des Frontends sollte von der Envelope-Form abhängen, nicht von den Interna der Anbieter.
  • Clients müssen unbekannte Metadaten-Schlüssel für Vorwärtskompatibilität tolerieren.
  • Leere Arrays sind gültige Ausgaben für nicht anwendbare Modalitäten.
  • Das Parsen sollte explizite Feldprüfungen gegenüber Anbieter-Verzweigungen bevorzugen.

Error Contract

{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid request payload",
    "details": {}
  },
  "provider": "system",
  "metadata": {
    "trace_id": "trc_123"
  }
}
  • Fehler-Payloads müssen einen maschinenlesbaren Code und eine für Menschen lesbare Nachricht enthalten.
  • Trace-Identifikatoren sollten für die Diagnose weitergegeben werden.
  • Antworten mit success=false dürfen niemals Felder wiederverwenden, die ausschließlich in Erfolgspayloads verwendet werden.
  • HTTP-Status und strukturierter Fehlercode müssen konsistent bleiben.