Recursos · Contratos de salida

Contratos de salida unificados

Una especificación de contrato para producción que mantiene las respuestas estables entre proveedores de texto, voz, imagen y vídeo.

Contrato de respuesta canónica

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

Principios de diseño

  • Un único envoltorio para todas las modalidades y proveedores.
  • Los nombres de los campos permanecen estables entre versiones de tiempo de ejecución.
  • Los detalles específicos del proveedor se almacenan en los metadatos, no en cambios de la estructura de primer nivel.
  • Las salidas de modalidades ausentes devuelven matrices vacías, no cambios en la estructura.
  • La bandera success es obligatoria para un manejo determinista por parte del cliente.

Referencia de campos

  • success: resultado booleano de la operación.
  • content: salida principal legible por humanos.
  • provider: identificador normalizado del proveedor.
  • usage: objeto de contabilidad normalizado.
  • metadata: diagnósticos y contexto de ejecución.
  • images/files/videos: arreglos de salida por modalidad.
  • error: objeto de error estructurado cuando success=false.

Ejemplos de múltiples proveedores

Respuesta normalizada al estilo OpenAI

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

Respuesta normalizada al estilo 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": []
}

Reglas de compatibilidad del cliente

  • La lógica de renderizado del frontend debe depender de la forma del envoltorio, no de los detalles internos del proveedor.
  • Los clientes deben tolerar claves de metadata desconocidas para compatibilidad hacia adelante.
  • Las matrices vacías son salidas válidas para modalidades no aplicables.
  • El análisis debe preferir comprobaciones explícitas de campos en lugar de ramificaciones por proveedor.

Error Contract

{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid request payload",
    "details": {}
  },
  "provider": "system",
  "metadata": {
    "trace_id": "trc_123"
  }
}
  • Los payloads de error deben incluir un código legible por máquina y un mensaje legible por humanos.
  • Los identificadores de traza deben propagarse para fines de diagnóstico.
  • Las respuestas con success=false nunca deben reutilizar campos exclusivos del payload de éxito.
  • El estado HTTP y el código de error estructurado deben ser coherentes.