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>
|
||
|---|---|---|
| .. | ||
| .gitignore | ||
| codex_client.rb | ||
| login.rb | ||
| README.md | ||
| test_chat.rb | ||
| test_debug.rb | ||
| test_jasmine_like.rb | ||
| test_tools.rb | ||
Captain Codex OAuth PoC
Proof-of-concept para validar se a assinatura do ChatGPT Plus pode ser usada no Captain AI via OAuth device flow, reutilizando o client_id do Hermes.
Pré-requisitos
- Assinatura ChatGPT Plus ativa na conta
borbamachadoo@gmail.com - Ruby 3.x instalado (não precisa do bundle do Chatwoot — só stdlib)
Passos
1) Login (device flow)
ruby scripts/captain_codex_poc/login.rb
- Vai imprimir uma URL + um código
- Abra a URL no browser, faça login com
borbamachadoo@gmail.com, cole o código - Script detecta a autorização e salva tokens em
scripts/captain_codex_poc/tokens.json
2) Teste de chat simples
ruby scripts/captain_codex_poc/test_chat.rb
Faz uma chamada simples POST /chat/completions com gpt-5.4 e imprime a resposta.
Critério de sucesso: resposta HTTP 200 com conteúdo coerente em português.
3) Teste de function calling
ruby scripts/captain_codex_poc/test_tools.rb
Faz chamada com uma tool gerar_pix simulada e verifica se o modelo:
- Reconhece que precisa chamar a tool
- Retorna
tool_callscomfunction.nameefunction.argumentscorretos
Critério de sucesso: tool_calls não-nulo e JSON de argumentos válido.
Critério de go/no-go do projeto Codex OAuth: se este teste falhar (modelo não suporta function calling via endpoint Codex), abortamos a implementação. Os tools do Captain (Pix, reservas, labels) são pré-requisito não-negociável.
4) Comparação de qualidade (manual)
ruby scripts/captain_codex_poc/test_jasmine_like.rb
Simula uma conversa estilo Jasmine — cliente pedindo reserva. Compare subjetivamente a resposta com o que a Jasmine faz hoje em produção com gpt-4o.
Arquivos
login.rb— device flowtest_chat.rb— smoke test /chat/completionstest_tools.rb— function callingtest_jasmine_like.rb— qualidade conversacionaltokens.json— access_token + refresh_token (git-ignored)codex_client.rb— helper compartilhado (refresh + HTTP)
Segurança
O arquivo tokens.json contém credenciais OAuth reais e NUNCA deve ser commitado. Já está no .gitignore desta pasta.