Providers
Every provider implements the same LLMProvider interface. Swapping one for another is a single-line change in createAgent().
Quick start
import { createAgent } from 'confused-ai';
import { OpenAIProvider } from 'confused-ai';
const agent = createAgent({
name: 'assistant',
instructions: 'You are a helpful assistant.',
llm: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY! }),
});
const result = await agent.run('Explain transformers in two sentences.');
console.log(result.text);Swap OpenAIProvider for any provider below — the rest of the agent code stays the same.
Native SDK providers
These providers use their official SDKs at runtime (peer dependencies — install only what you use).
OpenAI
import { OpenAIProvider } from 'confused-ai';
const llm = new OpenAIProvider({
apiKey: process.env.OPENAI_API_KEY!,
model: 'gpt-4o', // default: gpt-4o
// baseURL: '...' // override for custom endpoints
// debug: true // log raw API calls
});Install: npm install openai
Popular models: gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-nano, o3-mini, o4-mini
Anthropic
import { AnthropicProvider } from 'confused-ai';
const llm = new AnthropicProvider({
apiKey: process.env.ANTHROPIC_API_KEY!,
model: 'claude-sonnet-4-20250514', // default: claude-3-5-sonnet-20241022
});Install: npm install @anthropic-ai/sdk
Popular models: claude-opus-4-20250514, claude-sonnet-4-20250514, claude-haiku-4-20250514
Google Gemini
import { GoogleProvider } from 'confused-ai';
const llm = new GoogleProvider({
apiKey: process.env.GOOGLE_API_KEY!,
model: 'gemini-2.5-pro-preview', // default: gemini-2.0-flash
});Install: npm install @google/generative-ai
Popular models: gemini-2.5-pro-preview, gemini-2.0-flash, gemini-1.5-pro, gemini-1.5-flash
Amazon Bedrock
import { BedrockConverseProvider } from 'confused-ai';
const llm = new BedrockConverseProvider({
region: 'us-east-1',
modelId: 'anthropic.claude-3-5-sonnet-20240620-v1:0',
// client: myPrebuiltClient // optional
});Install: npm install @aws-sdk/client-bedrock-runtime
Uses the default AWS credential chain (env vars, instance profile, etc.).
Multi-model gateway
OpenRouter
Access every major model through one API key and one endpoint.
import { createOpenRouterProvider } from 'confused-ai';
const llm = createOpenRouterProvider({
apiKey: process.env.OPENROUTER_API_KEY!,
model: 'anthropic/claude-sonnet-4', // any OpenRouter model id
});Popular model ids: openai/gpt-4o, anthropic/claude-opus-4, google/gemini-2.5-pro-preview, meta-llama/llama-3.3-70b-instruct
Fast inference
Groq (LPU)
import { createGroqProvider } from 'confused-ai';
const llm = createGroqProvider({
apiKey: process.env.GROQ_API_KEY,
model: 'llama-3.3-70b-versatile', // default
});Popular models: llama-3.3-70b-versatile, llama-3.1-8b-instant, gemma2-9b-it, mixtral-8x7b-32768
Cerebras
import { createCerebrasProvider } from 'confused-ai';
const llm = createCerebrasProvider({
apiKey: process.env.CEREBRAS_API_KEY,
model: 'llama3.3-70b',
});Fireworks AI
import { createFireworksProvider } from 'confused-ai';
const llm = createFireworksProvider({
apiKey: process.env.FIREWORKS_API_KEY,
model: 'accounts/fireworks/models/llama-v3p3-70b-instruct', // default
});SambaNova
import { createSambaNovaProvider } from 'confused-ai';
const llm = createSambaNovaProvider({
apiKey: process.env.SAMBANOVA_API_KEY,
model: 'Meta-Llama-3.3-70B-Instruct',
});Other cloud providers
xAI (Grok)
import { createXAIProvider } from 'confused-ai';
const llm = createXAIProvider({
apiKey: process.env.XAI_API_KEY,
model: 'grok-3', // default. Also: grok-3-mini, grok-2
});Together AI
import { createTogetherProvider } from 'confused-ai';
const llm = createTogetherProvider({
apiKey: process.env.TOGETHER_API_KEY,
model: 'meta-llama/Llama-3.3-70B-Instruct-Turbo', // default
});DeepSeek
import { createDeepSeekProvider } from 'confused-ai';
const llm = createDeepSeekProvider({
apiKey: process.env.DEEPSEEK_API_KEY,
model: 'deepseek-chat', // DeepSeek-V3 (default)
// model: 'deepseek-reasoner' // DeepSeek-R1
});Mistral AI
import { createMistralProvider } from 'confused-ai';
const llm = createMistralProvider({
apiKey: process.env.MISTRAL_API_KEY,
model: 'mistral-large-latest', // default. Also: codestral-latest
});Perplexity (web-grounded)
import { createPerplexityProvider } from 'confused-ai';
const llm = createPerplexityProvider({
apiKey: process.env.PERPLEXITY_API_KEY,
model: 'sonar-pro', // default. Also: sonar-reasoning-pro
});Cohere (Command R)
import { createCohereProvider } from 'confused-ai';
const llm = createCohereProvider({
apiKey: process.env.COHERE_API_KEY,
model: 'command-r-plus-08-2024', // default
});NVIDIA NIM
import { createNvidiaProvider } from 'confused-ai';
const llm = createNvidiaProvider({
apiKey: process.env.NVIDIA_API_KEY,
model: 'meta/llama-3.3-70b-instruct',
});Hyperbolic
import { createHyperbolicProvider } from 'confused-ai';
const llm = createHyperbolicProvider({
apiKey: process.env.HYPERBOLIC_API_KEY,
model: 'meta-llama/Llama-3.3-70B-Instruct',
});Deep Infra
import { createDeepInfraProvider } from 'confused-ai';
const llm = createDeepInfraProvider({
apiKey: process.env.DEEPINFRA_API_KEY,
model: 'meta-llama/Meta-Llama-3.1-70B-Instruct',
});Hugging Face Inference API
import { createHuggingFaceProvider } from 'confused-ai';
const llm = createHuggingFaceProvider({
apiKey: process.env.HF_API_KEY,
model: 'meta-llama/Llama-3.3-70B-Instruct',
});Replicate
import { createReplicateProvider } from 'confused-ai';
const llm = createReplicateProvider({
apiKey: process.env.REPLICATE_API_KEY,
model: 'meta/meta-llama-3-70b-instruct',
});Enterprise
Azure OpenAI
import { createAzureOpenAIProvider } from 'confused-ai';
const llm = createAzureOpenAIProvider({
apiKey: process.env.AZURE_OPENAI_API_KEY,
resource: process.env.AZURE_OPENAI_RESOURCE, // Azure resource name
deployment: process.env.AZURE_OPENAI_DEPLOYMENT, // deployment name
apiVersion: '2025-01-01-preview', // default
});IBM watsonx.ai
import { createWatsonxProvider } from 'confused-ai';
const llm = createWatsonxProvider({
apiKey: process.env.WATSONX_API_KEY,
model: 'ibm/granite-13b-chat-v2',
});Snowflake Cortex
import { createSnowflakeProvider } from 'confused-ai';
const llm = createSnowflakeProvider({
apiKey: process.env.SNOWFLAKE_API_KEY,
model: 'snowflake-arctic-instruct',
});Cloudflare AI
import { createCloudflareProvider } from 'confused-ai';
const llm = createCloudflareProvider({
apiKey: process.env.CLOUDFLARE_API_KEY,
model: '@cf/meta/llama-3.3-70b-instruct-fp8-fast',
});Self-hosted and local
Ollama
import { OpenAIProvider } from 'confused-ai';
// Ollama exposes an OpenAI-compatible API on port 11434
const llm = new OpenAIProvider({
baseURL: 'http://localhost:11434/v1',
apiKey: 'ollama', // required by the SDK, ignored by Ollama
model: 'llama3.2', // run: ollama pull llama3.2
});vLLM
import { createVllmProvider } from 'confused-ai';
const llm = createVllmProvider({
baseURL: 'http://localhost:8000/v1', // default (VLLM_BASE_URL env)
model: 'meta-llama/Llama-3.3-70B-Instruct',
});
// Start server: vllm serve meta-llama/Llama-3.3-70B-Instruct --port 8000LM Studio
import { createLmStudioProvider } from 'confused-ai';
const llm = createLmStudioProvider({
baseURL: 'http://localhost:1234/v1', // default
model: 'local-model',
});Generic OpenAI-compatible endpoint
import { createOpenAICompatibleProvider } from 'confused-ai';
const llm = createOpenAICompatibleProvider({
baseURL: 'https://my-gateway.internal/v1',
apiKey: process.env.MY_API_KEY!,
model: 'my-fine-tuned-model',
});Chinese frontier providers
import {
createHunyuanProvider, // Tencent Hunyuan
createVolcengineProvider, // ByteDance Volcengine (Doubao)
createMinimaxProvider, // MiniMax
createBaichuanProvider, // Baichuan
createStepfunProvider, // Stepfun
createInternLMProvider, // InternLM (Shanghai AI Lab)
createMoonshotProvider, // Moonshot (Kimi)
createDashScopeProvider, // Alibaba DashScope (Qwen)
createZhipuProvider, // Zhipu AI (GLM)
createYiProvider, // 01.AI (Yi)
} from 'confused-ai';
const llm = createDashScopeProvider({
apiKey: process.env.DASHSCOPE_API_KEY,
model: 'qwen-max',
});Fallback chain
Chain multiple providers so failures cascade automatically.
import { FallbackChainProvider, FallbackStrategy } from 'confused-ai';
const llm = new FallbackChainProvider({
providers: [
createGroqProvider({ model: 'llama-3.1-8b-instant' }), // fast, cheap
new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY!, model: 'gpt-4o-mini' }),
new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY!, model: 'gpt-4o' }),
],
strategy: FallbackStrategy.ANY_ERROR,
// strategy: FallbackStrategy.RATE_LIMIT // cascade only on 429s
debug: true,
});Strategies: ANY_ERROR · RATE_LIMIT · TIMEOUT · API_ERROR
Bring your own provider
Any object that satisfies this interface works:
interface LLMProvider {
generateText(messages: Message[], options?: GenerateOptions): Promise<GenerateResult>;
streamText?(messages: Message[], options?: StreamOptions): Promise<GenerateResult>;
getName?(): string;
}Where to go next
- LLM Router — route each request to the best model per task, cost, and speed.
- Stream utilities — consume and transform provider streams.
- Production — circuit breakers, budget limits, and observability for provider calls.