Skip to main content
Integrate third-party LLM models from a variety of supported providers as virtual models.

Supported providers

  • When you import a model from OpenRouter, always set the max_token parameter explicitly. If you omit this parameter, the system defaults to 65536 tokens. This high token count can cause the request to fail if you do not have enough credits.
  • GPT-OSS-120b is a non-IBM product governed by a third-party license that may impose use restrictions and other obligations. By using this model, you agree to the terms. Read the terms.

Understanding virtual models

You can configure watsonx Orchestrate to register an external model or provider as a virtual model. Consider the following important limitations before you proceed.

Compatibility and support

Not every model and provider combination is supported or tested. The supported providers list shows providers that have been tested, but this does not guarantee that every model on every listed provider works. Consider the following:
  • New models and API changes: Models are released frequently, and some introduce API specification changes that can cause runtime errors.
  • Intermediate infrastructure: Components in the request path between watsonx Orchestrate and the provider (such as gateways, proxies, or adapters) can introduce incompatibilities or special authentication requirements that watsonx Orchestrate does not support.
  • Model suitability: Not all models are suited for agentic workflows. Even when a model registers successfully and runs without errors, the results might not be accurate enough for business-critical agents.

Optimized support

watsonx Orchestrate provides optimized support for:
  • gpt-oss-120b via Groq or AWS Bedrock
  • gpt-oss-120b via watsonx.ai in GovCloud environments (available in the April mid-release)
These model and provider combinations have undergone extensive testing and optimization for agent workflows.

Testing requirements

When you register virtual models with other providers, allocate sufficient time to validate that the combination works correctly. Testing can identify incompatibilities that prevent the agent from functioning as expected.

Using custom provider endpoints

If you self-host an LLM or use a model proxy or gateway as a pass-through to another provider, you can use OpenAI chat completion compatibility. This section covers authentication options for custom endpoints.

OpenAI-compatible with API key authentication

The default base URL for the openai provider is https://api.openai.com/v1. For self-hosted OpenAI-compatible endpoints, ensure that your full URL ends with /chat/completions, but exclude this path when you provide the custom_host during registration. Authentication format:
Example:
1

Define the model specification

custom-openai-model.yaml
Note: Do not include /chat/completions in the custom_host value.
2

Register the model

OpenAI-compatible with OAuth 2.0 authentication

For self-hosted OpenAI-compatible endpoints that use OAuth 2.0 client credentials authentication, use the openai-oauth2-client-creds provider type. Use this option when your OAuth token endpoint is separate from your LLM inferencing endpoint. Prerequisites: Your LLM inferencing URL must meet the following requirements:
  • End with /chat/completions (per the OpenAI spec)
  • Accept OAuth tokens in the request header: Authorization: Bearer your-access-token
1

Create OAuth connection

First, create a Team application/connection in watsonx Orchestrate. See OAuth 2.0 Client Credentials for details.Example OAuth token endpoint:
2

Register the model

Note: Exclude /chat/completions from the custom_host value.
Custom endpoints and intermediate infrastructure such as proxies and gateways might not be fully supported. Test thoroughly before using in production.

CLI Reference

Add a virtual model to watsonx Orchestrate by using the orchestrate models import command.
1

Define the model specification file

granite-3-3-8b-model.yaml
2

Create an API key connection

BASH
3

Add the model

BASH
Arguments:
  • --file (-f): File path of the spec file containing the model configuration.
  • --app-id (-a): The app ID of a key_value connection containing provider configuration details. These will be merged with the values provided in the provider_config section of the spec.
  • --skip-validation: Skip the automatic post-import validation check. See Validating virtual models for details.
After a successful import, validation runs automatically for new models. Embedding models are skipped. If validation fails, the model remains registered. Decide whether to proceed with a model that does not pass all checks.

Validating virtual models

The orchestrate models validate command tests whether a registered virtual model has the capabilities that are required for agentic behavior in watsonx Orchestrate. The command runs automatically after orchestrate models import and orchestrate models add for virtual models, and you can also run it on demand.
BASH
Arguments:
  • --name (-n): The name of the virtual model to validate. The name must match the registered model name exactly, including the virtual-model/ prefix.
  • --verbose (-v): Output full JSON results including per-test responses and tool call details.

What is tested

The command runs four test cases that cover the capabilities required by the watsonx Orchestrate agent runtime:

Limitations

  • Virtual models only: Validation runs only against virtual models (models whose name starts with virtual-model/). You cannot use it to test out-of-the-box (OOTB) models.
  • Embedding models not supported: Do not use the orchestrate models validate command with embedding models. Embedding models do not support inference or tool calling and are skipped automatically during post-import validation.

Understanding the output

After the command runs, a summary table and a per-test results table are displayed. Each test shows a success or failure status and a duration in milliseconds. If any test fails, the overall result is failed. The model remains registered regardless of the outcome. Review the failing test cases to determine whether the model is suitable for your use case. The following are common failure patterns:
  • All tests fail with an HTTP error (for example, a 404): The model name might be incorrect, the model might not exist at the provider, or your credentials might not have access to it. Verify the model name and your connection credentials.
  • Inference tests pass but tool calling tests fail: The model can respond to prompts but does not support function or tool calling. Because tool calling is required for agentic behavior in watsonx Orchestrate, this model cannot be used as an agent LLM.
Validation Summary showing Result: passed and Test Results table with all four test cases at success status

All four tests passing — the model is suitable for use as an agent LLM

Validation Summary showing Result: failed and Test Results table with basic_invocation and streaming at success, tool_calling and streaming_tool_calling at failed

Partial failure — the model supports inference but not tool calling

Pass --verbose (-v) to get the full JSON output, which includes the raw model response, error codes, and tool call details for each test case:
BASH

Skipping automatic validation

Both orchestrate models import and orchestrate models add run validation automatically after a successful registration. To skip validation, pass the --skip-validation flag:
BASH
Skip validation in the following situations:
  • You are scripting bulk imports and plan to validate separately by using orchestrate models validate.
  • The model endpoint is temporarily unavailable at import time.
  • You do not want to wait for validation to complete during import.

Examples using the supported providers

The following sections provide examples and supported schemas for each model provider.
object
The fields which can either be set by connection or by the provider_config field of the model. Values from a connection will be merged with the provider_config.
Example usage:
1

Define the model specification file

Define a specification file with the model details and provider configuration:
gpt-5-2025-08-07.yaml
2

Create an API key connection

To use the OpenAI API key securely, first create a connection:
BASH
3

Add the model

Add the model by using the specification file and the connection you created:
BASH
object
The fields which can either be set by connection or by the provider_config field of the model. Values from a connection will be merged with the provider_config.
Example usage:
1

Define the model specification file

watsonx-model.yaml
When registering gpt-oss-120b via watsonx.ai, you must include a config block. See Required config parameters for gpt-oss-120b for details.
2

Create an API key connection

BASH
When you add a watsonx.ai virtual model, include the provider configuration details. Without them, chat access to the model can fail. Provide custom host details by using the --provider-config flag in the orchestrate models add command. For more information, see Using the CLI only.
3

Add the model

BASH
Notes:
  • Provide one of: watsonx_space_id, watsonx_project_id, or watsonx_deployment_id.
  • Include watsonx_cpd_url, watsonx_cpd_username, watsonx_cpd_password only for on-prem (CPD) setups.
  • When you register Deploy on Demand (DoD) models, explicitly provide the model configuration. Set these configuration values according to the model’s requirements because they are not automatically transferred during inference from watsonx Orchestrate.
object
The fields which can either be set by connection or by the provider_config field of the model. Values from a connection will be merged with the provider_config.
Example usage:
1

Define the model specification file

Define a specification file with the model details and provider configuration:
gpt-oss-120b.yaml
When you register gpt-oss-120b as a virtual model, you must include a config block. See Required config parameters for gpt-oss-120b for details.
2

Create an API key connection

To use the API key securely, first create a connection:
BASH
3

Add the model

Add the model by using the specification file and the connection you created:
BASH
object
The fields which can either be set by connection or by the provider_config field of the model. Values from a connection will be merged with the provider_config.
Example usage:
1

Define the model specification file

anthropic-claude.yaml
2

Create an API key connection

BASH
3

Add the model

BASH
object
The fields which can either be set by connection or by the provider_config field of the model. Values from a connection will be merged with the provider_config.
Example usage:
1

Define the model specification file

google-genai.yaml
2

Create an API key connection

BASH
3

Add the model

BASH
Known Limitations:
  • API key authentication is not supported. Use service account JSON authentication instead.
For more details, see Known issues and limitations.
object
The fields which can be set in the provider_config field of the model.
Example usage:
1

Define the model specification file

my-provider.yaml
2

Add the model

BASH
object
The fields which can either be set by connection or by the provider_config field of the model. Values from a connection will be merged with the provider_config.
Example usage:
1

Define the model specification file

azure-gpt.yaml
2

Create an API key connection

BASH
3

Add the model

BASH
object
The fields which can either be set by connection or by the provider_config field of the model. Values from a connection will be merged with the provider_config.
Example usage:
1

Define the model specification file

azure-openai-gpt.yaml
2

Create an API key connection

BASH
3

Add the model

BASH
object
The fields which can either be set by connection or by the provider_config field of the model. Values from a connection will be merged with the provider_config.
Example usage:
1

Define the model specification file

aws-bedrock-model.yaml
2

Create an API key connection

BASH
3

Add the model

BASH
  • Provide either the api_key, aws_secret_access_key, or aws_access_key_id.
  • Provide the model name in the name field.
  • When you register Deploy on Demand (DoD) models, explicitly provide the model configuration. Set these configuration values according to the model’s requirements because they are not automatically transferred during inference from watsonx Orchestrate.
object
The fields which can either be set by connection or by the provider_config field of the model. Values from a connection will be merged with the provider_config.
Example usage:
1

Define the model specification file

mistral-large.yaml
2

Create an API key connection

BASH
3

Add the model

BASH
object
The fields which can either be set by connection or by the provider_config field of the model. Values from a connection will be merged with the provider_config.
Example usage:
1

Create an API key connection

BASH
2

Define the model specification file

openrouter-model.yaml
3

Add the model

BASH
object
The fields which can either be set by connection or by the provider_config field of the model. Values from a connection will be merged with the provider_config.
Example usage:
1

Create an API key connection

BASH
2

Define the model specification file

xai-model.yaml
3

Add the model

BASH
object
The fields which can either be set by connection or by the provider_config field of the model. Values from a connection will be merged with the provider_config.
Example usage:
1

Start ollama

On some systems, ollama runs under systemctl. Stop it before you start the Ollama server:
Then start the Ollama server and download the model:
2

Get your IP address

Get your network IP address by running:
3

Testing your connection

Before you import the model, test your connection to confirm that the watsonx Orchestrate Developer Edition server can reach the Ollama server.
  1. Run the following curl command to test your connection, replacing 198.51.100.42 with the IP address you obtained in the previous step:
  1. Enter the watsonx Orchestrate Developer Edition gateway container:
  1. Run the curl command again from within the container shell.
If you experience connection issues with Ollama, try the following:
  • Wait a few minutes after starting the server before running the command.
  • Restart the Ollama server.
  • Close any VPN clients.
  • Reconnect to both Wi-Fi and wired Ethernet simultaneously.
  • Avoid switching networks during the process.
  • Reset the watsonx Orchestrate Developer Edition server:
4

Define the model specification file

For Ollama, you do not need to create a connection or use a real API key. Use any string, such as ollama, as the API key value.Use your local network IP address as the URL. Ollama does not work if you use localhost or 0.0.0.0 in the model specification file.
ollama-llama2.yaml
Remember: Replace http://198.51.100.42:11434 with the IP address that you have obtained in the previous step.
5

Add the model

BASH
object
The fields which can either be set by connection or by the provider_config field of the model. Values from a connection will be merged with the provider_config.
Example usage:
1

Define the model specification file

redhat-genai.yaml
2

Create an API key connection

To safely use the API key, you must first create a connection:
BASH
3

Add the model

You can now add the model using the specification file and the connection that you created:
BASH
Limitations:On-Prem:
  1. For the gpt-oss-120b model, the model name must exactly match gpt-oss-120b. If a different model name is used, the ReAct Core style needs to be explicitly configured in the Builder UI.
  2. If the provider uses custom CA certificates, follow the certificate import steps outlined in the on-prem documentation.
SaaS:
  1. For the gpt-oss-120b model, the model name must exactly match gpt-oss-120b. If a different model name is used, the ReAct Core style needs to be explicitly configured in the Builder UI.
  2. Supported only for endpoints using certificates issued by a publicly trusted Certificate Authority (CA).
For more information about Red Hat OpenShift AI setup and configuration, refer to the Red Hat OpenShift AI documentation.

List all LLMs

Run the orchestrate models list command to see all available LLMs in your active environment.
BASH
By default, the command displays a table of available models. To get raw output, add the --raw (-r) flag.

Removing custom LLMs

Run the orchestrate models remove command with the --name (-n) flag to specify the LLM to remove.
BASH

Exporting custom LLM

Run the orchestrate models export command to export LLMs from your active environment.
BASH

Updating custom LLM

To update a custom LLM, remove it and then add it again:
BASH

Additional configuration options

Setting a default LLM in the UI

If you use an on-premises installation with models provisioned only as virtual models, you can specify which model appears as the default in the user interface. Add the default tag under the tags section of a model with the type set to chat.
granite-default-model.yaml
For on-premises installations that use only externally hosted virtual models, at least one model must be set as the default. Without a default model, the Create Agent page in the UI cannot be opened.

Setting a default embedding model

If you use an on-premises installation with models provisioned only as virtual models, you can also set a default model for knowledge bases. Add the default tag under the tags section of a model with the type set to embedding.
virtual-model.yaml

Configuring LLM parameters

Configure additional LLM parameters such as temperature and seed for more control over model behavior. Set these parameters in your agent configuration:
Parameters:
  • seed: Sets a random seed for reproducible outputs (useful for testing and debugging)
  • temperature: Controls randomness in responses (0.0 = deterministic, higher values = more creative)
These settings apply to the specific agent and override any default model configuration.