Documentation Index Fetch the complete documentation index at: https://mintlify.com/directus/directus/llms.txt
Use this file to discover all available pages before exploring further.
Directus includes built-in AI integration capabilities, allowing you to leverage large language models from multiple providers for content generation, data processing, and intelligent automation.
Supported AI Providers
Directus supports the following AI providers out of the box:
OpenAI - GPT-4, GPT-5 series models
Anthropic - Claude models (Haiku, Sonnet, Opus)
Google - Gemini models
OpenAI-Compatible - Custom endpoints compatible with OpenAI API
Configuration
OpenAI
# Enable OpenAI
AI_OPENAI_ENABLED = true
AI_OPENAI_API_KEY = "sk-..."
# Optional: Custom endpoint
AI_OPENAI_BASE_URL = "https://api.openai.com/v1"
# Allowed models (comma-separated)
AI_OPENAI_ALLOWED_MODELS = "gpt-4o-mini,gpt-4.1,gpt-5"
Anthropic
AI_ANTHROPIC_ENABLED = true
AI_ANTHROPIC_API_KEY = "sk-ant-..."
AI_ANTHROPIC_ALLOWED_MODELS = "claude-haiku-4-5,claude-sonnet-4-5,claude-opus-4-5"
Google
AI_GOOGLE_ENABLED = true
AI_GOOGLE_API_KEY = "..."
AI_GOOGLE_ALLOWED_MODELS = "gemini-2.5-flash,gemini-2.5-pro,gemini-3-pro-preview"
OpenAI-Compatible Provider
AI_OPENAI_COMPATIBLE_ENABLED = true
AI_OPENAI_COMPATIBLE_BASE_URL = "https://your-api.example.com/v1"
AI_OPENAI_COMPATIBLE_API_KEY = "..."
# Define custom models
AI_OPENAI_COMPATIBLE_MODELS = 'json:[
{
"id": "custom-model-1",
"name": "Custom Model",
"context": 128000,
"output": 4096,
"attachment": true,
"reasoning": false
}
]'
Available Models
Directus includes definitions for popular AI models with their capabilities and pricing:
OpenAI Models
gpt-4o-mini - Fast, cost-effective (128k context)
gpt-4.1-nano - Entry-level GPT-4.1 (1M context)
gpt-4.1-mini - Balanced GPT-4.1 (1M context)
gpt-4.1 - Full GPT-4.1 (1M context)
gpt-5-nano - Entry-level GPT-5 with reasoning (400k context)
gpt-5-mini - Balanced GPT-5 with reasoning (400k context)
gpt-5 - Standard GPT-5 with reasoning (400k context)
gpt-5.2 - Latest GPT-5 with reasoning (400k context)
gpt-5.2-pro - Premium GPT-5 with reasoning (400k context)
Anthropic Models
claude-haiku-4-5 - Fast, cost-effective (200k context)
claude-sonnet-4-5 - Balanced with reasoning (200k context)
claude-opus-4-5 - Most capable with reasoning (200k context)
Google Models
gemini-2.5-flash - Fast, cost-effective (1M context)
gemini-2.5-pro - Balanced (1M context)
gemini-3-flash-preview - Next-gen flash (1M context)
gemini-3-pro-preview - Next-gen pro (1M context)
Model Capabilities
Each model definition includes:
interface ModelDefinition {
provider : 'openai' | 'anthropic' | 'google' | 'openai-compatible' ;
model : string ; // Model identifier
name : string ; // Display name
limit : {
context : number ; // Max context tokens
output : number ; // Max output tokens
};
cost : {
input : number ; // Cost per 1M input tokens (USD)
output : number ; // Cost per 1M output tokens (USD)
};
attachment : boolean ; // Supports file/image attachments
reasoning : boolean ; // Supports chain-of-thought reasoning
}
Example:
{
provider : 'openai' ,
model : 'gpt-5' ,
name : 'GPT-5' ,
limit : {
context : 400_000 ,
output : 128_000
},
cost : {
input : 1.25 , // $1.25 per 1M tokens
output : 10.0 // $10.00 per 1M tokens
},
attachment : true ,
reasoning : true
}
Using AI in Flows
AI can be integrated into flows for automated content processing:
AI Operation Example
{
trigger : 'event' ,
options : {
type : 'action' ,
scope : [ 'items.create' ],
collections : [ 'articles' ]
},
operations : [
{
operation: 'ai-generate' ,
options: {
provider: 'openai' ,
model: 'gpt-4.1' ,
prompt: 'Generate SEO meta description for: {{$trigger.title}} \n\n Content: {{$trigger.content}}' ,
maxTokens: 160 ,
temperature: 0.7
},
resolve: 'update-meta'
},
{
id: 'update-meta' ,
operation: 'item-update' ,
options: {
collection: 'articles' ,
key: '{{$trigger.id}}' ,
payload: {
meta_description: '{{$last.content}}'
}
}
}
]
}
Directus AI supports tool calling for structured outputs:
items - Read/write collection items
files - Access file metadata
folders - Manage file folders
assets - Work with uploaded assets
flows - Interact with flows
trigger-flow - Execute flows
operations - Flow operations
schema - Database schema info
collections - Collection metadata
fields - Field definitions
relations - Relationship metadata
type ToolApprovalMode = 'always' | 'ask' | 'disabled' ;
always - AI can use tools without confirmation
ask - Require user approval before tool execution
disabled - Tools not available to AI
File Attachments
Models with attachment: true support image and file inputs:
{
operation : 'ai-analyze-image' ,
options : {
provider : 'anthropic' ,
model : 'claude-sonnet-4-5' ,
prompt : 'Describe this image in detail' ,
attachments : [
{
type: 'file' ,
fileId: '{{$trigger.image}}'
}
]
}
}
Reasoning Models
Models with reasoning: true support chain-of-thought:
{
operation : 'ai-analyze' ,
options : {
provider : 'openai' ,
model : 'gpt-5' , // Reasoning enabled
prompt : 'Analyze the sentiment and key themes in these customer reviews' ,
enableReasoning : true ,
data : '{{$trigger.reviews}}'
}
}
Reasoning models:
Think step-by-step before responding
Provide explanation of their reasoning
Better at complex analysis and problem-solving
Higher cost and latency
Context Management
Context Limits
Each model has a maximum context window:
// Check model limits
const model = getModelDefinition ( 'gpt-5' );
console . log ( `Context: ${ model . limit . context } tokens` );
console . log ( `Output: ${ model . limit . output } tokens` );
Prompt Optimization
// Keep prompts focused
const prompt = `
Task: Generate a summary
Content:
{{$trigger.content | truncate(10000)}}
Requirements:
- Max 3 sentences
- Highlight key points
- Professional tone
` ;
Cost Tracking
Track AI usage and costs:
// Model costs per 1M tokens
const inputCost = model . cost . input ;
const outputCost = model . cost . output ;
// Calculate cost for request
const estimatedCost =
( inputTokens / 1_000_000 * inputCost ) +
( outputTokens / 1_000_000 * outputCost );
Custom Models
Define custom models for OpenAI-compatible APIs:
import { buildCustomModels } from '@directus/ai' ;
const customModels = buildCustomModels ([
{
id: 'my-custom-model' ,
name: 'My Custom Model' ,
context: 32000 ,
output: 4096 ,
attachment: false ,
reasoning: false
}
]);
Streaming Responses
Stream AI responses for better UX:
const stream = await ai . generateStream ({
model: 'gpt-4.1' ,
prompt: 'Write a detailed article about...' ,
stream: true
});
for await ( const chunk of stream ) {
process . stdout . write ( chunk . content );
}
Error Handling
try {
const result = await ai . generate ({
provider: 'openai' ,
model: 'gpt-5' ,
prompt: userPrompt
});
} catch ( error ) {
if ( error . code === 'RATE_LIMIT_EXCEEDED' ) {
// Handle rate limiting
} else if ( error . code === 'CONTEXT_LENGTH_EXCEEDED' ) {
// Prompt too long
} else if ( error . code === 'INVALID_API_KEY' ) {
// Authentication failed
}
}
Best Practices
Use faster, cheaper models (mini/nano) for simple tasks. Reserve premium models (opus/pro) for complex reasoning.
Keep prompts concise and only include necessary context to reduce costs and latency.
Set up rate limits to prevent runaway API costs from automated flows.
Cache frequently requested AI generations to reduce API calls.
Track token usage and costs, especially in production environments.