{
    "$schema": "./provider-catalog.schema.json",
    "id": "openai-decisions",
    "displayName": "OpenAI Decisions",
    "enumTypeName": "OpenAIDecisionsModels",
    "aliases": [],
    "inferenceKinds": ["decide"],
    "wire": {
        "baseURL": "https://api.openai.com",
        "envOverrides": { "apiKey": "OPENAI_API_KEY" }
    },
    "models": {
        "default": "gpt-6-luna",
        "topModels": ["gpt-6-luna"],
        "catalog": {
            "gpt-6-luna": {
                "contextWindow": 1050000,
                "maxOutputTokens": 256,
                "vision": true,
                "status": "preview",
                "description": "GPT-6 Luna on OpenAI's Decisions API (public beta): text and images"
            }
        }
    },
    "timeouts": { "decideMs": 10000 },
    "decisionLimits": {
        "maxStateTokens": 922000,
        "advisory": true,
        "media": { "maxImages": 8, "video": false, "maxRequestBytes": 33554432 }
    },
    "decide": {
        "dialect": "openai-decisions",
        "order": 7,
        "baseURLNormalize": ["strip-trailing-slash", "strip-v1-suffix"],
        "baseURLShape": "origin",
        "ambientKeyGuard": {
            "baseURLEnvVars": ["OPENAI_BASE_URL", "OPENAI_API_BASE"],
            "trustedOrigins": ["https://api.openai.com"],
            "credentialBaseURLs": [{ "key": "openai", "field": "baseURL" }]
        },
        "endpoint": "{baseURL}/v1/decisions",
        "model": { "placement": "body" },
        "requestIdHeaders": ["x-request-id"],
        "errors": {
            "rules": [
                { "status": 401, "kind": "authentication" },
                { "status": 429, "kind": "rate_limit", "retryable": false },
                { "status": 503, "kind": "overloaded" },
                { "statusMin": 500, "kind": "server" }
            ],
            "default": "invalid_request",
            "bodyShapes": [{ "path": "error.message" }]
        }
    },
    "setup": {
        "url": "https://platform.openai.com/api-keys",
        "apiKeyFormat": null,
        "billingPolicy": "no-free-tier",
        "description": "OpenAI API key (the same OPENAI_API_KEY the openai chat provider reads)",
        "instructions": [
            "1. Create an API key at https://platform.openai.com/api-keys",
            "2. Set {apiKeyEnvVar}; it is shared with the openai chat provider",
            "3. With no other decision provider configured, {apiKeyEnvVar} alone makes openai-decisions the default decision provider (the last resort, after every other one, as PERPLEXITY_API_KEY does for perplexity-decider), unless OPENAI_BASE_URL, OPENAI_API_BASE or credentials.openai.baseURL names a host other than https://api.openai.com: the key is then taken to be a gateway's and is not used by default. To use it while another provider is configured, name it in a call (provider: \"openai-decisions\" or --provider openai-decisions), but only if the key is OpenAI's, because a named call sends the environment key to api.openai.com. Behind a gateway, route it on purpose with OPENAI_DECISIONS_BASE_URL or credentials.openaiDecisions, or do not use it",
            "4. Optional: OPENAI_DECISIONS_BASE_URL (an origin) and OPENAI_DECISIONS_MODEL (default gpt-6-luna)"
        ]
    },
    "evidence": {
        "rosterVerified": {
            "date": "2026-10-07",
            "method": "OpenAI's Decisions guide and gpt-6-luna model page saved 2026-10-07: gpt-6-luna is the only model the endpoint supports. Read from documentation; no live call"
        },
        "liveMatrix": null,
        "addedInPR": "https://github.com/juspay/neurolink/pull/1996"
    }
}
