PoC validado com conta ChatGPT Plus e client_id do Hermes. Device flow
OAuth funciona, gera access_token + refresh_token auto-refresh. Chat e
function calling funcionaram em gpt-5.4, gpt-5.4-mini, gpt-5.2 e
gpt-5.3-codex.
Descobertas pro adapter final:
- Endpoint: /responses (não /chat/completions)
- Streaming obrigatório (stream: true)
- store: false obrigatório
- Sem temperature/top_p (modelos reasoning)
- input[] no lugar de messages[]
- instructions top-level no lugar de system role
- Tools sem wrapping function: {}
- Output via events response.output_item.done (não response.completed)
Pasta scripts/captain_codex_poc/ está excluída do Rubocop (scripts
standalone, não rodam em contexto Rails).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
32 lines
983 B
Ruby
Executable File
32 lines
983 B
Ruby
Executable File
#!/usr/bin/env ruby
|
|
# Smoke test: /responses com vários modelos via Codex OAuth.
|
|
|
|
require_relative 'codex_client'
|
|
|
|
# Testa modelos na ordem do que o Rodrigo quer (gpt-5.4 primeiro).
|
|
# Inclui gpt-5.3-codex porque é o que o Hermes usa com sucesso.
|
|
MODELS_TO_TRY = %w[gpt-5.4 gpt-5.4-mini gpt-5.2 gpt-5.3-codex].freeze
|
|
|
|
client = CodexPoc::Client.new
|
|
|
|
MODELS_TO_TRY.each do |model|
|
|
puts "=== Testando modelo: #{model} ==="
|
|
begin
|
|
resp = client.responses(
|
|
model: model,
|
|
system_prompt: 'Você é um recepcionista dos Hoteis 1001 Noites. Responda em português do Brasil, de forma breve e direta.',
|
|
user_messages: 'Oi, boa tarde. Queria saber se tem diária disponível para esse fim de semana.'
|
|
)
|
|
|
|
out = CodexPoc::Client.extract(resp)
|
|
puts "Resposta: #{out[:text]}"
|
|
puts "Usage: #{resp['usage']}"
|
|
puts
|
|
rescue CodexPoc::Error => e
|
|
warn "FALHOU para #{model}: #{e.message[0, 300]}"
|
|
puts
|
|
end
|
|
end
|
|
|
|
puts '=== Fim do teste de chat ==='
|