Class: Ask::Providers::OpenaiCodex
- Defined in:
- lib/ask/provider/openai_codex.rb
Overview
OpenAI Codex — requests routed through a ChatGPT subscription via OAuth (the access token + account id come from ask-auth's OpenaiCodex provider, passed explicitly by the host app: api_key / account_id).
Always speaks the Responses API at chatgpt.com/backend-api/codex/responses, and streams the Responses SSE event shape (response.output_text.delta, function_call item events, response.completed) — the chat/completions parsing in the base class doesn't apply here.
Constant Summary collapse
- API_BASE =
"https://chatgpt.com/backend-api/codex"- SLUG =
"openai_codex"
Class Method Summary collapse
Instance Method Summary collapse
- #api_base ⇒ Object
- #chat(messages, model:, tools: nil, temperature: nil, stream: nil, schema: nil, **params, &block) ⇒ Object
- #headers ⇒ Object
Methods inherited from OpenAI
#build_request, capabilities, configuration_options, configuration_requirements, #embed, #extract_responses_provider_results, #extract_responses_tool_calls, #format_message, #format_responses_content_block, #format_responses_input, #format_responses_tools, #format_tools, #initialize, #list_models, #parse_error, #parse_response, #parse_stream, #responses_chat, #responses_chat_nonstream, #responses_chat_stream, #split_tools
Methods included from LLM::ProviderConfig
#build_request, #format_message, #format_tools, #parse_response, #parse_stream
Methods included from LLM::SSEBuffer
#each_sse_event, #init_sse_buffer
Constructor Details
This class inherits a constructor from Ask::Providers::OpenAI
Class Method Details
.slug ⇒ Object
21 22 23 |
# File 'lib/ask/provider/openai_codex.rb', line 21 def self.slug SLUG end |
Instance Method Details
#api_base ⇒ Object
25 26 27 |
# File 'lib/ask/provider/openai_codex.rb', line 25 def api_base @config.base_url || API_BASE end |
#chat(messages, model:, tools: nil, temperature: nil, stream: nil, schema: nil, **params, &block) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/ask/provider/openai_codex.rb', line 35 def chat(, model:, tools: nil, temperature: nil, stream: nil, schema: nil, **params, &block) msgs = .is_a?(Ask::Conversation) ? .to_a : regular_tools, = split_tools(tools) payload = { model: model, input: format_responses_input(msgs) } payload[:tools] = format_tools(regular_tools) if regular_tools&.any? payload[:temperature] = temperature if temperature payload.merge!(params) if stream codex_stream(payload, model, &block) else responses_chat_nonstream(payload, model, []) end end |
#headers ⇒ Object
29 30 31 32 33 |
# File 'lib/ask/provider/openai_codex.rb', line 29 def headers super.tap do |h| h["ChatGPT-Account-Id"] = @config.account_id if @config.account_id end end |