AI Providers
ChatCops abstracts AI providers behind a unified AIProvider interface. Switch between Claude, OpenAI, and Gemini by changing one config value.
Provider Configuration
Section titled “Provider Configuration”// Claude (Anthropic)provider: { type: 'claude', apiKey: process.env.ANTHROPIC_API_KEY!, model: 'claude-haiku-4-5-20251001', // Default}
// OpenAIprovider: { type: 'openai', apiKey: process.env.OPENAI_API_KEY!, model: 'gpt-4o-mini', // Default}
// Google Geminiprovider: { type: 'gemini', apiKey: process.env.GOOGLE_AI_API_KEY!, model: 'gemini-2.0-flash', // Default}Default Models
Section titled “Default Models”| Provider | Default Model | Streaming |
|---|---|---|
| Claude | claude-haiku-4-5-20251001 | SSE via messages.stream() |
| OpenAI | gpt-4o-mini | SSE via chat.completions.create({ stream: true }) |
| Gemini | gemini-2.0-flash | SSE via generateContentStream() |
AIProvider Interface
Section titled “AIProvider Interface”interface AIProvider { name: string; chat(params: ProviderChatParams): AsyncGenerator<string>; chatSync(params: ProviderChatParams): Promise<string>;}
interface ProviderChatParams { messages: ChatMessage[]; systemPrompt: string; tools?: ToolDefinition[]; maxTokens?: number; // Default: 1024 temperature?: number; // Default: provider-specific}Direct Provider Usage
Section titled “Direct Provider Usage”For advanced use cases, you can use providers directly:
import { createProvider } from '@chatcops/core';
const provider = await createProvider({ type: 'claude', apiKey: process.env.ANTHROPIC_API_KEY!,});
// Streamingfor await (const token of provider.chat({ messages: [{ id: '1', role: 'user', content: 'Hello!', timestamp: Date.now() }], systemPrompt: 'You are helpful.',})) { process.stdout.write(token);}
// Non-streamingconst response = await provider.chatSync({ messages: [{ id: '1', role: 'user', content: 'Hello!', timestamp: Date.now() }], systemPrompt: 'You are helpful.',});console.log(response);Tool Support
Section titled “Tool Support”All providers support tool calling with a unified format. ChatCops automatically converts tool definitions to each provider’s native format:
- Claude:
toolsarray withinput_schema - OpenAI:
toolsarray withfunction.parameters - Gemini:
functionDeclarationsintools
chatcopsMiddleware({ provider: { type: 'claude', apiKey: '...' }, systemPrompt: '...', tools: [new LeadCaptureTool({ onCapture: saveLead })],});The same tool definition works across all providers without changes.