| name | dust-llm |
| description | Step-by-step guide for adding support for a new LLM in Dust. Use when adding a new model, or updating a previous one. |
Adding Support for a New LLM Model
This skill guides you through adding support for a newly released LLM.
Quick Reference
Files to Modify
| File | Purpose |
|---|
front/types/assistant/models/{provider}.ts | Model ID + configuration |
front/lib/api/assistant/token_pricing.ts | Pricing per million tokens |
front/types/assistant/models/models.ts | Central registry |
front/lib/api/llm/clients/{provider}/types.ts | Router whitelist |
sdks/js/src/types.ts | SDK types |
front/components/providers/types.ts | UI availability (optional) |
front/lib/api/llm/tests/llm.test.ts | Integration tests |
Prerequisites
Before adding, gather:
- Model ID: Exact provider identifier (e.g.,
gpt-4-turbo-2024-04-09)
- Context size: Total context window in tokens
- Pricing: Input/output cost per million tokens
- Capabilities: Vision, structured output, reasoning effort levels
- Tokenizer: Compatible tokenizer for token counting
Step-by-Step: Adding an OpenAI Model
Step 1: Add Model Configuration
IMPORTANT: Always verify model specs from the official provider docs before adding. Key properties to verify: context window, max output tokens, vision support, structured output support. Add the doc URL as a comment above the config:
- OpenAI:
https://developers.openai.com/api/docs/models/{model-id}
- Anthropic:
https://docs.anthropic.com/en/docs/about-claude/models/overview
- Google:
https://ai.google.dev/gemini-api/docs/models
- Mistral:
https://docs.mistral.ai/getting-started/models/models_overview/
Edit front/types/assistant/models/openai.ts:
export const GPT_4_TURBO_2024_04_09_MODEL_ID = "gpt-4-turbo-2024-04-09" as const;
export const GPT_4_TURBO_2024_04_09_MODEL_CONFIG: ModelConfigurationType = {
providerId: "openai",
modelId: GPT_4_TURBO_2024_04_09_MODEL_ID,
displayName: "GPT 4 turbo",
contextSize: 128_000,
recommendedTopK: 32,
recommendedExhaustiveTopK: 64,
largeModel: true,
description: "OpenAI's GPT 4 Turbo model for complex tasks (128k context).",
shortDescription: "OpenAI's second best model.",
isLegacy: false,
isLatest: false,
generationTokensCount: 2048,
supportsVision: true,
supportedReasoningEfforts: {
none: true,
light: true,
medium: true,
high: true,
},
defaultReasoningEffort: "none",
supportsResponseFormat: false,
tokenizer: { type: "tiktoken", base: "cl100k_base" },
};
Step 2: Add Pricing
IMPORTANT: Always verify pricing from the official provider page before adding:
Add a comment with the source URL above each model's pricing entry.
Edit front/lib/api/assistant/token_pricing.ts:
const CURRENT_MODEL_PRICING: Record<BaseModelIdType, PricingEntry> = {
"gpt-4-turbo-2024-04-09": {
input: 10.0,
output: 30.0,
cache_read_input_tokens: 1.0,
cache_creation_input_tokens: 12.5,
},
};
Step 3: Register in Central Registry
Edit front/types/assistant/models/models.ts:
export const MODEL_IDS = [
GPT_4_TURBO_2024_04_09_MODEL_ID,
] as const;
export const SUPPORTED_MODEL_CONFIGS: ModelConfigurationType[] = [
GPT_4_TURBO_2024_04_09_MODEL_CONFIG,
];
Step 4: Update Router Whitelist
Edit front/lib/api/llm/clients/openai/types.ts:
export const OPENAI_WHITELISTED_MODEL_IDS = [
GPT_4_TURBO_2024_04_09_MODEL_ID,
] as const;
Step 5: Update SDK Types
Edit sdks/js/src/types.ts:
const ModelLLMIdSchema = FlexibleEnumSchema<
| "gpt-4-turbo-2024-04-09"
>();
Step 6: Add to UI (Optional)
Edit front/components/providers/types.ts:
export const USED_MODEL_CONFIGS: readonly ModelConfig[] = [
GPT_4_TURBO_2024_04_09_MODEL_CONFIG,
] as const;
Step 7: Test (Mandatory)
Edit front/lib/api/llm/tests/llm.test.ts:
const MODELS = {
[GPT_4_TURBO_2024_04_09_MODEL_ID]: {
runTest: true,
providerId: "openai",
},
};
Run test:
RUN_LLM_TEST=true npx vitest --config lib/api/llm/tests/vite.config.js lib/api/llm/tests/llm.test.ts --run
After test passes, set runTest: false to avoid expensive CI runs.
Adding Anthropic Models
Same pattern with Anthropic-specific files:
front/types/assistant/models/anthropic.ts - Add CLAUDE_X_MODEL_ID and config
front/lib/api/llm/clients/anthropic/types.ts - Add to ANTHROPIC_WHITELISTED_MODEL_IDS
front/types/assistant/models/models.ts - Register in central registry
front/lib/api/assistant/token_pricing.ts - Add pricing
sdks/js/src/types.ts - Update SDK types
- Test and validate
Model Configuration Properties
| Property | Description |
|---|
supportsVision | Can process images |
supportsResponseFormat | Supports structured output (JSON) |
supportedReasoningEfforts | Supported reasoning levels (none, light, medium, high) |
defaultReasoningEffort | Default reasoning level |
tokenizer | Tokenizer config for token counting |
Validation Checklist
Troubleshooting
Model not in UI: Check USED_MODEL_CONFIGS in front/components/providers/types.ts
API calls failing: Verify model ID matches provider's exact identifier, check router whitelist
Token counting errors: Validate context size and tokenizer configuration
Pricing issues: Ensure prices are per million tokens in USD
Reference
- See
front/types/assistant/models/openai.ts and anthropic.ts for examples
- Provider docs: OpenAI, Anthropic, Google, Mistral