Providers, Model Types, and Model Discovery
Look up the 23 provider identifiers, default endpoints, supported providers per model type, and remote model discovery rules
Clouisle connects multimodal models through a unified provider abstraction. Providers are not independently configurable entities: there is no global provider registry holding default API keys, timeouts, or retry policies. Each model carries its own provider, base_url, api_key, and optional provider_display_name. "Configuring a provider" therefore means registering a model with a provider identifier; see Register models and authorize teams for the flow.
Provider identifiers and default endpoints
ModelProvider defines 23 provider identifiers. When no custom base_url is set, the runtime resolves the request address from the table below.
Provider identifier (provider) | Display name | Default API Base URL | Remote discovery |
|---|---|---|---|
openai | OpenAI | https://api.openai.com/v1 | Yes |
openai_responses | OpenAI Responses | https://api.openai.com/v1 | Yes |
anthropic | Anthropic | https://api.anthropic.com | Yes |
google | Google AI | https://generativelanguage.googleapis.com/v1beta | Yes |
azure_openai | Azure OpenAI | None (the admin must configure an Endpoint) | No |
deepseek | DeepSeek | https://api.deepseek.com | Yes |
moonshot | Moonshot | https://api.moonshot.cn/v1 | Yes |
zhipu | Zhipu AI | https://open.bigmodel.cn/api/paas/v4 | Yes |
qwen | Qwen | https://dashscope.aliyuncs.com/compatible-mode/v1 | Yes |
baichuan | Baichuan | https://api.baichuan-ai.com/v1 | Yes |
minimax | MiniMax | https://api.minimax.chat/v1 | Yes |
volcengine | Volcengine | https://ark.cn-beijing.volces.com/api/v3 | Yes |
siliconflow | SiliconFlow | https://api.siliconflow.cn/v1 | Yes |
xai | xAI (Grok) | https://api.x.ai/v1 | Yes |
ollama | Ollama | http://localhost:11434 | Yes |
runway | Runway | https://api.dev.runwayml.com | No |
pika | Pika | https://api.pika.art/v1 | No |
luma | Luma AI | https://api.lumalabs.ai/dream-machine/v1 | No |
kling | Kling | https://api.klingai.com | No |
stability | Stability AI | https://api.stability.ai | No |
midjourney | Midjourney | None (requires a self-hosted proxy) | No |
typesafe | TypeSafe AI | https://api.typesafe.ai/v1 | Yes |
custom | OpenAI Compatible | None (supplied by the integrator) | Yes |
Endpoint resolution order is: the model's own base_url → the model-type-specific default → the provider default. Clearing base_url therefore does not fail; it falls back to the table above. This is also why a TTS model and a chat model under the same provider can call different addresses:
Beyond the table, three model-type-specific default endpoints take precedence when the model has no base_url:
volcengine+tts→https://openspeech.bytedance.com/api/v3/tts/unidirectional/ssevolcengine+audio_generation→https://openspeech.bytedance.com/api/v3/tts/createtypesafe+decision→https://api.typesafe.ai/v1
openai versus openai_responses
Both share the same default base URL (https://api.openai.com/v1) but speak different protocols:
openaiuses standard Chat Completions and is the normal choice for chat, embeddings, and TTS/STT.openai_responsesuses OpenAI's Responses API (the SDK'sclient.responses.*) and currently backs the image generation path (the Responses hosted image tool, supportingsize,quality,background,output_format, and other Responses-only parameters).
The Responses API behavior of openai_responses applies only to image generation. If you configure a chat model with openai_responses, the chat runtime treats it as OpenAI-compatible (Chat Completions) and you do not get Responses API semantics; pick openai when the upstream only needs standard chat completions. Batch discovery uses the same path (/v1/models) for both.
Model types
ModelType has 9 values, independent of the provider:
Model type (model_type) | Description | Providers supported at runtime |
|---|---|---|
chat | Chat and text completion (streaming, function calling) | openai, anthropic, google, xai, azure_openai, deepseek, moonshot, zhipu, qwen, baichuan, minimax, volcengine, siliconflow, ollama, custom (remaining identifiers are treated as OpenAI-compatible) |
embedding | Text embeddings (RAG, memory retrieval) | 15: openai, openai_responses, azure_openai, google, deepseek, moonshot, zhipu, qwen, baichuan, minimax, volcengine, siliconflow, xai, ollama, custom |
rerank | Retrieval reranking | Any (LLM reranking through the chat model by default; siliconflow or native_rerank: true / rerank_api: "native" switches to the native /rerank endpoint) |
tts | Text to speech | openai, azure_openai, volcengine, minimax |
stt | Speech to text | openai, azure_openai |
audio_generation | Prompt to audio | volcengine only |
text_to_image | Text to image | openai, openai_responses, azure_openai, custom, siliconflow, google, runway, luma, stability, volcengine, minimax |
text_to_video | Text to video | runway, luma, kling, pika, siliconflow, volcengine, minimax, qwen |
decision | Typed decisions (choice/score/yes-no, non-generative) | typesafe only |
Creation and update validate only two combinations: embedding must use one of the 15 providers above, and decision must be typesafe. Other mismatches are not rejected on save:
For example, creating provider: anthropic with model_type: embedding, or model_type: text_to_video with provider: stability, saves successfully but throws Unsupported provider for ... / UnsupportedOperationError on the first real call. Knowledge bases and media nodes can therefore surface the mistake only later; always verify with Test Connection right after registering.
decision models use TypeSafe's own protocol: no chat completion, but a state plus typed questions in and answers with probability distributions out, consumed by the Workflow Decision node. Runtime requests go to POST {API Base}/v1/systemone.
Remote model discovery
Discover models lists the models a provider actually exposes before you save, so you never hand-write a wrong model_id. Call POST /api/v1/admin/models/discover with the admin:model:create permission; credentials are used for that request only and are never persisted.
Discovery supports 16 providers (the "Remote discovery" column above). Each uses a fixed list path and auth method:
| Provider | Discovery path | Auth |
|---|---|---|
openai / openai_responses / moonshot / baichuan / minimax / siliconflow / xai / custom | /v1/models | Authorization: Bearer <key> |
anthropic | /v1/models | x-api-key: <key> + anthropic-version: 2023-06-01 |
google | /v1beta/models | Query parameter ?key=<key> |
deepseek | /models | Authorization: Bearer <key> |
zhipu | /api/paas/v4/models | Authorization: Bearer <key> |
qwen | /compatible-mode/v1/models | Authorization: Bearer <key> |
volcengine | /api/v3/models | Authorization: Bearer <key> |
ollama | /api/tags | No auth header, no API Key required |
typesafe | /v1/models | Authorization: Bearer <key> |
azure_openai, runway, pika, luma, kling, stability, and midjourney do not support discovery; the call returns success: false with a "provider does not support model discovery" message. Every provider except ollama requires an API Key.
Hard requirements for a discovery request
- The base URL must pass the endpoint allowlist (
model_endpoint_not_allowlisted), otherwise the request is rejected before it leaves the server. - The base URL must be
http(s)://host[:port]with no query string, fragment, username/password, backslash, or//-prefixed path; a trailing/is stripped. - A 15-second timeout and no redirects (
follow_redirects=false), so credentials cannot be forwarded to another host. - The response body is capped at 2 MiB; at most 200 models are returned, and items with an over-long or duplicate
id/nameare skipped. - Both
data(OpenAI-compatible) andmodels(Google/Ollama) list shapes are recognized, andgooglestrips themodels/prefix. - Results carry
id,name,context_length,max_output_tokens, andcapabilities(vision,function_call,streaming,json_mode) that can be filled straight into the create form.
TypeSafe path rebasing
The typesafe discovery path is rebuilt from the configured base URL path so that gateway deployments work:
- Base URL path ends with
/v1: that path is reused.https://gw.example.com/openai/v1→ requests/openai/v1/models. - Base URL path is non-empty but does not end with
/v1:/v1/modelsis appended.https://gw.example.com/api→ requests/api/v1/models. - Base URL has no path: the default
/v1/modelsis used.
Endpoint allowlist
The Model Endpoint Allowlist site setting (model_endpoint_allowlist) is the master gate for all model egress: discovery, connection tests, and runtime requests all obey it. Matching rules:
- Exact Origin match on
scheme + host + port, ignoring the path;https://gateway.example.com/anythingandhttps://gateway.example.comare the same Origin. - Non-default ports participate:
http://ollama.internal:11434differs fromhttp://ollama.internal. - 20 official Origins ship by default (including
https://api.typesafe.ai,https://openspeech.bytedance.com, andhttp://localhost:11434);midjourneyhas no default Origin because it needs a self-hosted proxy. - The allowlist holds up to 200 entries; an empty list blocks every model endpoint.
- Removing an Origin immediately blocks later discovery, tests, and runtime requests with no service restart.
Prefer HTTPS for remote endpoints. Use HTTP only on a trusted private network; otherwise API Keys and model traffic travel in plaintext.
Related pages
- Register models and authorize teams — register models, test connections, authorize teams, and set quotas
- Model — two-level model structure and quota semantics
- Model provider reference — field definitions and Embedding adapter details
How is this guide?