DEVUP Docs
Back to Dashboard
Compatibility Guide

OpenAI Model Compatibility

DEVUP AI routes OpenAI models directly through the Chat Completions endpoint. While existing OpenAI SDK code connects with a simple base URL change, OpenAI models strictly validate parameters and ignore sampling settings that other providers accept.

Important: Sampling parameters are ignored on OpenAI models

Settings such as temperature (other than 1), top_p, and stop are not supported by these models. DEVUP AI automatically drops them to prevent upstream rejection, reporting the drop in the response metadata.

1. How to call these models

Use the model identifier verbatim as catalogued in DEVUP AI (e.g. openai/gpt-5.6-luna). Configure your OpenAI client with our unified base URL https://api.devupai.com/v1 and your DEVUP AI API key.

import os
from openai import OpenAI

# Initialize client pointed at the DEVUP AI gateway
client = OpenAI(
    api_key=os.environ["DEVUP_API_KEY"],
    base_url="https://api.devupai.com/v1",
)

# Use the catalog identifier verbatim
response = client.chat.completions.create(
    model="openai/gpt-5.6-luna",
    messages=[
        {"role": "user", "content": "Explain the concept of entropy in one concise paragraph."}
    ],
    max_tokens=200,
)

print(response.choices[0].message.content)
print(f"Tokens: {response.usage.prompt_tokens} prompt, {response.usage.completion_tokens} completion")

2. Parameter support

Requests forwarded to OpenAI destinations are validated against an allowlist. For general request structure and standard parameter definitions, see the Chat Completions documentation. Every parameter falls into exactly one of three categories:

ParameterBehaviourNote
modelsupportedThe resolved upstream model identifier is sent upstream.
messagessupportedStandard conversation messages array.
streamsupportedServer-Sent Events streaming is supported. Streamed responses include a usage object carrying real token counts.
max_tokenstranslatedAutomatically translated to max_completion_tokens. If both are sent, max_completion_tokens is preferred and max_tokens is ignored with a warning.
max_completion_tokenssupportedNative completion token ceiling accepted directly.
frequency_penaltysupportedPassed through to upstream model without modification.
presence_penaltysupportedPassed through to upstream model without modification.
nsupportedNumber of completion choices to generate.
seedsupportedDeterministic sampling seed.
usersupportedEnd-user identifier for telemetry and abuse tracking.
logprobssupportedToken log probability calculation.
response_formatsupportedStructured outputs (e.g. JSON object or JSON Schema).
toolssupportedFunction definitions for tool calling.
reasoning_effortsupportedControls reasoning token budget. Accepted values are none, low, medium, high, and xhigh (max is not accepted). Note that none is not accepted on every model (measured unsupported on openai/gpt-6-astra). Generated reasoning tokens count toward the completion token budget.
temperatureignoredOnly the default value of 1 is accepted. Any other value is ignored with a warning rather than rejected.
top_pignoredUnsupported by these models. Dropped with a warning.
stopignoredUnsupported by these models. Dropped with a warning.
parallel_tool_callsignoredCopied only when tools is present and non-empty. Otherwise dropped with a warning.
usageignoredClient-side usage request parameter is unsupported and dropped with a warning.
Any unlisted parameterignoredStrict allowlist. Any parameter not listed above (e.g. logit_bias, metadata) is dropped with a warning naming the field.

3. Why ignored and not rejected

Rejecting requests that contain parameters like temperature or top_p with an HTTP 400 error would break standard OpenAI-compatible SDKs, which attach default sampling parameters automatically. Instead, DEVUP AI strips unsupported fields, forwards a sanitized request upstream, and reports each omitted parameter in the response metadata so existing client code works seamlessly.

4. How to see what was dropped

Every successful non-streaming response includes a _devup metadata object. When unsupported parameters are omitted from a non-streaming OpenAI request, an array of human-readable warnings is added to _devup.warnings. Streamed responses do not carry _devup, so parameters dropped on a streamed request are not visible to the client.

  • The warnings key is absent when no parameters are dropped (including on all DEFAULT model requests).
  • Warnings identify the parameter name only and never echo user values, prompt text, or credentials.
  • Warnings are sorted deterministically in alphabetical order.

Example Response with Warnings

{
  "id": "chatcmpl-9xL7p8K2mN1q0Rt3",
  "object": "chat.completion",
  "created": 1725884000,
  "model": "openai/gpt-5.6-luna",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Entropy represents the degree of disorder or randomness in a physical system."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 18,
    "completion_tokens": 15,
    "total_tokens": 33
  },
  "_devup": {
    "cost_dzd": "<settled_cost_dzd>",
    "balance_dzd": "<remaining_balance_dzd>",
    "warnings": [
      "Parameter 'temperature' is not supported by this model and was ignored.",
      "Parameter 'top_p' is not supported by this model and was ignored."
    ]
  }
}

The values shown above are illustrative.

5. Reasoning models and token budgets

Reasoning-capable models, such as the model identified by openai/gpt-5.6-luna in the examples on this page, perform internal computation before generating visible output.

Reasoning tokens consume your completion budget

Internal reasoning tokens count against your max_tokens (or max_completion_tokens) budget and are billed as output tokens.

If your configured ceiling is too low, the model consumes its entire allocation thinking through the problem and terminates with an empty string (content: ""). This is expected behaviour, not a gateway defect.

Measured behavior from production:

  • 10-token ceiling: Returned content: "". All 10 tokens were consumed by internal reasoning.
  • 400-token ceiling: Returned a full answer with 95 completion tokens, of which 13 were internal reasoning tokens and 82 were visible response tokens.

Recommendation: We recommend a starting floor of at least max_tokens: 100 to max_tokens: 200 for trivial questions, and higher ceilings for complex analysis. This floor is an operational starting point, not a guarantee.

For deeper architectural details on how reasoning models function across DEVUP AI, see the Reasoning Models guide.

6. What is not yet available

DEVUP AI enables multi-provider routing on a route-by-route basis. As of this release, only the Chat Completions endpoint (POST /v1/chat/completions) resolves destinations to OpenAI models.

The following capabilities are not currently available for OpenAI models on DEVUP AI:

7. Billing

OpenAI models on DEVUP AI are metered and billed in Algerian Dinar (DZD) per million tokens, matching our platform standard.

  • Internal reasoning tokens count as completion tokens and are billed at the model's standard output token rate.
  • All current rates are displayed live on each model's entry in the Model Catalog.
  • Each non-streaming response includes settled cost in _devup.cost_dzd and your remaining account balance in _devup.balance_dzd.