Documentação
Oh My Pi
O Oh My Pi mantém seus provedores em um único arquivo YAML. Três linhas sob um nome escolhido por você — baseUrl, api, apiKey — e o omp encaminha solicitações ao Claude e ao GPT usando uma única chave; a lista de modelos é obtida automaticamente, em vez de ser digitada.
Um bloco de provedor em ~/.omp/agent/models.yml — baseUrl, api, apiKey — aponta o Oh My Pi para a Kunavo, e a descoberta preenche a lista de modelos a partir de GET /v1/models.
providers:
kunavo:
baseUrl: https://api.kunavo.com/v1
api: openai-completions
apiKey: KUNAVO_API_KEY # an env-var name; literal text also works
discovery:
type: openai-models-list # reads GET /v1/models
# Prefer a fixed list to a discovered one? Drop the discovery block and
# declare ids instead. Omitted metadata defaults to a 128,000-token context
# window and a 16,384-token output limit, so set the real numbers from
# /models when they differ.
#
# models:
# - id: claude-sonnet-5
# name: Claude Sonnet 5
# contextWindow: ...
# maxTokens: .../v1. O omp documenta baseUrl como "raiz do endpoint" e openai-completions como "Conclusões de chat compatíveis com OpenAI", e sua própria orientação para erros 404 diz: "URLs base genéricas compatíveis com OpenAI geralmente terminam em /v1". Todos os exemplos de provedores personalizados nas duas páginas terminam da mesma forma. "Geralmente" é a ressalva usada por eles, não uma garantia — mas o Kunavo oferece /v1/chat/completions, então https://api.kunavo.com/v1 é a raiz que leva até ele. Isso é o oposto dos clientes no estilo Anthropic, que precisam da origem sem caminho.authHeader de fora neste caso. O omp documenta esse recurso para um gateway que "precisa especificamente que Authorization: Bearer seja inserido como um cabeçalho comum" e observa que "os clientes de provedores padrão já aplicam seu método normal de autenticação" — o que o cliente compatível com OpenAI faz, e o Kunavo aceita. Adicione-o apenas se você vir um erro 401 que o curl abaixo não reproduza.curl abaixo é a parte que você pode verificar em dez segundos; o restante depende de você e do omp.sk-kn-) e adicione crédito a partir de $10 — as chamadas são pagas com esse saldo, e chamadas malsucedidas não são cobradas. O painel então abre na configuração de Oh My Pi.Passo a passo
- Crie uma chave em
/app/keyse copie-a — ela é exibida uma única vez. - Exporte-a como
KUNAVO_API_KEYno shell que inicia o omp. O omp primeiro tenta resolverapiKeycomo nome de variável de ambiente e, se não encontrar, trata o texto como a chave literal. Portanto, um erro de digitação no nome da variável passa despercebido e só causa uma falha na primeira solicitação. Um valor que começa com!é executado como comando de shell — esse é o método no estilo 1Password. - Coloque o bloco acima em
~/.omp/agent/models.yml. O id do provedor —kunavoneste caso — fica a seu critério e será a primeira parte de cada seletor. - Execute
omp models kunavopara carregar o arquivo e listar apenas este provedor. Um problema de YAML ou de esquema exibirámodels.yml validation failede o campo que falhou;omp models refresh kunavoforça uma nova chamada de descoberta, em vez de usar o catálogo em cache. - Teste com um seletor exato:
omp -p --model kunavo/claude-sonnet-5 "Reply with only OK". Em seguida, inicieomp, digite/modele atribua o id desejado a Padrão — o hub de modelos recarregamodels.ymlao ser aberto./switchaltera apenas a sessão atual.
Verificado em Página de provedores do omp em 21 de setembro de 2026. As configurações de terceiros podem mudar; se o nome de um campo aqui já não corresponder ao que você vê, aquela página é a autoridade, não esta.
Verifique antes de depurar o cliente
Uma solicitação determina se a falha está no endpoint, na chave ou no arquivo de configuração. Se isto retornar JSON, a mesma URL base e a mesma chave funcionarão em Oh My Pi.
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."Qual ID de modelo inserir no campo
Todo modelo de texto pode ser acessado como um ID de modelo — a lista atual está em GET /v1/models, e o catálogo com preços está na página de modelos. As tarifas são em USD por 1 milhão de tokens, entrada / saída.
| ID do modelo | Entrada / saída da Kunavo | Onde se encaixa em Oh My Pi |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | a função padrão — o modelo que realmente é executado na maioria das sessões |
claude-opus-5 | $3.50 / $17.50 | a função de planejamento, em que um plano incorreto custa mais do que os tokens |
claude-haiku-4-5 | $0.70 / $3.50 | a função smol: triagem, resumos e as chamadas que não param |
gpt-5-6-sol | $2.00 / $12.00 | uma segunda opinião de outra família, no mesmo bloco de provedor |
Descoberta: qual tipo escolher e o que aparece no seletor
O omp oferece seis valores discovery.type, e dois parecem adequados para um gateway. Apenas um é. proxy está documentado para "um proxy misto de OpenAI/Anthropic cujas linhas de modelos anunciam supported_endpoint_types" e deriva o protocolo de cada modelo desse campo. O GET /v1/models do Kunavo não o publica; portanto, com proxy, todas as linhas usariam o api do provedor — ou, se nenhum estiver definido, seriam descartadas. openai-models-list, documentado como um endpoint GET /v1/models genérico compatível com OpenAI, é o tipo a usar. É por isso que o bloco acima mantém api: openai-completions: a regra do omp é que "exceto para proxy, a descoberta exige um api no nível do provedor".
Uma consequência que vale conhecer antes de abrir o seletor. A lista de modelos do Kunavo contém todo o catálogo ativado, então um provedor descoberto exibe ids de imagem, vídeo e música junto com os de chat, e o transporte de chat não consegue chamar esses modelos. O Kunavo publica context_length nas linhas de chat — o campo que a descoberta genérica do omp consulta após max_model_len, segundo a documentação de modelos —, mas o omite nas linhas de mídia; por isso, elas aparecem com o padrão do omp de 128,000 tokens, em vez de um número real. Se quiser um seletor curto e correto, remova o bloco de descoberta e declare os três ou quatro ids que realmente usa.
O omp também consegue usar anthropic-messages, e o Kunavo responde a /v1/messages. Esta página não apresenta um bloco de configuração para essa combinação: as duas páginas citadas aqui esclarecem o formato da URL base para a rota compatível com OpenAI e não dizem nada sobre como um /v1 final é tratado na rota Anthropic; além disso, a finalidade de um bloco de configuração é permitir que o leitor o copie e cole. Se você seguir esse caminho, disableStrictTools: true é a recomendação documentada para chamadas de ferramenta que falham com erro 400 em um endpoint compatível com Anthropic.
Perguntas frequentes
Como adiciono um provedor de API personalizado ao Oh My Pi?
Tudo acontece em ~/.omp/agent/models.yml. Adicione uma chave em `providers:` — o nome fica a seu critério e será a parte do seletor que identifica o provedor — e informe baseUrl, api e apiKey, nesta ordem, como no exemplo "Add a custom provider" do próprio omp. Você pode listar os modelos manualmente em `models:` ou adicionar um bloco `discovery:` para que o omp os busque. Em seguida, execute `omp models <your-provider-id>` para confirmar que o arquivo foi carregado e selecione um modelo com `omp --model <provider>/<model-id>` ou pelo hub /model dentro de uma sessão.
O baseUrl do Oh My Pi precisa terminar com /v1?
Para um endpoint compatível com OpenAI, sim. O omp chama o baseUrl de raiz do endpoint e acrescenta a rota da família de API declarada. Assim, `api: openai-completions` significa que ele solicita conclusões de chat sob a raiz informada. A própria orientação para erros 404 diz que URLs base genéricas compatíveis com OpenAI geralmente terminam em /v1, e todos os exemplos de provedores personalizados na documentação fazem o mesmo. O Kunavo oferece /v1/chat/completions, então a raiz a informar é https://api.kunavo.com/v1 — se faltar /v1, haverá um erro 404 ou "endpoint não compatível", e não um erro de autenticação.
Onde o Oh My Pi procura a chave de API e qual opção tem prioridade?
Uma apiKey em models.yml é resolvida em três etapas: um valor que começa com ! é executado como comando de shell e sua saída padrão sem espaços extras é usada; caso contrário, o omp procura uma variável de ambiente com exatamente esse nome e, se ela não existir, trata o próprio texto como a chave. Essa última opção é a armadilha — um nome de variável digitado incorretamente é carregado sem aviso e só causa uma falha na primeira solicitação. Na ordem geral de prioridade, uma chave em models.yml tem precedência sobre o OAuth armazenado, algo que o omp documenta como intencional. Portanto, uma chave fornecida para um gateway não será substituída por um login de provedor upstream.
Qual tipo de descoberta um gateway deve usar no omp?
openai-models-list, e não proxy, a menos que o gateway anuncie supported_endpoint_types em cada linha de modelo — esse campo é o que o proxy consulta para decidir se um modelo deve ser encaminhado para /v1/messages ou /v1/chat/completions. Sem ele, os modelos usam a api do provedor ou são descartados. O /v1/models do Kunavo não publica esse campo, então a lista genérica da OpenAI é o tipo correto; além disso, o omp exige uma api no nível do provedor para todo tipo de descoberta, exceto proxy. Execute `omp models refresh <provider>` para buscar os dados novamente, em vez de usar o catálogo em cache.
O Kunavo testou o Oh My Pi em seu endpoint?
Não. O que foi verificado, em 21 de setembro de 2026, foi a documentação do próprio omp — os nomes e a ordem dos campos, a regra de resolução da chave e os tipos de descoberta foram consultados nela, e dois detalhes foram verificados na própria rota /v1/models do Kunavo, em vez de serem presumidos. Nenhuma sessão do omp foi executada em api.kunavo.com neste contexto, e não há nenhuma afirmação sobre transmissão em fluxo contínuo, interações de ida e volta com ferramentas ou encaminhamento de modelos dentro do cliente. A única coisa que pode ser verificada separadamente é se o endpoint e a chave funcionam, usando o curl nesta página.