Search Shortcut cmd + k | ctrl + k
ai

AI functions for SQL — completions, classification, extraction, embeddings, and read-only SQL generation across local and hosted model providers

Maintainer(s): leonardovida

Installing and Loading

INSTALL ai FROM community;
LOAD ai;

Example

-- Use a free local model via Ollama (https://ollama.com)
SET duckdb_ai_provider = 'ollama';
SET duckdb_ai_model = 'gemma4:e4b';

SELECT ai_summarize('DuckDB is an analytical database built for fast local queries.');

-- Or a hosted provider, with the key kept in a DuckDB secret
CREATE SECRET openai_ai (TYPE duckdb_ai, AI_PROVIDER 'openai', API_KEY '...', MODEL 'gpt-4o-mini');
SELECT ai_classify('invoice overdue', 'billing, support', secret := 'openai_ai');

About ai

duckdb_ai adds model-backed analytical functions to SQL: completions (ai_complete), text tasks (ai_summarize, ai_classify, ai_extract, ai_translate, ai_redact, ai_filter), structured output validated against a JSON Schema (ai_complete_json, ai_complete_record, ai_extract_record), embeddings and similarity (ai_embed, ai_similarity, ai_rerank), aggregates (ai_agg, ai_summarize_agg), and a SQL assistant that only returns parser-validated read-only SELECT statements (ai_sql, ai_query_data).

It supports local Ollama and OpenAI-compatible servers as well as OpenAI, Azure OpenAI, Anthropic, Gemini, Mistral, DeepSeek, OpenRouter, Databricks, Snowflake Cortex, and Z.ai. Credentials come from environment variables or DuckDB TYPE duckdb_ai secrets — never SQL arguments. The runtime includes concurrency/rate controls, retries with backoff, opt-in response and provider-side prompt caching, batched embedding requests, a network egress allowlist, and local usage/cost tracking via ai_usage().

The extension performs no network calls at load time; providers are only contacted when an ai_* function that needs one is executed. Full docs: https://github.com/leonardovida/duckdb-ai

Added Functions

function_name function_type description comment examples
ai_agg aggregate NULL NULL  
ai_classify scalar NULL NULL  
ai_classify_labels scalar NULL NULL  
ai_clear_cache table NULL NULL  
ai_clear_usage table NULL NULL  
ai_complete scalar NULL NULL  
ai_complete_json scalar NULL NULL  
ai_complete_record table NULL NULL  
ai_completion_request_json scalar NULL NULL  
ai_count_tokens scalar NULL NULL  
ai_embed scalar NULL NULL  
ai_embedding_request_json scalar NULL NULL  
ai_explain_sql table NULL NULL  
ai_extract scalar NULL NULL  
ai_extract_record scalar NULL NULL  
ai_filter scalar NULL NULL  
ai_fix_grammar scalar NULL NULL  
ai_fix_sql table NULL NULL  
ai_is_read_only_sql scalar NULL NULL  
ai_model_prices table NULL NULL  
ai_provider_base_url scalar NULL NULL  
ai_provider_protocol scalar NULL NULL  
ai_query_data table NULL NULL  
ai_recommended_batch_size scalar NULL NULL  
ai_redact scalar NULL NULL  
ai_rerank scalar NULL NULL  
ai_schema_prompt table NULL NULL  
ai_secrets table NULL NULL  
ai_sentiment scalar NULL NULL  
ai_similarity scalar NULL NULL  
ai_sql scalar NULL NULL  
ai_summarize scalar NULL NULL  
ai_summarize_agg aggregate NULL NULL  
ai_translate scalar NULL NULL  
ai_try_complete scalar NULL NULL  
ai_usage table NULL NULL  
ai_validate_read_only_sql scalar NULL NULL  

Overloaded Functions

This extension does not add any function overloads.

Added Types

This extension does not add any types.

Added Settings

name description input_type scope aliases
duckdb_ai_aggregate_model Default AI model for aggregate functions VARCHAR GLOBAL []
duckdb_ai_allowed_hosts Comma-separated AI provider host allowlist for duckdb_ai; empty allows all hosts VARCHAR GLOBAL []
duckdb_ai_base_url Default AI provider base URL override for duckdb_ai VARCHAR GLOBAL []
duckdb_ai_cache Cache successful AI provider responses in the current DuckDB instance BOOLEAN GLOBAL []
duckdb_ai_cache_ttl_seconds Maximum response-cache entry age in seconds between 0 and 31536000; 0 disables age expiry, -1 uses default BIGINT GLOBAL []
duckdb_ai_completion_model Default AI model for completion functions VARCHAR GLOBAL []
duckdb_ai_embedding_model Default AI model for embedding functions VARCHAR GLOBAL []
duckdb_ai_input_token_price_per_million Input token price per million tokens for estimated AI usage cost; -1 disables cost estimates DOUBLE GLOBAL []
duckdb_ai_log_endpoint HTTP endpoint for privacy-minimized AI usage logs VARCHAR GLOBAL []
duckdb_ai_log_format AI usage log payload format: generic_json or otlp_json VARCHAR GLOBAL []
duckdb_ai_log_include_text Include prompt and response text in AI usage logs BOOLEAN GLOBAL []
duckdb_ai_log_sample_rate AI usage log sampling rate between 0 and 1; -1 uses default DOUBLE GLOBAL []
duckdb_ai_log_strict Fail SQL queries when AI usage log delivery fails BOOLEAN GLOBAL []
duckdb_ai_log_tags Optional tag string included in AI usage logs VARCHAR GLOBAL []
duckdb_ai_max_concurrent_requests Maximum concurrent AI provider requests between 0 and 64; 0 disables the limit, -1 uses default BIGINT GLOBAL []
duckdb_ai_min_request_interval_ms Minimum milliseconds between AI provider request starts between 0 and 60000; -1 uses default BIGINT GLOBAL []
duckdb_ai_model Default AI model for duckdb_ai VARCHAR GLOBAL []
duckdb_ai_on_error AI error handling: fail, null, or capture VARCHAR GLOBAL []
duckdb_ai_output_token_price_per_million Output token price per million tokens for estimated AI usage cost; -1 disables cost estimates DOUBLE GLOBAL []
duckdb_ai_prompt_cache Enable provider-side prompt caching hints when supported BOOLEAN GLOBAL []
duckdb_ai_provider Default AI provider for duckdb_ai VARCHAR GLOBAL []
duckdb_ai_response_format Default AI response format: text, json_object, or json_schema VARCHAR GLOBAL []
duckdb_ai_response_schema Default AI JSON schema object for structured responses VARCHAR GLOBAL []
duckdb_ai_retry_backoff_ms AI provider retry backoff in milliseconds between 0 and 60000; -1 uses default BIGINT GLOBAL []
duckdb_ai_retry_count AI provider retry count between 0 and 10; -1 uses default BIGINT GLOBAL []
duckdb_ai_sql_assistant_model Default AI model for SQL assistant functions VARCHAR GLOBAL []
duckdb_ai_task_model Default AI model for text task functions VARCHAR GLOBAL []
duckdb_ai_timeout_seconds AI provider HTTP timeout in seconds; 0 uses the extension default BIGINT GLOBAL []
duckdb_ai_token_limit_per_minute Maximum estimated AI provider tokens per rolling minute between 0 and 10000000000; 0 disables the limit, -1 uses default BIGINT GLOBAL []
duckdb_ai_use_builtin_model_prices Use duckdb_ai built-in model price catalog for estimated AI usage cost BOOLEAN GLOBAL []