gpt
Cliente Ruby simples para a Responses API, com foco no GPT-5, com uma API de alto nível inspirada no OpenAIExt.
Instalação
bash build_and_install.sh
Configuração
- Defina
OPENAI_API_KEYouOPENAI_ACCESS_TOKENno ambiente. - Opcional:
OPENAI_ORG_IDouOPENAI_ORGANIZATION_ID,OPENAI_PROJECT_ID. - Opcional:
OPENAI_REQUEST_TIMEOUT(segundos, padrão 120).
Uso básico (GPT-5)
require 'gpt'
res = GPT.ask('Diga olá em uma frase.', model: 'gpt-5')
puts res.content
Reasoning mínimo (minimal)
res = GPT.responses.create({
'model' => 'gpt-5',
'input' => 'Quanto ouro seria necessário para cobrir a Estátua da Liberdade com 1mm?',
'reasoning' => { 'effort' => 'minimal' }
})
Verbosidade baixa
res = GPT.responses.create({
'model' => 'gpt-5',
'input' => 'Qual é a resposta para a vida, o universo e tudo mais?',
'text' => { 'verbosity' => 'low' }
})
Ferramentas personalizadas (custom tools)
res = GPT.responses.create({
'model' => 'gpt-5',
'input' => 'Use a ferramenta code_exec para calcular a área de um círculo com raio igual ao número de letras r em blueberry',
'tools' => [
{ 'type' => 'custom', 'name' => 'code_exec', 'description' => 'Executa código Python arbitrário' }
]
})
Restringindo ferramentas (allowed_tools)
res = GPT.responses.create({
'model' => 'gpt-5',
'input' => 'Como está o tempo em São Paulo?',
'tools' => [ { 'type' => 'function', 'name' => 'get_weather' } ],
'tool_choice' => {
'type' => 'allowed_tools',
'mode' => 'auto',
'tools' => [ { 'type' => 'function', 'name' => 'get_weather' } ]
}
})
Passando raciocínio prévio (previous_response_id)
first = GPT.responses.create({
'model' => 'gpt-5',
'input' => 'Planeje passos para resolver X.'
})
followup = GPT.responses.create({
'model' => 'gpt-5',
'input' => 'Agora execute o primeiro passo.',
'previous_response_id' => first['id']
})
Streaming SSE
require 'gpt'
GPT.ask('Conte uma história curta.', model: 'gpt-5', stream: true) { |chunk| print chunk }
# Streaming de texto direto
GPT.ask('Conte uma história curta.', model: 'gpt-5', text_stream: true) { |text| print text }
Outras operações
id = res['id']
GPT.responses.get(id)
GPT.responses.input_items(id)
GPT.responses.cancel(id)
GPT.responses.delete(id)
Helpers de resposta
res = GPT.ask('Qual a capital da França?', model: 'gpt-5')
res.content
res.model
res.total_tokens
res.to_h