Pular para o conteúdo
Testar o chatObter chave de API

A Bayle como backend de agentes

A maioria dos frameworks de agentes e assistentes conversa com um endpoint de chat completions compatível com a OpenAI. A Bayle é um deles, então um agente que deixa você configurar um provedor próprio roda na Bayle com três valores:

Configuração Valor
Base URL https://api.bayle.ai
API key Sua key da Bayle, lida de BAYLE_API_KEY
Modelo Um id de modelo de GET /models
Copia as instruções de configuração desta página, para colar no seu agente de código.
Ver o prompt
Me ajude a configurar isto para usar a Bayle AI, uma API compatível com a OpenAI. Guia completo: https://docs.bayle.ai/pt-br/guides/agents/ai-agents/

Objetivo: fazer o meu agente de IA (ou framework de agentes) usar a Bayle como provedor de chat completions compatível com a OpenAI.

1. Descubra onde o meu agente aceita um provedor próprio: uma tela de configurações, um arquivo de configuração ou o construtor de um cliente. Se não der para saber qual é o agente pelo projeto, me pergunte.
2. Defina estes três valores:
   Base URL: https://api.bayle.ai
   API key: o valor de BAYLE_API_KEY, pela configuração de variável de ambiente do próprio agente, quando ele tiver uma
   Modelo: MODEL_ID
   A Bayle serve só chat completions, embeddings, imagens e vídeo. Desligue qualquer recurso do agente que dependa da Responses API, da Assistants API ou de upload de arquivos.
3. Escolha um modelo com suporte a function calling:
   curl -s "https://api.bayle.ai/models?type=text" \
     | jq -r '.data[] | select(.model_spec.capabilities.supportsFunctionCalling) | .id'
   Me mostre a lista, deixe eu escolher e use esse id como MODEL_ID. Se o agente lida com conteúdo sensível, mostre também o model_spec.privacy de cada modelo.
4. Se o loop do agente for código meu: use stream: true nas respostas longas, repita 429, 503 e 504 com backoff e pare em 402 usd_spend_limit_exceeded em vez de tentar de novo.
5. Verifique com uma requisição real:
   curl -s https://api.bayle.ai/chat/completions \
     -H "Authorization: Bearer $BAYLE_API_KEY" \
     -H "Content-Type: application/json" \
     -d '{"model":"MODEL_ID","messages":[{"role":"user","content":"Responda apenas a palavra pronto."}]}'
   Depois rode um prompt curto pelo próprio agente.

Regras:
1. A base URL é https://api.bayle.ai exatamente como está escrita. Não acrescente nenhum caminho a ela.
2. Leia a key da variável de ambiente BAYLE_API_KEY. Nunca escreva a key em um arquivo que você criar, em um comando, em um commit nem no chat. Onde a ferramenta guarda a key na própria tela de configurações, me diga onde colar. Se BAYLE_API_KEY não estiver definida, pare e peça que eu crie uma key em https://chat.bayle.ai/developers e a exporte.
3. Pegue os ids de modelo só de GET https://api.bayle.ai/models (sem key). Nunca chute um.
4. Termine com uma requisição de teste de verdade, me mostre o resultado e liste os arquivos que você alterou.
Ainda não tem uma chave da Bayle?Obter chave de API

Um agente precisa de um modelo com suporte a function calling. GET /models não exige key, e o model_spec.capabilities de cada modelo diz o que ele sabe fazer:

Janela do terminal
curl -s "https://api.bayle.ai/models?type=text" \
| jq -r '.data[] | select(.model_spec.capabilities.supportsFunctionCalling) | .id'

O mesmo objeto traz supportsReasoning, supportsVision e optimizedForCode, que valem a pena conferir para um agente de código ou multimodal. Se o seu agente lida com conteúdo sensível, confira também model_spec.privacy; veja Privacidade.

Mande tools do jeito da OpenAI. Quando o modelo quer chamar uma ferramenta, o finish_reason é tool_calls e as chamadas vêm em message.tool_calls.

import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["BAYLE_API_KEY"], base_url="https://api.bayle.ai")
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the weather for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
response = client.chat.completions.create(
model="MODEL_ID",
messages=[{"role": "user", "content": "What's the weather in Recife?"}],
tools=tools,
)
call = response.choices[0].message.tool_calls[0]
print(call.function.name, call.function.arguments)

Execute a ferramenta, adicione o resultado como uma mensagem tool com o tool_call_id correspondente e chame de novo. Geração de texto mostra o ciclo completo.

Use stream: true para receber os tokens conforme são gerados. Agentes que mostram progresso, ou que rodam tarefas longas, devem usar streaming: uma completion sem streaming precisa terminar em 30 segundos, enquanto um stream não tem prazo próprio da Bayle.

stream = client.chat.completions.create(
model="MODEL_ID",
messages=[{"role": "user", "content": "Plan a three-step refactor."}],
stream=True,
)
for chunk in stream:
if chunk.choices:
print(chunk.choices[0].delta.content or "", end="", flush=True)

Se um stream falhar no meio, o último evento é um envelope de erro seguido de [DONE]. Os SDKs da OpenAI lançam uma exceção nesse caso; um parser escrito à mão deve verificar se cada evento tem a chave error. Veja Como a Bayle funciona.

  • Retentativas. A Bayle nunca repete uma chat completion por você, porque uma repetição poderia ser cobrada duas vezes. Repita 429, 503 e 504 no seu agente, com backoff; veja Erros.
  • Saldo. Quando a key fica sem saldo, as requisições falham com 402 usd_spend_limit_exceeded. O loop do agente deve parar aí, não tentar de novo.
  • Campos desconhecidos. Parâmetros que a Bayle não nomeia são repassados ao modelo como foram enviados, então opções específicas de cada framework em geral chegam até ele.
  • Endpoints. Só chat completions, embeddings, imagens e vídeo são servidos. Um recurso de agente que dependa da Responses API, da Assistants API ou de upload de arquivos não vai funcionar.