Recursos · Contratos de Saída
Contratos de Saída Unificados
Uma especificação de contrato para produção que garante respostas estáveis entre provedores de texto, voz, imagem e vídeo.
Contrato de Resposta Canônico
{
"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": []
}Princípios de Design
- Um único envelope para todas as modalidades e provedores.
- Nomes de campo permanecem estáveis entre versões em tempo de execução.
- Detalhes específicos do provedor devem ficar nos metadados, sem alterar a estrutura de nível superior.
- Saídas ausentes de uma modalidade retornam arrays vazios, não mudanças na estrutura.
- O campo success é obrigatório para um tratamento determinístico pelo cliente.
Referência de Campos
- success: resultado booleano da operação.
- content: saída principal legível por humanos.
- provider: identificador normalizado do provider.
- usage: objeto de contabilização normalizado.
- metadata: diagnósticos e contexto de execução.
- images/files/videos: arrays de saída por modalidade.
- error: objeto de erro estruturado quando success=false.
Exemplos com Múltiplos Provedores
Resposta normalizada no estilo OpenAI
{
"success": true,
"content": "Generated response",
"provider": "openai",
"usage": { "input_tokens": 90, "output_tokens": 52 },
"metadata": { "latency_ms": 480 },
"images": [],
"files": [],
"videos": []
}Resposta normalizada no 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": []
}Regras de Compatibilidade do Cliente
- A lógica de renderização do frontend deve depender da forma do envelope, não dos detalhes internos do provider.
- Os clientes devem tolerar chaves de metadata desconhecidas para garantir compatibilidade futura.
- Arrays vazios são saídas válidas para modalidades não aplicáveis.
- O parsing deve privilegiar verificações explícitas de campos em vez de ramificações por provider.
Error Contract
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid request payload",
"details": {}
},
"provider": "system",
"metadata": {
"trace_id": "trc_123"
}
}- Os payloads de erro devem incluir um código legível por máquina e uma mensagem legível por humanos.
- Identificadores de rastreamento devem ser propagados para diagnóstico.
- Respostas com success=false nunca devem reutilizar campos exclusivos de payloads de sucesso.
- O status HTTP e o código de erro estruturado devem permanecer consistentes.
