Differences from OpenAI
Nodea runs open models on your own devices, so some behavior differs from OpenAI’s hosted API. If you’re moving code from OpenAI, check this list.
- Only Chat Completions and Models. There’s no Responses API, legacy Completions, embeddings, images, audio, files, batches or fine-tuning.
- Text only. Image, audio and file inputs and audio output aren’t supported.
- The models are the ones you enable. OpenAI model names like
gpt-4odon’t exist. Use a model name from your Models page.
Output
Section titled “Output”stopkeeps the stop text. OpenAI cuts the output just before the stop sequence; Nodea includes it at the end. Strip it yourself if needed.seedis ignored. Usetemperature: 0for repeatable output.usagecan be missing. Token counts come from the device. If it doesn’t report them,usageis left out rather than estimated. Withn> 1,completion_tokenscounts one choice, not all of them.refusalis alwaysnull, and there’s no content moderation, sofinish_reasonis never"content_filter".
Tool calling
Section titled “Tool calling”tool_choicesupports"auto"and"none"."required"and naming a specific function return400.parallel_tool_calls: falseisn’t supported. The model may return several tool calls at once.- With
tool_choice: "none", some models still write out a tool call as plain text incontent. - Alongside a correct tool call,
contentmay contain leftover formatting from the model’s chat template. Rely ontool_calls, notcontent, whenfinish_reasonis"tool_calls". - In streaming, tool calls arrive complete in one chunk instead of incrementally.
- How well tools work depends on the model. Smaller models are less reliable.
Structured output
Section titled “Structured output”- With
response_formatset tojson_schema, the output is constrained to the schema during generation, so it always matches. - Generation can continue past the end of the JSON until it hits the token
limit, giving
finish_reason: "length"even though the JSON is complete. Set a reasonablemax_completion_tokens.
Other parameters
Section titled “Other parameters”logit_biastoken ids refer to the model’s own tokenizer. Bias maps built for OpenAI’s tokenizer won’t do what you expect.reasoning_effortaccepts only"low","medium"and"high".- Fields Nodea ignores are listed in the
x-nodea-ignored-paramsresponse header. See Ignored.
Capacity and limits
Section titled “Capacity and limits”- One response at a time per device. To handle more requests at once, add devices. See How devices get models.
- Requests can wait for a device. If no device is serving the model, a
request waits up to 120 seconds before failing with
503 model_unavailable. - No rate limits, so no
429responses orx-ratelimit-*headers. - Completions aren’t stored.
storeandmetadataare ignored, and there’s no API to retrieve past completions.