Risorse · Contratti di output

Contratti di output unificati

Una specifica di contratto per la produzione che mantiene le risposte stabili tra provider di testo, voce, immagine e video.

Contratto di risposta canonico

{
  "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": []
}

Principi di progettazione

  • Un unico involucro per tutte le modalità e i provider.
  • I nomi dei campi rimangono stabili tra le versioni di runtime.
  • I dettagli specifici del provider risiedono nei metadata, non in variazioni della struttura a livello superiore.
  • Le uscite per modalità mancanti ritornano array vuoti, non cambiamenti nella struttura.
  • Il flag success è obbligatorio per una gestione deterministica lato client.

Riferimento dei campi

  • success: risultato booleano dell'operazione.
  • content: output principale leggibile dall'uomo.
  • provider: identificatore normalizzato del provider.
  • usage: oggetto di rendicontazione normalizzato.
  • metadata: diagnostica e contesto di esecuzione.
  • images/files/videos: array di output per la modalità.
  • error: oggetto di errore strutturato quando success=false.

Esempi per più provider

Risposta normalizzata in stile OpenAI

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

Risposta normalizzata in stile Replicate

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

Regole di compatibilità per i client

  • La logica di rendering del frontend dovrebbe dipendere dalla forma dell'involucro, non dagli interni del provider.
  • I client devono tollerare chiavi metadata sconosciute per la compatibilità futura.
  • Gli array vuoti sono output validi per modalità non applicabili.
  • Il parsing dovrebbe preferire controlli espliciti sui campi rispetto a ramificazioni specifiche del provider.

Error Contract

{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid request payload",
    "details": {}
  },
  "provider": "system",
  "metadata": {
    "trace_id": "trc_123"
  }
}
  • I payload di errore devono includere un codice leggibile dalla macchina e un messaggio leggibile dall'uomo.
  • Gli identificatori di tracciamento dovrebbero essere propagati per la diagnostica.
  • Le risposte success=false non devono mai riutilizzare i campi presenti solo nei payload di successo.
  • Lo stato HTTP e il codice di errore strutturato devono rimanere coerenti.