El modelo ORYKSA (compatible con OpenAI)
Usa ORYKSA como el modelo de IA de cualquier automatización, en lugar de OpenAI u OpenRouter. Los nodes de tu n8n hablan con YouTube, Instagram, LinkedIn, Google Drive o Google Sheets con tus cuentas; ORYKSA escribe, resume, clasifica, extrae y decide qué herramienta llamar. El consumo sale de las interacciones de tu plan.
Dos modelos
| Modelo | Qué es |
|---|---|
oryksa | El modelo general. Sigue tu prompt de sistema y tus mensajes exactamente como los envías. Admite herramientas, salida en JSON y streaming. No sabe nada de tu cuenta y nunca actúa en ella. Es el que sustituye a OpenAI. |
oryksa-assistant | Tu propio asistente ORYKSA, con el conocimiento y los datos de tu negocio. Solo responde. Las herramientas se ignoran. |
Cualquier otro nombre de modelo (por ejemplo gpt-4o, ya escrito en un flujo) lo responde oryksa, para que los flujos existentes sigan funcionando.
curl https://api.oryksa.com/v1/chat/completions \
-H "Authorization: Bearer oryk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "oryksa",
"messages": [
{"role": "system", "content": "Escribes publicaciones para LinkedIn. Cortas, una idea, sin hashtags."},
{"role": "user", "content": "Vídeo nuevo: 5 errores al poner precio a tus servicios."}
]
}'import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["ORYKSA_API_KEY"], base_url="https://api.oryksa.com/v1")
out = client.chat.completions.create(
model="oryksa",
messages=[
{"role": "system", "content": "Escribes publicaciones para LinkedIn. Cortas, una idea, sin hashtags."},
{"role": "user", "content": "Vídeo nuevo: 5 errores al poner precio a tus servicios."},
],
)
print(out.choices[0].message.content, out.usage.total_tokens)Qué se admite
| Función | Soporte |
|---|---|
messages | system, developer, user, assistant y tool, enteros y en orden. Texto e imágenes (image_url con https o data:image, hasta 4). |
tools, tool_choice | Llamada a funciones en el formato de OpenAI: la respuesta trae tool_calls y finish_reason: "tool_calls". |
response_format | json_object y json_schema. |
stream | Server-sent events de verdad, trozo a trozo, incluidas las llamadas a herramientas, terminados por [DONE]. Se admite stream_options.include_usage. |
usage | Recuento real de tokens. Tus interacciones vienen en el campo extra oryksa. |
temperature, top_p, stop, seed, max_tokens, max_completion_tokens | Admitidos. |
n | Solo 1. |
functions, function_call | No admitidos: usa tools. |
Herramientas
Envía las herramientas que tiene tu flujo. Cuando el modelo quiere una, responde con la llamada; tu flujo la ejecuta y devuelve el resultado en un mensaje tool. Cada respuesta del modelo gasta una interacción, así que un agente que da 4 vueltas gasta 4.
{
"model": "oryksa",
"messages": [{"role": "user", "content": "Añade a Ana con 3 unidades a la hoja"}],
"tools": [{
"type": "function",
"function": {
"name": "sheets_append",
"description": "Append a row to the sheet",
"parameters": {"type": "object", "properties": {"row": {"type": "array", "items": {"type": "string"}}}, "required": ["row"]}
}
}]
}{
"id": "chatcmpl-8f1c2a7e5b9d4c3fa1e0b6d2c4f7a9e1",
"object": "chat.completion",
"created": 1791072000,
"model": "oryksa",
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": null,
"tool_calls": [{"id": "call_1", "type": "function", "function": {"name": "sheets_append", "arguments": "{\"row\": [\"Ana\", \"3\"]}"}}]
},
"finish_reason": "tool_calls"
}],
"usage": {"prompt_tokens": 96, "completion_tokens": 18, "total_tokens": 114},
"oryksa": {"interactions_spent": 1, "interactions_remaining": 2873, "interactions_limit": 3000}
}Salida en JSON
Para extracción y clasificación, pide una forma fija:
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "lead",
"strict": true,
"schema": {
"type": "object",
"properties": {"name": {"type": "string"}, "email": {"type": "string"}},
"required": ["name", "email"],
"additionalProperties": false
}
}
}Límites
| Límite | Valor |
|---|---|
| Texto en una petición (mensajes, definiciones de herramientas, argumentos) | 32 000 caracteres |
| Respuesta | 2 000 tokens (un max_tokens más alto se limita a este valor; una respuesta que no cabe termina con finish_reason: "length") |
| Peticiones | 60 por minuto por cuenta |
| Imágenes | 4 por petición |
Por encima de un límite la API responde 400 e indica el campo en param. Nunca se corta nada en silencio.
Interacciones
Una interacción por cada respuesta que genera el modelo, con el mismo recuento que todos los demás canales. Cuando el plan no tiene más, la API responde 402 interaction_limit_reached.
Usarlo en n8n
- En n8n, crea una credencial de tipo OpenAI. En API Key pega tu clave
oryk_live_y en Base URL escribehttps://api.oryksa.com/v1. - En cualquier node que reciba un modelo de chat (AI Agent, Basic LLM Chain, Information Extractor, Text Classifier, Summarization Chain), añade un OpenAI Chat Model con esa credencial y elige el modelo
oryksa. - La opción Use Responses API puede estar activada o desactivada: ORYKSA responde en los dos formatos.
- Conecta tus otros nodes (YouTube, Google Sheets, Google Drive, LinkedIn) con tus cuentas, como harías con cualquier otro modelo.
Errores
| Código | Qué es |
|---|---|
400 invalid_request | El cuerpo no es válido. param indica el campo. |
400 input_too_large | Más de 32 000 caracteres de texto. |
400 content_policy | La petición fue rechazada por el filtro de seguridad de contenido. |
402 interaction_limit_reached | Sin interacciones en este periodo. |
429 rate_limited | Más de 60 peticiones por minuto. |
503 model_unavailable | El modelo no está disponible ahora. Inténtalo en un momento. |
Identificar las peticiones en el extracto de consumo
En el node HTTP Request, activa Send Headers y añade:
X-Oryksa-Source=n8nX-Oryksa-Workflow={{ encodeURIComponent($workflow.name) }}X-Oryksa-Workflow-Id={{ $workflow.id }}X-Oryksa-Execution-Id={{ $execution.id }}
En el node OpenAI solo se puede poner una cabecera fija, en la credencial: añade X-Oryksa-Source = n8n. El extracto muestra n8n, sin el nombre del workflow. Para ver cada workflow, usa el node HTTP Request.
Make y Zapier funcionan igual, con make o zapier en X-Oryksa-Source.
Responses API
POST https://api.oryksa.com/v1/responses es el formato Responses de OpenAI sobre el mismo modelo de /v1/chat/completions. Sirve para los nodes y bibliotecas que ya usan ese formato: cambia solo la dirección base y la clave.
Lo que funciona: input (texto o lista de mensajes), instructions, herramientas de función (tools, tool_choice, y los elementos function_call y function_call_output en la conversación), salida en JSON (text.format con json_object o json_schema), max_output_tokens, temperature, top_p y stream.
Lo que no existe: las herramientas propias de OpenAI (búsqueda web, búsqueda en archivos, intérprete de código) y conversaciones guardadas. ORYKSA no guarda nada: store es siempre false y previous_response_id devuelve un error 400. Envía la conversación entera en cada petición.
Coste: 1 interacción por respuesta, igual que /v1/chat/completions. Límites: los mismos (32 000 caracteres de texto por petición, respuesta de hasta 2 000 tokens, 60 peticiones por minuto). No se cobra nada cuando la petición falla.
Los modelos son los mismos: oryksa (modelo general; cualquier otro nombre se trata como oryksa) y oryksa-assistant (tu asistente, solo respuesta).
curl https://api.oryksa.com/v1/responses \
-H "Authorization: Bearer oryk_live_..." -H "Content-Type: application/json" \
-d '{"model": "oryksa", "instructions": "Answer in one sentence.", "input": "What is an embedding?"}'Embeddings
POST https://api.oryksa.com/v1/embeddings convierte textos en vectores, en el formato de OpenAI, para búsqueda por significado y bases de conocimiento (por ejemplo los nodes de vectores de n8n).
Envía input (un texto o una lista de textos; hasta 256 textos y 32 000 caracteres en total por petición). Opcionales: dimensions y encoding_format (float o base64). El campo model se acepta y se ignora: el modelo es siempre oryksa-embeddings.
Coste: 1 interacción por petición, sea cual sea el número de textos. No se cobra nada cuando la petición falla.
Importante: los vectores solo se comparan con vectores hechos por el mismo modelo. No mezcles, en la misma base, vectores de ORYKSA con vectores de otro proveedor.
curl https://api.oryksa.com/v1/embeddings \
-H "Authorization: Bearer oryk_live_..." -H "Content-Type: application/json" \
-d '{"input": ["first text", "second text"]}'
