OpenAI (or Compatible) Language Models
To use a language model hosted on OpenAI (or compatible), specify the openai path in the from field.
For a specific model, include it as the model ID in the from field (see example below). The default model is gpt-4o-mini.
models:
- from: openai:gpt-4o-mini
name: openai_model
params:
openai_api_key: ${ secrets:OPENAI_API_KEY } # Required for official OpenAI models, unless the model uses workload identity federation
tools: auto # Optional. Connect the model to datasets via SQL query/vector search tools
system_prompt: 'You are a helpful assistant.' # Optional.
# Optional parameters
endpoint: https://api.openai.com/v1 # Override to use a compatible provider (i.e. NVidia NIM)
openai_org_id: ${ secrets:OPENAI_ORG_ID }
openai_project_id: ${ secrets:OPENAI_PROJECT_ID }
# Override default chat completion request parameters
openai_temperature: 0.1
openai_response_format: { 'type': 'json_object' }
# OpenAI Responses API configuration
responses_api: enabled
openai_responses_tools: web_search, code_interpreter
Configuration​
from​
The from field takes the form openai:model_id where model_id is the model ID of the OpenAI model, valid model IDs are found in the {endpoint}/v1/models API response.
Example:
curl -H "Authorization: Bearer $OPENAI_API_KEY" https://api.openai.com/v1/models
{
"object": "list",
"data": [
{
"id": "gpt-4o-mini",
"object": "model",
"created": 1727389042,
"owned_by": "system"
},
...
}
name​
The model name. This will be used as the model ID within Spice and Spice's endpoints (i.e. http://localhost:8090/v1/models). This can be set to the same value as the model ID in the from field.
params​
| Param | Description | Default |
|---|---|---|
endpoint | The OpenAI API base endpoint. Can be overridden to use a compatible provider (i.e. NVIDIA NIM). | https://api.openai.com/v1 |
tools | Which tools should be made available to the model. Set to auto to use all available tools. | - |
system_prompt | An additional system prompt used for all chat completions to this model. | - |
openai_api_key | The OpenAI API key. | - |
openai_org_id | The OpenAI organization ID. | - |
openai_project_id | The OpenAI project ID. | - |
openai_identity_provider_id | The OpenAI workload identity provider (idp_...) that verifies the workload's identity token. With openai_service_account_id and openai_identity_token_audience, the model authenticates with workload identity federation instead of openai_api_key. | - |
openai_service_account_id | The OpenAI service account (user-...) that the workload identity provider's mapping resolves the workload to. Required for workload identity federation. | - |
openai_identity_token_audience | The audience the workload's identity token is issued for. It must match the workload identity provider's Audience. Required for workload identity federation. | - |
openai_identity_token_file | A file that holds the workload's identity token, such as a Kubernetes projected service account token. Spice reads it again for every exchange. When unset, Spice requests the token from GitHub Actions. | - |
openai_temperature | Set the default temperature to use on chat completions. | - |
openai_response_format | An object specifying the format that the model must output, see structured outputs. | - |
openai_reasoning_effort | For reasoning models, like o1, this parameter specifies the reasoning effort used for the model. | - |
openai_usage_tier | The OpenAI usage tier for the account. This parameter sets the maximum number of concurrent requests based on OpenAI's published limits per tier. Valid values are free, tier1, tier2, tier3, tier4, or tier5. | tier1 |
responses_api | enabled or disabled. Whether to enable invoking this model from the /v1/responses HTTP endpoint using OpenAI's Responses API. When using OpenAI-compatible providers, ensure the provider supports OpenAI's Responses API. | disabled |
openai_responses_tools | Comma-separated list of OpenAI-hosted tools exposed via the Responses API for this model. These hosted tools are not available from the /v1/chat/completions HTTP endpoint. Supported tools: code_interpreter, web_search, web_search_preview. | - |
web_search selects OpenAI's current web search tool. web_search_preview selects the legacy tool of the same name, retained for older models that do not support the current one — prefer web_search unless the model rejects it.
See Large Language Models for additional configuration options.
Workload Identity Federation​
An OpenAI model can authenticate with workload identity federation instead of an API key. Spice exchanges the identity token that the platform gives the workload for a short-lived OpenAI access token (RFC 8693), and exchanges again before each access token expires, so no OpenAI API key is stored with Spice. The same parameters apply to OpenAI embedding models.
models:
- from: openai:gpt-4o-mini
name: gpt
params:
openai_identity_provider_id: ${ secrets:OPENAI_IDENTITY_PROVIDER_ID }
openai_service_account_id: ${ secrets:OPENAI_SERVICE_ACCOUNT_ID }
openai_identity_token_audience: https://api.openai.com
openai_identity_token_file: /var/run/secrets/tokens/openai
openai_identity_provider_id, openai_service_account_id, and openai_identity_token_audience are all required. The identity token comes from openai_identity_token_file, read again for every exchange, or, when that parameter is unset, from the GitHub Actions job Spice runs in, which needs permissions: id-token: write (see OpenID Connect in GitHub Actions).
Spice exchanges again one minute before the access token expires, or, for a token that lasts less than four minutes, after three quarters of its lifetime. When an exchange after the first one fails, Spice keeps using the current access token and retries, waiting at most 15 seconds between attempts.
A model that sets a federation parameter and openai_api_key in the Spicepod fails to load with an error that names both, and a model that sets only some of the required parameters fails with an error that names the missing one. An openai_api_key loaded automatically from a secret store does not conflict with federation. When OpenAI refuses the first exchange, the model fails to load with OpenAI's reason.
Supported OpenAI Compatible Providers​
Spice supports several OpenAI compatible providers. Specify the appropriate endpoint in the params section.
Azure OpenAI​
Follow Azure AI Models instructions.
Groq​
Groq provides OpenAI compatible endpoints. Use the following configuration:
models:
- from: openai:llama3-groq-70b-8192-tool-use-preview
name: groq-llama
params:
endpoint: https://api.groq.com/openai/v1
openai_api_key: ${ secrets:SPICE_GROQ_API_KEY }
NVIDIA NIM​
NVIDIA NIM models are OpenAI compatible endpoints. Use the following configuration:
models:
- from: openai:my_nim_model_id
name: my_nim_model
params:
endpoint: https://my_nim_host.com/v1
openai_api_key: ${ secrets:SPICE_NIM_API_KEY }
For examples of setting up NVIDIA NIM with Spice, see the Nvidia NIM on AWS EC2 and Nvidia NIM on Kubernetes cookbook recipes.
Parasail​
Parasail also offers OpenAI compatible endpoints. Use the following configuration:
models:
- from: openai:parasail-model-id
name: parasail_model
params:
endpoint: https://api.parasail.com/v1
openai_api_key: ${ secrets:SPICE_PARASAIL_API_KEY }
Refer to the respective provider documentation for more details on available models and configurations.
Cookbook​
- A cookbook recipe to use OpenAI language and embedding models in Spice. OpenAI Models
- A cookbook recipe to use the OpenAI SDK with models served by Spice. Spice with the OpenAI SDK
- A cookbook recipe to use OpenAI's Responses API with Spice. Using OpenAI's Responses API with Spice
- A cookbook recipe to use a DeepSeek model through its OpenAI-compatible API. DeepSeek Model
