# DataHub — referenced via ${VAR} substitution in config.yaml context_platforms DATAHUB_GMS_URL=http://localhost:8080 DATAHUB_GMS_TOKEN= # LLM — set LLM_PROVIDER to "openai", "anthropic", "google", or "bedrock" LLM_PROVIDER=openai # OpenAI (used when LLM_PROVIDER=openai) OPENAI_API_KEY= # LLM_MODEL=gpt-4o # optional override; default: gpt-4o # CHART_LLM_MODEL=gpt-4o-mini # OPENAI_REASONING_EFFORT=low # required for reasoning models (gpt-5*, o-series); routes them # # via the Responses API, which supports function tools. # # One of: minimal, low, medium, high. # # Applied only to reasoning models, so it's safe to leave set even # # when the cheaper tiers (chart/quality/delight) stay on gpt-4o-mini. # Anthropic (used when LLM_PROVIDER=anthropic) ANTHROPIC_API_KEY= # ANTHROPIC_BASE_URL=https://your-proxy.example.com # optional; routes Anthropic API calls via a custom proxy # LLM_MODEL=claude-opus-4-7 # optional override; default: claude-opus-4-7 # CHART_LLM_MODEL=claude-haiku-4-5 # Bedrock (used when LLM_PROVIDER=bedrock) — Anthropic models on AWS Bedrock. # Auth uses the standard AWS credential chain (env vars, ~/.aws/credentials, # IAM role) by default. Set AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY below # to override with explicit keys. AWS_SESSION_TOKEN is optional (STS). AWS_REGION=us-west-2 # AWS_ACCESS_KEY_ID= # AWS_SECRET_ACCESS_KEY= # AWS_SESSION_TOKEN= # Model IDs on Bedrock differ from native Anthropic IDs — use the full # inference-profile ID (e.g. "us.anthropic.claude-sonnet-4-5-20250929-v1:0"). # LLM_MODEL=us.anthropic.claude-sonnet-4-5-20250929-v1:0 # CHART_LLM_MODEL=us.anthropic.claude-haiku-4-5-20251001-v1:0 # Database (pluggable) # PostgreSQL (production): # DATABASE_URL=postgresql+asyncpg://user:pass@localhost:5432/talk_to_data # SQLite (local dev): DATABASE_URL=sqlite+aiosqlite:///./data/dev.db # Connection pool tuning — applied to MySQL / PostgreSQL only (SQLite ignored). # DB_POOL_PRE_PING is required for asyncpg: connections broken by task # cancellation otherwise remain pooled and stall the next checkout. # DB_POOL_SIZE=10 # DB_MAX_OVERFLOW=20 # DB_POOL_RECYCLE=1800 # DB_POOL_PRE_PING=true # DB_POOL_TIMEOUT=10 # asyncpg only: per-statement timeout (s) so a wedged connection's pre-ping # fails fast instead of hanging forever. 0 disables. # DB_COMMAND_TIMEOUT=30 # Engine config ENGINES_CONFIG=./config.yaml SQL_ROW_LIMIT=500 # App LOG_LEVEL=INFO SSE_KEEPALIVE_INTERVAL=15 # Telemetry — analytics-agent sends anonymous usage metrics to help improve the product. # No SQL queries, schema names, user messages, or conversation data are ever collected. # Respects the DataHub CLI opt-out: set DATAHUB_TELEMETRY_ENABLED=false to disable. # DATAHUB_TELEMETRY_ENABLED=true # Observability — OTEL tracing (no-op if endpoint is blank) # OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317 # Jaeger / Grafana Tempo / any OTLP collector # OTEL_EXPORTER_OTLP_ENDPOINT=https://api.honeycomb.io # OTEL_EXPORTER_OTLP_HEADERS=x-honeycomb-team=YOUR_API_KEY # OTEL_SERVICE_NAME=talkster # Snowflake (if using snowflake engine) SNOWFLAKE_ACCOUNT= SNOWFLAKE_WAREHOUSE= SNOWFLAKE_DATABASE= SNOWFLAKE_SCHEMA= SNOWFLAKE_USER= SNOWFLAKE_PASSWORD= # SNOWFLAKE_PRIVATE_KEY= # base64-encoded PEM: base64 -i key.p8 | tr -d '\n' # BigQuery (if using bigquery engine) # BIGQUERY_PROJECT= # BIGQUERY_DATASET= # Option 1 — raw service-account JSON as a single-line string: # BIGQUERY_CREDENTIALS_JSON='{ "type": "service_account"}' # Option 2 — path to a service-account JSON file on disk: # BIGQUERY_CREDENTIALS_PATH=./service_account.json # Option 3 — service-account JSON already base64-encoded: # BIGQUERY_CREDENTIALS_BASE64=ey...