iachat/scripts/captain_codex_poc/README.md
Rodribm10 df56ee8115 chore(captain): PoC Codex OAuth device flow + Responses streaming
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>
2026-04-22 14:56:57 -03:00

2.2 KiB

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

  1. Assinatura ChatGPT Plus ativa na conta borbamachadoo@gmail.com
  2. 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_calls com function.name e function.arguments corretos

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 flow
  • test_chat.rb — smoke test /chat/completions
  • test_tools.rb — function calling
  • test_jasmine_like.rb — qualidade conversacional
  • tokens.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.