adk-llm-bridge

Use any LLM with Google ADK TypeScript in just a few lines of code.
Why?
Google ADK TypeScript comes with built-in Gemini support. This bridge extends it to work with any model from providers like Anthropic, OpenAI, Meta, and more—while keeping all ADK features like multi-agent orchestration, tool calling, and streaming.
Key Benefits
- Simple — 3 lines to integrate any model
- Battle-tested — Built on the official OpenAI and Anthropic SDKs
- Compatible — Works with any OpenAI-compatible API (AI Gateway, OpenRouter, etc.)
Supported Providers
| Vercel AI Gateway | 100+ models (Claude, GPT, Llama, Gemini, etc.) | Simple, fast |
| OpenRouter | 100+ models | Provider routing, fallbacks, price optimization |
| OpenAI | GPT-4, o1, o3, etc. | Direct API access |
| Anthropic | Claude models | Direct API access |
| xAI | Grok models | Direct API access |
| Custom (OpenAI-compatible) | Any model | Ollama, vLLM, Azure OpenAI, LM Studio, etc. |
Installation
bun add adk-llm-bridge @google/adk
pnpm add adk-llm-bridge @google/adk
npm install adk-llm-bridge @google/adk
Quick Start
import { LlmAgent } from '@google/adk';
import { AIGateway } from 'adk-llm-bridge';
const agent = new LlmAgent({
name: 'assistant',
model: AIGateway('anthropic/claude-sonnet-4'),
instruction: 'You are a helpful assistant.',
});
That's it. All ADK features work: tools, streaming, multi-agent, etc.
Other Providers
import { OpenRouter, OpenAI, Anthropic, XAI, Custom } from 'adk-llm-bridge';
model: OpenRouter('anthropic/claude-sonnet-4')
model: OpenAI('gpt-4.1')
model: Anthropic('claude-sonnet-4-5')
model: XAI('grok-3-beta')
model: Custom('your-model', { baseURL: 'http://localhost:1234/v1' })
See the examples directory for complete implementations.
Using LLMRegistry (Alternative)
You can also register providers with ADK's LLMRegistry to use string-based model names:
import { LlmAgent, LLMRegistry } from '@google/adk';
import { AnthropicLlm } from 'adk-llm-bridge';
LLMRegistry.register(AnthropicLlm);
const agent = new LlmAgent({
name: 'assistant',
model: 'claude-sonnet-4-5',
instruction: 'You are a helpful assistant.',
});
Configuration
Environment Variables
AI Gateway:
AI_GATEWAY_API_KEY=your-api-key
AI_GATEWAY_URL=https://ai-gateway.vercel.sh/v1
OpenRouter:
OPENROUTER_API_KEY=your-api-key
OPENROUTER_SITE_URL=https://your-site.com
OPENROUTER_APP_NAME=Your App Name
Direct Providers:
OPENAI_API_KEY=your-openai-key
ANTHROPIC_API_KEY=your-anthropic-key
XAI_API_KEY=your-xai-key
Programmatic Configuration
Pass options directly to the factory functions:
import { AIGateway, OpenRouter, Anthropic } from 'adk-llm-bridge';
model: AIGateway('anthropic/claude-sonnet-4', {
apiKey: process.env.MY_API_KEY,
baseURL: 'https://my-gateway.example.com/v1',
})
model: OpenRouter('anthropic/claude-sonnet-4', {
apiKey: process.env.OPENROUTER_API_KEY,
siteUrl: 'https://your-site.com',
appName: 'Your App',
})
model: Anthropic('claude-sonnet-4-5', {
apiKey: process.env.ANTHROPIC_API_KEY,
maxTokens: 8192,
})
Model Format
Use the provider/model format:
anthropic/claude-sonnet-4
openai/gpt-5
google/gemini-3-flash
meta/llama-4-maverick
mistral/mistral-large-3
xai/grok-4.1
deepseek/deepseek-chat
Popular Models
| Anthropic | anthropic/claude-sonnet-4, anthropic/claude-opus-4.5 |
| OpenAI | openai/gpt-5, openai/gpt-5-mini, openai/o3 |
| Google | google/gemini-3-flash, google/gemini-3-pro, google/gemini-2.5-pro |
| Meta | meta/llama-4-maverick, meta/llama-4-scout, meta/llama-3.3-70b-instruct |
| Mistral | mistral/mistral-large-3, mistral/ministral-3-14b |
| xAI | xai/grok-4.1, xai/grok-4, xai/grok-3 |
| DeepSeek | deepseek/deepseek-chat, deepseek/deepseek-reasoner |
Browse all models:
Features
- Text generation - Simple prompt/response
- Streaming - Real-time token streaming
- Tool calling - Function calling with automatic conversion
- Multi-turn - Full conversation history support
- Multi-agent - Sub-agents and agent transfer
- Usage metadata - Token counts for monitoring
Tool Calling Example
import { FunctionTool, LlmAgent } from '@google/adk';
import { Anthropic } from 'adk-llm-bridge';
import { z } from 'zod';
const getWeather = new FunctionTool({
name: 'get_weather',
description: 'Get current weather for a city',
parameters: z.object({
city: z.string().describe('City name'),
}),
execute: ({ city }) => {
return { status: 'success', weather: 'sunny', city };
},
});
const agent = new LlmAgent({
name: 'weather-assistant',
model: Anthropic('claude-sonnet-4-5'),
instruction: 'You help users check the weather.',
tools: [getWeather],
});
API Reference
Factory Functions
AIGateway(model, options?) | Vercel AI Gateway (100+ models) |
OpenRouter(model, options?) | OpenRouter (100+ models) |
OpenAI(model, options?) | OpenAI direct API |
Anthropic(model, options?) | Anthropic direct API |
XAI(model, options?) | xAI direct API |
Custom(model, options) | Any OpenAI-compatible API |
Configuration Options
AIGateway:
apiKey | string | process.env.AI_GATEWAY_API_KEY | API key |
baseURL | string | https://ai-gateway.vercel.sh/v1 | Gateway URL |
timeout | number | 60000 | Request timeout (ms) |
maxRetries | number | 2 | Max retry attempts |
**OpenRouter:
apiKey | string | process.env.OPENROUTER_API_KEY | API key |
baseURL | string | https://openrouter.ai/api/v1 | API URL |
siteUrl | string | process.env.OPENROUTER_SITE_URL | Your site URL (for ranking) |
appName | string | process.env.OPENROUTER_APP_NAME | Your app name (for ranking) |
provider | object | - | Provider routing preferences |
timeout | number | 60000 | Request timeout (ms) |
maxRetries | number | 2 | Max retry attempts |
**OpenAI:
apiKey | string | process.env.OPENAI_API_KEY | API key |
organization | string | process.env.OPENAI_ORGANIZATION | Organization ID |
project | string | process.env.OPENAI_PROJECT | Project ID |
timeout | number | 60000 | Request timeout (ms) |
maxRetries | number | 2 | Max retry attempts |
**Anthropic:
apiKey | string | process.env.ANTHROPIC_API_KEY | API key |
maxTokens | number | 4096 | Max tokens in response |
timeout | number | 60000 | Request timeout (ms) |
maxRetries | number | 2 | Max retry attempts |
**XAI:
apiKey | string | process.env.XAI_API_KEY | API key |
timeout | number | 60000 | Request timeout (ms) |
maxRetries | number | 2 | Max retry attempts |
**Custom:
model | string | - | Model name (required) |
baseURL | string | - | API base URL (required) |
name | string | "custom" | Provider name for logs/errors |
apiKey | string | - | API key for authentication |
headers | Record<string, string> | - | Additional HTTP headers |
queryParams | Record<string, string> | - | Query parameters for all requests |
providerOptions | Record<string, unknown> | - | Additional options for request body |
timeout | number | 60000 | Request timeout (ms) |
maxRetries | number | 2 | Max retry attempts |
Examples
See the examples directory:
Requirements
- Node.js >= 18.0.0
@google/adk >= 0.2.2
Contributing
See CONTRIBUTING.md for development setup and guidelines.
License
MIT