diff options
Diffstat (limited to 'libpanto/src/config.zig')
| -rw-r--r-- | libpanto/src/config.zig | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/libpanto/src/config.zig b/libpanto/src/config.zig index 09aaec8..c48cefc 100644 --- a/libpanto/src/config.zig +++ b/libpanto/src/config.zig @@ -24,6 +24,9 @@ const Io = std.Io; pub const APIStyle = enum { openai_chat, anthropic_messages, + /// OpenAI Responses API (`/responses`). Used by the ChatGPT-subscription + /// Codex backend, whose request/stream shape differs from Chat Completions. + openai_responses, }; /// A single HTTP request header (name/value). Used for provider @@ -133,10 +136,25 @@ pub const AnthropicMessagesConfig = struct { extra_headers: []const Header = &.{}, }; +/// OpenAI Responses API config. Same transport knobs as `openai_chat`, but a +/// distinct request body (`input` items, `reasoning`, `store`, `include`) and +/// streaming event shape. Auth-derived headers (`chatgpt-account-id`) and the +/// static Codex identity headers (`OpenAI-Beta`, `originator`) ride on +/// `extra_headers`. +pub const OpenAIResponsesConfig = struct { + api_key: []const u8, + base_url: []const u8, + model: []const u8, + reasoning: ReasoningEffort = .default, + max_tokens: u32 = 64_000, + extra_headers: []const Header = &.{}, +}; + /// Per-provider transport/auth/model configuration. Tagged by `APIStyle`. pub const ProviderConfig = union(APIStyle) { openai_chat: OpenAIChatConfig, anthropic_messages: AnthropicMessagesConfig, + openai_responses: OpenAIResponsesConfig, pub fn style(self: ProviderConfig) APIStyle { return @as(APIStyle, self); @@ -163,6 +181,12 @@ pub const ProviderConfig = union(APIStyle) { .thinking_budget_tokens = c.thinking_budget_tokens, .thinking_interleaved = c.thinking_interleaved, }, + .openai_responses => |c| .{ + .api_style = .openai_responses, + .base_url = c.base_url, + .model = c.model, + .reasoning = c.reasoning, + }, }; } }; |
