O modelo ORYKSA (compatível com OpenAI)
Usa a ORYKSA como o modelo de IA de qualquer automação, em vez da OpenAI ou do OpenRouter. Os nodes do teu n8n falam com o YouTube, Instagram, LinkedIn, Google Drive ou Google Sheets com as tuas contas; a ORYKSA escreve, resume, classifica, extrai e decide que ferramenta chamar. O consumo sai das interações do teu plano.
Dois modelos
| Modelo | O que é |
|---|---|
oryksa | O modelo geral. Segue o teu prompt de sistema e as tuas mensagens exatamente como as envias. Suporta ferramentas, saída em JSON e streaming. Não sabe nada da tua conta e nunca age nela. É este que substitui a OpenAI. |
oryksa-assistant | O teu próprio assistente ORYKSA, com o conhecimento e os dados do teu negócio. Só responde. As ferramentas são ignoradas. |
Qualquer outro nome de modelo (por exemplo gpt-4o, já escrito num fluxo) é respondido pelo oryksa, para os fluxos existentes continuarem a funcionar.
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": "Escreves posts para o LinkedIn. Curtos, uma ideia, sem hashtags."},
{"role": "user", "content": "Vídeo novo: 5 erros ao dar preço aos teus serviços."}
]
}'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": "Escreves posts para o LinkedIn. Curtos, uma ideia, sem hashtags."},
{"role": "user", "content": "Vídeo novo: 5 erros ao dar preço aos teus serviços."},
],
)
print(out.choices[0].message.content, out.usage.total_tokens)O que é suportado
| Funcionalidade | Suporte |
|---|---|
messages | system, developer, user, assistant e tool, inteiras e por ordem. Texto e imagens (image_url com https ou data:image, até 4). |
tools, tool_choice | Chamada de funções no formato da OpenAI: a resposta traz tool_calls e finish_reason: "tool_calls". |
response_format | json_object e json_schema. |
stream | Server-sent events verdadeiros, pedaço a pedaço, incluindo chamadas de ferramentas, terminados por [DONE]. stream_options.include_usage é suportado. |
usage | Contagem real de tokens. As tuas interações vêm no campo extra oryksa. |
temperature, top_p, stop, seed, max_tokens, max_completion_tokens | Suportados. |
n | Só 1. |
functions, function_call | Não suportados: usa tools. |
Ferramentas
Envia as ferramentas que o teu fluxo tem. Quando o modelo quer uma, responde com a chamada; o teu fluxo executa-a e devolve o resultado numa mensagem tool. Cada resposta do modelo gasta uma interação, por isso um agente que dá 4 voltas gasta 4.
{
"model": "oryksa",
"messages": [{"role": "user", "content": "Acrescenta a Ana com 3 unidades à folha"}],
"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}
}Saída em JSON
Para extração e classificação, pede uma forma fixa:
"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
}
}
}Limites
| Limite | Valor |
|---|---|
| Texto num pedido (mensagens, definições de ferramentas, argumentos) | 32 000 caracteres |
| Resposta | 2 000 tokens (um max_tokens mais alto é limitado a este valor; uma resposta que não cabe termina com finish_reason: "length") |
| Pedidos | 60 por minuto por conta |
| Imagens | 4 por pedido |
Acima de um limite a API responde 400 e diz o campo em param. Nada é cortado em silêncio.
Interações
Uma interação por cada resposta que o modelo gera, pela mesma contagem de todos os outros canais. Quando o plano não tem mais, a API responde 402 interaction_limit_reached.
Usar no n8n
- No n8n, cria uma credencial do tipo OpenAI. Em API Key cola a tua chave
oryk_live_e em Base URL escrevehttps://api.oryksa.com/v1. - Em qualquer node que receba um modelo de chat (AI Agent, Basic LLM Chain, Information Extractor, Text Classifier, Summarization Chain), junta um OpenAI Chat Model com essa credencial e escolhe o modelo
oryksa. - A opção Use Responses API pode ficar ligada ou desligada: a ORYKSA responde nos dois formatos.
- Liga os teus outros nodes (YouTube, Google Sheets, Google Drive, LinkedIn) com as tuas contas, como farias com qualquer outro modelo.
Erros
| Código | O que é |
|---|---|
400 invalid_request | O corpo não é válido. param diz o campo. |
400 input_too_large | Mais de 32 000 caracteres de texto. |
400 content_policy | O pedido foi recusado pelo filtro de segurança de conteúdo. |
402 interaction_limit_reached | Sem interações neste período. |
429 rate_limited | Mais de 60 pedidos por minuto. |
503 model_unavailable | O modelo não está disponível agora. Tenta daqui a pouco. |
Identificar os pedidos no extrato de consumo
No node HTTP Request, liga Send Headers e acrescenta:
X-Oryksa-Source=n8nX-Oryksa-Workflow={{ encodeURIComponent($workflow.name) }}X-Oryksa-Workflow-Id={{ $workflow.id }}X-Oryksa-Execution-Id={{ $execution.id }}
No node OpenAI só dá para pôr um cabeçalho fixo, na credencial: acrescenta X-Oryksa-Source = n8n. O extrato mostra n8n, sem o nome do workflow. Para ver cada workflow, usa o node HTTP Request.
O Make e o Zapier funcionam da mesma forma, com make ou zapier em X-Oryksa-Source.
Responses API
POST https://api.oryksa.com/v1/responses é o formato Responses da OpenAI por cima do mesmo modelo de /v1/chat/completions. Serve para os nodes e bibliotecas que já usam esse formato: muda só o endereço base e a chave.
O que funciona: input (texto ou lista de mensagens), instructions, ferramentas de função (tools, tool_choice, e os itens function_call e function_call_output na conversa), saída em JSON (text.format com json_object ou json_schema), max_output_tokens, temperature, top_p e stream.
O que não existe: as ferramentas próprias da OpenAI (pesquisa na web, pesquisa em ficheiros, interpretador de código) e conversas guardadas. A ORYKSA não guarda nada: store é sempre false e previous_response_id dá erro 400. Envia a conversa inteira em cada pedido.
Custo: 1 interação por resposta, igual a /v1/chat/completions. Limites: os mesmos (32 000 caracteres de texto por pedido, resposta até 2 000 tokens, 60 pedidos por minuto). Nada é cobrado quando o pedido falha.
Os modelos são os mesmos: oryksa (modelo geral; qualquer outro nome é tratado como oryksa) e oryksa-assistant (o teu assistente, só resposta).
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 transforma textos em vetores, no formato da OpenAI, para pesquisa por significado e bases de conhecimento (por exemplo os nodes de vetores do n8n).
Envia input (um texto ou uma lista de textos; até 256 textos e 32 000 caracteres no total por pedido). Opcionais: dimensions e encoding_format (float ou base64). O campo model é aceite e ignorado: o modelo é sempre oryksa-embeddings.
Custo: 1 interação por pedido, seja qual for o número de textos. Nada é cobrado quando o pedido falha.
Importante: os vetores só se comparam com vetores feitos pelo mesmo modelo. Não mistures, na mesma base, vetores da ORYKSA com vetores de outro fornecedor.
curl https://api.oryksa.com/v1/embeddings \
-H "Authorization: Bearer oryk_live_..." -H "Content-Type: application/json" \
-d '{"input": ["first text", "second text"]}'
