feat: add OpenAI Responses API support (POST /v1/responses)
CI / Lint (push) Has been cancelled
CI / Test (push) Has been cancelled
CI / Build (push) Has been cancelled

Add full Responses API endpoint alongside existing Chat Completions,
with identical logging/tracking/cost pipeline.

New:
- internal/models/responses.go — request/response/stream types + ToUsage() bridge
- internal/providers/openai_responses.go — OpenAI Responses/ResponsesStream

Modified:
- provider.go — Responses()+ResponsesStream() added to Provider interface
- helpers.go — BuildOpenAIResponsesBody, parsers, SSE stream reader
- circuit_breaker.go — CB wraps Responses, passthrough for stream
- server.go — POST /v1/responses route + handleResponses handler
- all non-OpenAI providers — stub methods with clear error messages

Logging: ResponsesUsage.ToUsage() bridges to models.Usage, feeding same
logRequest() -> DB insert -> dashboard WS -> client stats -> cost calc
pipeline. No schema or logger changes needed.
This commit is contained in:
2026-05-02 16:38:17 -04:00
parent eb67287b56
commit e5ef39f327
11 changed files with 507 additions and 4 deletions
+15
View File
@@ -64,3 +64,18 @@ func (cbp *CircuitBreakerProvider) ImageGeneration(ctx context.Context, req *mod
}
return result.(*models.ImageGenerationResponse), nil
}
func (cbp *CircuitBreakerProvider) Responses(ctx context.Context, req *models.ResponsesRequest) (*models.ResponsesResponse, error) {
result, err := cbp.cb.Execute(func() (interface{}, error) {
return cbp.provider.Responses(ctx, req)
})
if err != nil {
return nil, err
}
return result.(*models.ResponsesResponse), nil
}
func (cbp *CircuitBreakerProvider) ResponsesStream(ctx context.Context, req *models.ResponsesRequest) (<-chan *models.ResponsesStreamChunk, error) {
// Circuit breaker passthrough for streaming (same pattern as ChatCompletionStream)
return cbp.provider.ResponsesStream(ctx, req)
}