ClouisleClouisle

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 nameDefault API Base URLRemote discovery
openaiOpenAIhttps://api.openai.com/v1Yes
openai_responsesOpenAI Responseshttps://api.openai.com/v1Yes
anthropicAnthropichttps://api.anthropic.comYes
googleGoogle AIhttps://generativelanguage.googleapis.com/v1betaYes
azure_openaiAzure OpenAINone (the admin must configure an Endpoint)No
deepseekDeepSeekhttps://api.deepseek.comYes
moonshotMoonshothttps://api.moonshot.cn/v1Yes
zhipuZhipu AIhttps://open.bigmodel.cn/api/paas/v4Yes
qwenQwenhttps://dashscope.aliyuncs.com/compatible-mode/v1Yes
baichuanBaichuanhttps://api.baichuan-ai.com/v1Yes
minimaxMiniMaxhttps://api.minimax.chat/v1Yes
volcengineVolcenginehttps://ark.cn-beijing.volces.com/api/v3Yes
siliconflowSiliconFlowhttps://api.siliconflow.cn/v1Yes
xaixAI (Grok)https://api.x.ai/v1Yes
ollamaOllamahttp://localhost:11434Yes
runwayRunwayhttps://api.dev.runwayml.comNo
pikaPikahttps://api.pika.art/v1No
lumaLuma AIhttps://api.lumalabs.ai/dream-machine/v1No
klingKlinghttps://api.klingai.comNo
stabilityStability AIhttps://api.stability.aiNo
midjourneyMidjourneyNone (requires a self-hosted proxy)No
typesafeTypeSafe AIhttps://api.typesafe.ai/v1Yes
customOpenAI CompatibleNone (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/sse
  • volcengine + audio_generation → https://openspeech.bytedance.com/api/v3/tts/create
  • typesafe + 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:

  • openai uses standard Chat Completions and is the normal choice for chat, embeddings, and TTS/STT.
  • openai_responses uses OpenAI's Responses API (the SDK's client.responses.*) and currently backs the image generation path (the Responses hosted image tool, supporting size, 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)DescriptionProviders supported at runtime
chatChat 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)
embeddingText embeddings (RAG, memory retrieval)15: openai, openai_responses, azure_openai, google, deepseek, moonshot, zhipu, qwen, baichuan, minimax, volcengine, siliconflow, xai, ollama, custom
rerankRetrieval rerankingAny (LLM reranking through the chat model by default; siliconflow or native_rerank: true / rerank_api: "native" switches to the native /rerank endpoint)
ttsText to speechopenai, azure_openai, volcengine, minimax
sttSpeech to textopenai, azure_openai
audio_generationPrompt to audiovolcengine only
text_to_imageText to imageopenai, openai_responses, azure_openai, custom, siliconflow, google, runway, luma, stability, volcengine, minimax
text_to_videoText to videorunway, luma, kling, pika, siliconflow, volcengine, minimax, qwen
decisionTyped 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:

ProviderDiscovery pathAuth
openai / openai_responses / moonshot / baichuan / minimax / siliconflow / xai / custom/v1/modelsAuthorization: Bearer <key>
anthropic/v1/modelsx-api-key: <key> + anthropic-version: 2023-06-01
google/v1beta/modelsQuery parameter ?key=<key>
deepseek/modelsAuthorization: Bearer <key>
zhipu/api/paas/v4/modelsAuthorization: Bearer <key>
qwen/compatible-mode/v1/modelsAuthorization: Bearer <key>
volcengine/api/v3/modelsAuthorization: Bearer <key>
ollama/api/tagsNo auth header, no API Key required
typesafe/v1/modelsAuthorization: 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/name are skipped.
  • Both data (OpenAI-compatible) and models (Google/Ollama) list shapes are recognized, and google strips the models/ prefix.
  • Results carry id, name, context_length, max_output_tokens, and capabilities (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/models is appended. https://gw.example.com/api → requests /api/v1/models.
  • Base URL has no path: the default /v1/models is 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/anything and https://gateway.example.com are the same Origin.
  • Non-default ports participate: http://ollama.internal:11434 differs from http://ollama.internal.
  • 20 official Origins ship by default (including https://api.typesafe.ai, https://openspeech.bytedance.com, and http://localhost:11434); midjourney has 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.

How is this guide?

On this page