Documentación

Documentación

Oh My Pi

Oh My Pi guarda sus proveedores en un solo archivo YAML. Tres líneas bajo el nombre que elijas —baseUrl, api, apiKey— y omp enruta solicitudes a Claude y GPT mediante una sola clave, mientras obtiene la lista de modelos automáticamente.

Un bloque de proveedor en ~/.omp/agent/models.yml — baseUrl, api, apiKey — dirige Oh My Pi a Kunavo y el descubrimiento completa la lista de modelos mediante GET /v1/models.

~/.omp/agent/models.yml
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: ...
La URL base conserva el sufijo /v1. omp documenta baseUrl como la «raíz del endpoint» y openai-completions como «completaciones de chat compatibles con OpenAI». Además, su entrada de solución de problemas para los errores 404 dice: «Las URL base genéricas compatibles con OpenAI suelen terminar en /v1». Todos los ejemplos de proveedores personalizados de ambas páginas terminan de la misma manera. «Suelen» es una salvedad, no una garantía, pero Kunavo sirve /v1/chat/completions, así que https://api.kunavo.com/v1 es la raíz que lo genera. Esto es lo contrario de lo que requieren los clientes de estilo Anthropic, que usan el origen sin más.
En esta ruta, omite authHeader. omp documenta que sirve para una pasarela que «necesita específicamente que se inyecte Authorization: Bearer como encabezado ordinario» y señala que «los clientes de proveedores estándar ya aplican su esquema de autenticación habitual». El cliente compatible con OpenAI lo hace, y Kunavo lo acepta. Añádelo solo si ves un 401 que no se reproduzca con el curl de abajo.
Esta configuración se consultó en la documentación del propio omp en la fecha indicada más abajo. Kunavo no ha ejecutado omp contra su endpoint: ni una sesión, ni un turno transmitido en flujo, ni un intercambio con herramientas, ni una comprobación de enrutamiento. Una página de configuración publicada no es una prueba, y nada de lo que aparece aquí debe interpretarse como tal. El curl de abajo es lo que puedes comprobar en diez segundos; lo demás depende de ti y de omp.
Kunavo no ofrece modelos de embeddings, de texto a voz ni de voz a texto, así que este proveedor solo responde a consultas de chat. Cualquier elemento de tu configuración que transcriba audio o cree un índice vectorial conserva la clave de proveedor que ya tenga.
¿Aún no tienes una clave? Crea una cuenta de Kunavo, genera una clave (empieza por sk-kn-) y añade crédito desde $10; las llamadas se pagan con ese saldo y las llamadas fallidas no se facturan. El panel se abre entonces en la configuración de Oh My Pi.

Paso a paso

  1. Cree una clave en /app/keys y cópiela: se muestra una sola vez.
  2. Expórtala como KUNAVO_API_KEY en el shell desde el que inicies omp. omp interpreta primero apiKey como el nombre de una variable de entorno y, si no existe, trata el texto como la clave literal; por eso, un error tipográfico en el nombre de la variable pasa inadvertido y falla en la primera solicitud. En cambio, un valor que empieza por ! se ejecuta como un comando del shell: esa es la opción al estilo de 1Password.
  3. Pon el bloque anterior en ~/.omp/agent/models.yml. El id del proveedor, kunavo en este caso, lo eliges tú y será la primera parte de cada selector.
  4. Ejecuta omp models kunavo para cargar el archivo y mostrar solo este proveedor. Si hay un problema con YAML o con el esquema, aparecerá models.yml validation failed junto con el campo que falló; omp models refresh kunavo fuerza una nueva solicitud de detección en vez de usar el catálogo en caché.
  5. Pruébalo con un selector exacto: omp -p --model kunavo/claude-sonnet-5 "Reply with only OK". Luego inicia omp, escribe /model y asigna el id que quieras a Default: el centro de modelos vuelve a cargarse con models.yml al abrirse. /switch solo cambia la sesión actual.

Comprobado con Página de proveedores de omp el 21 de septiembre de 2026. La configuración de terceros puede cambiar; si el nombre de un campo ya no coincide con lo que ves, esa página es la autoridad, no esta.

Esta es la versión breve. El tutorial completo —elección del modelo, coste de una sesión real y modos de fallo— está en la comparación entre Oh My Pi y OpenCode.

Verifica antes de depurar el cliente

Una solicitud determina si el fallo está en el endpoint, la clave o el archivo de configuración. Si devuelve JSON, la misma URL base y la misma clave funcionan en 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-..."

Qué ID de modelo introducir en el campo

Todos los modelos de texto están disponibles mediante un ID de modelo; la lista activa está en GET /v1/models, y el catálogo con precios está en la página de modelos. Las tarifas son USD por 1M de tokens, entrada / salida.

ID de modeloEntrada / salida de KunavoDónde encaja en Oh My Pi
claude-sonnet-5$1.40 / $7.00el rol predeterminado: el modelo que realmente se ejecuta en la mayoría de las sesiones
claude-opus-5$3.50 / $17.50el rol de planificación, donde un plan equivocado cuesta más que los tokens
claude-haiku-4-5$0.70 / $3.50el rol smol: triaje, resúmenes y las llamadas que no dejan de llegar
gpt-5-6-sol$2.00 / $12.00una segunda opinión de otra familia, con el mismo bloque de proveedor
La facturación es por token desde un saldo prepago, sin cuota mensual; consulta facturación. Con contexto repetido —que constituye la mayor parte de lo que envía un editor o cliente de chat—, la caché de indicaciones cambia más la factura que la elección del modelo.

Detección: qué tipo elegir y qué aparece en el selector

omp ofrece seis valores para discovery.type y dos parecen adecuados para una pasarela. Solo uno lo es. proxy está documentado para «un proxy mixto de OpenAI y Anthropic cuyas filas de modelos anuncian supported_endpoint_types», y deriva el formato de cada modelo de ese campo. Kunavo no publica ese campo en GET /v1/models, así que con proxy cada fila recurriría al api del proveedor o, si no hay ninguno configurado, se descartaría. openai-models-list, documentado como «un endpoint genérico GET /v1/models compatible con OpenAI», es el tipo que se debe usar. Por eso el bloque anterior conserva api: openai-completions: la regla de omp es que «salvo para proxy, la detección requiere api a nivel de proveedor».

Conviene tener en cuenta una consecuencia antes de abrir el selector. La lista de modelos de Kunavo incluye todo el catálogo habilitado, así que un proveedor detectado muestra ids de imagen, vídeo y música junto a los de chat, aunque el transporte de chat no puede usarlos. Kunavo publica context_length en las filas de chat —el campo que, según la documentación de modelos de omp, su detección genérica lee después de max_model_len—, pero lo omite en las filas multimedia, por lo que estas aparecen con el valor predeterminado de omp de 128,000 tokens en vez de un número real. Si quieres un selector breve y correcto, elimina el bloque de detección y declara los tres o cuatro ids que realmente usas.

omp también puede usar anthropic-messages, y Kunavo responde a /v1/messages. Esta página no incluye un bloque de configuración para esa combinación: las dos páginas citadas aquí establecen el formato de URL base para la ruta compatible con OpenAI, pero no dicen cómo se trata un /v1 final en la ruta compatible con Anthropic, y un bloque de configuración debe poder copiarse y pegarse. Si eliges esa opción,disableStrictTools: true es la respuesta documentada cuando las llamadas a herramientas fallan con un error 400 en un endpoint compatible con Anthropic.

Preguntas frecuentes

¿Cómo añado un proveedor de API personalizado a Oh My Pi?

Todo se configura en ~/.omp/agent/models.yml. Añade una clave bajo `providers:`: el nombre lo eliges tú y será la parte del proveedor en el selector; asígnale baseUrl, api y apiKey, en el mismo orden que aparece en el ejemplo «Add a custom provider» de la documentación de omp. Puedes enumerar los modelos a mano bajo `models:` o añadir un bloque `discovery:` para que omp los obtenga. Luego ejecuta `omp models <your-provider-id>` para confirmar que se cargó el archivo y selecciona un modelo con `omp --model <provider>/<model-id>` o con el centro /model dentro de una sesión.

¿El baseUrl de Oh My Pi debe terminar en /v1?

Sí, para un endpoint compatible con OpenAI. omp llama a baseUrl la raíz del endpoint y añade la ruta correspondiente a la familia de api que declares, así que `api: openai-completions` significa que solicita completaciones de chat bajo la raíz que indiques. Su propia nota de solución de problemas para errores 404 dice que las URL base genéricas compatibles con OpenAI suelen terminar en /v1, y todos los ejemplos de proveedores personalizados de la documentación lo hacen. Kunavo sirve /v1/chat/completions, así que la raíz que debes escribir es https://api.kunavo.com/v1. Si falta /v1, se mostrará un 404 o «unsupported endpoint», no un error de autenticación.

¿Dónde busca Oh My Pi la clave de API y qué valor tiene prioridad?

El valor apiKey en models.yml se resuelve en tres pasos: si empieza por !, se ejecuta como un comando del shell y se usa su salida estándar sin espacios al principio ni al final; de lo contrario, omp busca una variable de entorno con ese nombre exacto y, si no existe, trata el texto en sí como la clave. Esa última alternativa es la trampa: un nombre de variable mal escrito se carga sin avisar y falla en la primera solicitud. En el orden de prioridad general, una clave de models.yml prevalece sobre el OAuth guardado, algo que omp documenta como intencional; por eso, la clave proporcionada para una pasarela no se sustituye por un inicio de sesión con un proveedor externo.

¿Qué tipo de detección debe usar una pasarela en omp?

openai-models-list, no proxy, salvo que la pasarela anuncie supported_endpoint_types en cada fila de modelo. Ese campo es el que proxy consulta para decidir si un modelo debe ir a /v1/messages o a /v1/chat/completions. Sin él, los modelos usan el valor api del proveedor o se descartan. El /v1/models de Kunavo no publica ese campo, así que el tipo correcto es la lista genérica de OpenAI; además, omp exige un valor api a nivel de proveedor para todos los tipos de detección excepto proxy. Ejecuta `omp models refresh <provider>` para forzar una nueva consulta en lugar de usar el catálogo en caché.

¿Kunavo ha probado Oh My Pi contra su endpoint?

No. Lo que se comprobó el 21 de septiembre de 2026 fue la documentación del propio omp: de ahí se citan los nombres y el orden de los campos, la regla de resolución de claves y los tipos de detección. Además, se verificaron dos detalles en la propia ruta /v1/models de Kunavo en lugar de darlos por supuestos. Aquí no se ha ejecutado ninguna sesión de omp contra api.kunavo.com, ni se afirma nada sobre la transmisión en flujo, los intercambios con herramientas o el enrutamiento de modelos dentro del cliente. Lo único que puede comprobarse de forma aislada es si el endpoint y la clave funcionan, y eso se hace con el curl de esta página.