Dhara
Guides

Configure Providers

Set up LLM providers — from built-in OpenAI and Anthropic to 20+ via pi-ai.

Configure Providers

Dhara supports multiple LLM providers through three adapter layers:

  1. Built-in providers — OpenAI and Anthropic (zero extra dependencies)
  2. pi-ai adapter — 20+ providers via @earendil-works/pi-ai
  3. Custom providers — Implement the Provider interface for any API

The easiest way to configure a provider is via /login inside the TUI:

# Start Dhara
dhara

# Type /login and follow the prompts:
# 1. Choose "API Key" as auth type
# 2. Select your provider
# 3. Enter your API key (masked)

Your credentials are stored in ~/.dhara/config.json.

Built-in Providers

OpenAI

export OPENAI_API_KEY="sk-..."
dhara --provider openai --model gpt-4o

Works with any OpenAI-compatible endpoint:

dhara --provider openai --model your-model --base-url https://api.custom.ai/v1

Anthropic

export ANTHROPIC_API_KEY="sk-ant-..."
dhara --provider anthropic --model claude-sonnet-4-20250514

pi-ai Providers

The pi-ai adapter provides access to 20+ providers with no additional dependencies:

export GOOGLE_API_KEY="..."
dhara --provider google --model gemini-2.5-flash
export MISTRAL_API_KEY="..."
dhara --provider mistral --model mistral-large-latest
export GROQ_API_KEY="gsk_..."
dhara --provider groq --model llama-3.3-70b-versatile
export DEEPSEEK_API_KEY="..."
dhara --provider deepseek --model deepseek-chat
# Configure AWS credentials via aws cli or env vars
dhara --provider amazon-bedrock --model anthropic.claude-3-5-sonnet-20241022-v2:0

Full Provider List

ProviderFlagEnv Var
Google Gemini--provider googleGOOGLE_API_KEY
Google Vertex--provider google-vertexGCP credentials
Mistral--provider mistralMISTRAL_API_KEY
Groq--provider groqGROQ_API_KEY
DeepSeek--provider deepseekDEEPSEEK_API_KEY
Amazon Bedrock--provider amazon-bedrockAWS credentials
Azure OpenAI--provider azure-openai-responsesAZURE_OPENAI_API_KEY
Cerebras--provider cerebrasCEREBRAS_API_KEY
Fireworks--provider fireworksFIREWORKS_API_KEY
OpenRouter--provider openrouterOPENROUTER_API_KEY

Setting a Default Provider

Set your default provider in the global config:

# Edit global config
nano ~/.dhara/config.json
{
  "provider": "openai",
  "model": "gpt-4o"
}

Or set it per-project in .dhara/config.json:

{
  "provider": "google",
  "model": "gemini-2.5-flash"
}

Streaming Support

Both built-in providers support SSE streaming. When enabled, you'll see tokens appear progressively:

# Streaming is automatic — no extra flags needed
dhara --provider openai --model gpt-4o

In JSON mode (--json), streaming events are emitted as message:delta objects.

Custom Provider

Implement the Provider interface for any API:

import type { Provider, CompleteParams, CompleteResult } from "@zosmaai/dhara/core";

class MyProvider implements Provider {
  async complete(params: CompleteParams): Promise<CompleteResult> {
    // Call your API here
    // Optionally stream via params.eventBus
    return {
      content: [{ type: "text", text: "Response from my provider" }],
      usage: { inputTokens: 100, outputTokens: 50 },
    };
  }
}