AI-Generated Placeholder Documentation
This documentation page has been automatically generated by a Large Language Model (LLM) and serves as placeholder content. The information provided here may be incomplete, inaccurate, or subject to change.
For accurate and complete information, please refer to the Vanna source code on GitHub.
Python SDK Reference
Complete reference for the Vanna 2.0 Python SDK.
Installation
pip install vanna Optional Dependencies
# Database integrations
pip install vanna[postgres]
pip install vanna[mysql]
pip install vanna[snowflake]
pip install vanna[bigquery]
pip install vanna[duckdb]
# LLM providers
pip install vanna[anthropic]
pip install vanna[openai]
# All integrations
pip install vanna[all] Core Classes
Agent
The main orchestrator for your AI agent.
from vanna import Agent
agent = Agent(
llm_service: LlmService,
tool_registry: ToolRegistry,
user_resolver: UserResolver,
agent_memory: AgentMemory,
conversation_store: Optional[ConversationStore] = None,
config: AgentConfig = AgentConfig(),
system_prompt_builder: SystemPromptBuilder = DefaultSystemPromptBuilder(),
lifecycle_hooks: List[LifecycleHook] = [],
llm_middlewares: List[LlmMiddleware] = [],
workflow_handler: Optional[WorkflowHandler] = None,
error_recovery_strategy: Optional[ErrorRecoveryStrategy] = None,
context_enrichers: List[ToolContextEnricher] = [],
llm_context_enhancer: Optional[LlmContextEnhancer] = None,
conversation_filters: List[ConversationFilter] = [],
observability_provider: Optional[ObservabilityProvider] = None,
audit_logger: Optional[AuditLogger] = None
) Methods:
# Send a message to the agent
async def send_message(
request_context: RequestContext,
message: str,
*,
conversation_id: Optional[str] = None
) -> AsyncGenerator[UiComponent, None]
# Get available tools for a user
async def get_available_tools(user: User) -> List[ToolSchema] Tool
Base class for creating tools.
from vanna.core.tool import Tool, ToolContext, ToolResult
from pydantic import BaseModel, Field
from typing import Type, List
# Define the arguments schema using Pydantic
class MyToolArgs(BaseModel):
text: str = Field(description="The text to process")
count: int = Field(default=1, description="Number of times to repeat")
# Implement the tool
class MyTool(Tool[MyToolArgs]):
@property
def name(self) -> str:
return "my_tool"
@property
def description(self) -> str:
return "A tool that processes text"
@property
def access_groups(self) -> List[str]:
return [] # Empty = all users can access
def get_args_schema(self) -> Type[MyToolArgs]:
return MyToolArgs
async def execute(
self,
context: ToolContext,
args: MyToolArgs
) -> ToolResult:
# Tool implementation
result = args.text * args.count
return ToolResult(
success=True,
result_for_llm=f"Processed: {result}",
ui_component=None, # Optional UI component
metadata={"length": len(result)}
) Registering Tools:
from vanna import ToolRegistry
# Create registry
registry = ToolRegistry()
# Register a tool (accessible to all users)
registry.register_local_tool(MyTool(), access_groups=[])
# Register a tool with access restrictions
registry.register_local_tool(MyTool(), access_groups=["admin"]) User
Represents an authenticated user.
from vanna.core.user import User
user = User(
id: str,
username: str,
email: Optional[str] = None,
permissions: List[str] = [],
group_memberships: List[str] = [],
metadata: Dict[str, Any] = {}
) LLM Integrations
Anthropic
from vanna.integrations.anthropic import AnthropicLlmService
llm = AnthropicLlmService(
api_key="sk-ant-...", # Optional, defaults to ANTHROPIC_API_KEY env var
model="claude-sonnet-4-5" # Optional, defaults to "claude-sonnet-4-5"
) OpenAI
from vanna.integrations.openai import OpenAILlmService
llm = OpenAILlmService(
api_key="sk-...", # Optional, defaults to OPENAI_API_KEY env var
model="gpt-5", # Optional
organization="org-..." # Optional
) Database Integrations
PostgreSQL
from vanna.integrations.postgres import PostgresRunner
sql_runner = PostgresRunner(
connection_string="postgresql://user:pass@host:5432/db"
)
# Or using individual parameters
sql_runner = PostgresRunner(
host="localhost",
port=5432,
database="mydb",
user="user",
password="pass"
) MySQL
from vanna.integrations.mysql import MySQLRunner
sql_runner = MySQLRunner(
host="localhost",
database="mydb",
user="user",
password="pass",
port=3306
) SQLite
from vanna.integrations.sqlite import SqliteRunner
sql_runner = SqliteRunner(
database_path="./data.db"
) Snowflake
from vanna.integrations.snowflake import SnowflakeRunner
sql_runner = SnowflakeRunner(
account="account",
username="user",
password="pass",
database="db",
warehouse="warehouse",
role="role"
) BigQuery
from vanna.integrations.bigquery import BigQueryRunner
sql_runner = BigQueryRunner(
project_id="project",
cred_file_path="./credentials.json"
) DuckDB
from vanna.integrations.duckdb import DuckDBRunner
# File-based database
sql_runner = DuckDBRunner(
database_path="./data.duckdb"
)
# In-memory database
sql_runner = DuckDBRunner(
database_path=":memory:"
) Memory Backends
Chroma (Local)
from vanna.integrations.chromadb import ChromaAgentMemory
memory = ChromaAgentMemory(
persist_directory="./chroma_memory",
collection_name="tool_memories"
) In-Memory (Demo)
from vanna.integrations.local.agent_memory import DemoAgentMemory
memory = DemoAgentMemory() Built-in Tools
RunSqlTool
from vanna.tools import RunSqlTool
tool = RunSqlTool(
sql_runner=sql_runner,
file_system=file_system,
custom_tool_name=None,
custom_tool_description=None
) VisualizeDataTool
from vanna.tools import VisualizeDataTool
tool = VisualizeDataTool(
file_system=file_system
) File System Tools
from vanna.tools.file_system import (
ReadFileTool,
WriteFileTool,
EditFileTool,
ListFilesTool,
SearchFilesTool
)
from vanna.integrations.local import LocalFileSystem
fs = LocalFileSystem()
read_tool = ReadFileTool(file_system=fs)
write_tool = WriteFileTool(file_system=fs)
edit_tool = EditFileTool(file_system=fs)
list_tool = ListFilesTool(file_system=fs)
search_tool = SearchFilesTool(file_system=fs) Servers
FastAPI
from vanna.servers.fastapi import VannaFastAPIServer
server = VannaFastAPIServer(
agent=agent,
config={
"cors": {
"enabled": True,
"allow_origins": ["*"]
}
}
)
# Create ASGI app
app = server.create_app()
# Or run directly
server.run(host="0.0.0.0", port=8000) Flask
from vanna.servers.flask import VannaFlaskServer
server = VannaFlaskServer(
agent=agent,
config={}
)
app = server.create_app()
server.run(host="0.0.0.0", port=5000) Configuration
AgentConfig
from vanna.core.agent import AgentConfig, UiFeatures, AuditConfig
config = AgentConfig(
max_tool_iterations=10,
stream_responses=True,
auto_save_conversations=True,
temperature=0.7,
max_tokens=None,
ui_features=UiFeatures(
feature_group_access={
'tool_names': ['admin'],
'tool_arguments': ['admin'],
'tool_error': ['admin']
}
),
audit_config=AuditConfig(
enabled=True,
log_tool_invocations=True,
log_tool_results=True
)
) Components
UiComponent
from vanna.components import UiComponent
from vanna.components.rich import DataFrameComponent
from vanna.components.simple import SimpleTextComponent
ui = UiComponent(
rich_component=DataFrameComponent(...),
simple_component=SimpleTextComponent(text="...")
) DataFrameComponent
from vanna.components.rich import DataFrameComponent
component = DataFrameComponent.from_records(
records=[{'col1': 'val1', 'col2': 'val2'}],
title="My Data",
description="Description"
) ChartComponent
from vanna.components.rich import ChartComponent
chart = ChartComponent(
type="plotly", # or "vega-lite"
spec={...},
title="Chart Title"
) Type Hints
All Vanna classes include complete type hints for IDE support:
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from vanna.core.tool import Tool, ToolContext, ToolResult
from vanna.core.user import User
from vanna.core.agent import Agent Examples
See the examples directory in the GitHub repository for complete working examples.