Model Configuration
This guide explains how Self-Managed Kindo installations define and maintain global models — the system-wide LLMs (and related models like embeddings or transcription) that power workflows, chat, ingestion, and other core experiences.
In a self-managed environment, you add models to Kindo, map them to Unleash feature variants, and keep those mappings up to date when models are replaced.
Unleash Features and Strategy Variants
Each key below is an Unleash feature whose variant payload contains one or more global model IDs. The backend and frontend read these variants to decide which models to use.
Required Features
| Feature Key | Description |
|---|---|
AUDIO_TRANSCRIPTION | Converts audio to text |
CRON_EXPRESSION_GENERATION | Generates cron expressions from natural language schedule descriptions |
DEFAULT_WORKFLOW_STEP_MODEL | Default model for workflow step execution |
EMBEDDING_MODELS | Models for generating text embeddings |
INGESTION_WORKERS | Models for data ingestion and extraction |
INTERNAL_AUTO_GENERATION | Internal model for automatic content generation |
INTERNAL_LARGE_WORKER | High-capacity internal worker for complex tasks |
INTERNAL_SMALL_WORKER | Lightweight internal worker for simple tasks |
LOCAL_STORAGE_CHAT_MODELS | Default chat model for the model dropdown |
GENERAL_PURPOSE_MODELS | Versatile models for selection categories and “Recommend Model” |
LONG_CONTEXT_MODELS | Models optimized for long context windows |
Optional Features
| Feature Key | Description | Notes |
|---|---|---|
API_STEP_GENERATION | Models for generating API steps in workflows | |
DYNAMIC_API_REQUEST_PARSER | Parses dynamic API requests | |
SLACK_MESSAGE_GENERATION | Generates Slack messages | Only if Slack integration is enabled |
AGENT_MODEL | Models for ReAct-Agent interactions | |
STREAMING_UNSUPPORTED_MODELS | Models without streaming support | Used for UI loading states |
GEMINI_CHAT_MODELS | Google Gemini models | Only if multimodal chat is enabled |
Conditional Features
| Feature Key | Description | Notes |
|---|---|---|
REASONING_MODELS | Models for complex reasoning | Required only if OpenAI o-series models exist |
CYBERSECURITY_MODELS | Models for cybersecurity analysis | Required only if DeepHat is available |
Minimum Model Requirements
Self-Managed Kindo needs baseline global models to function. Without them, core flows like chat, workflow execution, ingestion, and indexing will fail.
Absolute Minimum Set
| Model Type | Purpose | Recommendations |
|---|---|---|
| Embedding model | Semantic search, retrieval, and indexing | Open source: BAAI/bge-m3. Hosted: Gemini embedding |
| Strong/large model | Complex reasoning, workflow execution, long-form generation | Open source: gpt-oss 120B. Hosted: Gemini 2.5 Pro, Claude 4.5, GPT 5.2 |
| Audio transcription | Audio file processing, voice notes, transcription workflows | Open source: Faster Whisper. Hosted: Deepgram |
Recommended Additional Models
- Small model (title generation, quick summaries, low-latency steps): Gemma 3 or Llama 3.2 7B
- Security-focused: DeepHat 32B
- Multimodal: Gemini 2.5 Pro (image + text)
Managing Models
Overview of Steps
- Add the new model via the API.
- Update Unleash variants to reference the new model IDs.
- Delete the old model with replacement.
Add a Global Model
curl -X POST <API_URL>/internal/openapi/admin/model/new \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer <UM_INTERNAL_API_KEY>' \ -d '{ "orgId": "<YOUR_ORG_ID>", "userId": "<YOUR_USER_ID>", "displayName": "Model Display Name", "modelProviderDisplayName": "Provider Name", "type": "CHAT", "contextWindow": 200000, "metadata": { "type": "Text Generation", "costTier": "HIGH", "usageTag": "Chat + Agents", "description": "Model description", "modelCreator": "Provider Name" }, "litellmModelName": "model-name", "litellmParams": { "model": "provider/model-name", "api_key": "<API_KEY>", "max_output_tokens": 64000 } }'Delete with Replacement
curl -X POST <API_URL>/internal/openapi/admin/model/delete-with-replacement \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer <UM_INTERNAL_API_KEY>' \ -d '{ "deletingModelId": "<OLD_MODEL_ID>", "replacementModelId": "<NEW_MODEL_ID>", "orgId": "<YOUR_ORG_ID>", "userId": "<YOUR_USER_ID>" }'Update Parameters on an Existing Model
To modify LiteLLM parameters for an existing model, update the LiteLLM database directly:
UPDATE "public"."LiteLLM_ProxyModelTable"SET "litellm_params" = jsonb_set( "litellm_params", '{max_tokens}', '64000'::jsonb)WHERE "model_name" = 'your-model-name';