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

66 lines
2.2 KiB
Markdown

# 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)
```bash
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
```bash
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
```bash
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)
```bash
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.