UNPKG

llmverify

Version:

AI Output Verification Toolkit — Local-first LLM safety, hallucination detection, PII redaction, prompt injection defense, and runtime monitoring. Zero telemetry. OWASP LLM Top 10 aligned.

275 lines (237 loc) 7.11 kB
/** * Model-Agnostic Adapters Example * * Demonstrates how to use the unified adapter interface * with different LLM providers. * * @example * npx ts-node examples/model-adapters.ts */ import { createAdapter, monitorLLM, LlmClient, LlmRequest, LlmResponse, ProviderId } from '../src'; // ============================================ // Example 1: OpenAI Adapter // ============================================ async function openAIExample() { console.log('=== OpenAI Adapter ===\n'); // In real usage: // import OpenAI from 'openai'; // const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); // Mock for demonstration const mockOpenAI = { chat: { completions: { create: async (params: any) => ({ choices: [{ message: { content: 'Hello from OpenAI!' }, finish_reason: 'stop' }], usage: { completion_tokens: 5, total_tokens: 15 }, model: params.model }) } } }; const llm = createAdapter({ provider: 'openai', client: mockOpenAI, defaultModel: 'gpt-4o-mini' }); const response = await llm.generate({ prompt: 'Say hello!', system: 'You are a helpful assistant.' }); console.log('Provider:', llm.provider); console.log('Response:', response.text); console.log('Tokens:', response.tokens); console.log(); } // ============================================ // Example 2: Anthropic Adapter // ============================================ async function anthropicExample() { console.log('=== Anthropic Adapter ===\n'); // Mock Anthropic client const mockAnthropic = { messages: { create: async (params: any) => ({ content: [{ type: 'text', text: 'Hello from Claude!' }], stop_reason: 'end_turn', usage: { input_tokens: 10, output_tokens: 5 }, model: params.model }) } }; const llm = createAdapter({ provider: 'anthropic', client: mockAnthropic, defaultModel: 'claude-3-5-sonnet-20241022' }); const response = await llm.generate({ prompt: 'Say hello!', system: 'You are a helpful assistant.' }); console.log('Provider:', llm.provider); console.log('Response:', response.text); console.log('Tokens:', response.tokens); console.log(); } // ============================================ // Example 3: Local Model Adapter // ============================================ async function localExample() { console.log('=== Local Model Adapter ===\n'); // Simple local inference function const localInference = async (prompt: string) => { // In real usage, this would call llama.cpp, Ollama, vLLM, etc. return `Local response to: ${prompt.substring(0, 30)}...`; }; const llm = createAdapter({ provider: 'local', client: localInference, defaultModel: 'llama-3', providerName: 'Ollama' }); const response = await llm.generate({ prompt: 'What is the capital of France?' }); console.log('Provider:', llm.provider); console.log('Provider Name:', llm.providerName); console.log('Response:', response.text); console.log(); } // ============================================ // Example 4: Adapter with Monitoring // ============================================ async function monitoredAdapterExample() { console.log('=== Monitored Adapter ===\n'); // Create a mock client const mockClient = { chat: { completions: { create: async (params: any) => { // Simulate varying latency await new Promise(r => setTimeout(r, 50 + Math.random() * 100)); return { choices: [{ message: { content: 'Monitored response!' }, finish_reason: 'stop' }], usage: { completion_tokens: 3, total_tokens: 10 }, model: params.model }; } } } }; // Create adapter const llm = createAdapter({ provider: 'openai', client: mockClient, defaultModel: 'gpt-4o-mini' }); // Wrap with monitoring const monitored = monitorLLM(llm, { hooks: { onHealthCheck: (report) => { console.log(` Health: ${report.health} (score: ${report.score})`); } } }); // Make several calls for (let i = 0; i < 3; i++) { const response = await monitored.generate({ prompt: `Test prompt ${i + 1}` }); console.log(`Call ${i + 1}: ${response.text}`); } console.log('\nBaseline:', monitored.getBaseline()); console.log(); } // ============================================ // Example 5: Custom Adapter // ============================================ async function customAdapterExample() { console.log('=== Custom Adapter ===\n'); // Create a custom adapter for any API const customClient = { async generate(request: LlmRequest): Promise<LlmResponse> { // Your custom API logic here return { text: `Custom response to: ${request.prompt}`, tokens: 10, model: request.model ?? 'custom-model' }; } }; const llm = createAdapter({ provider: 'custom', client: customClient, providerName: 'My Custom API' }); const response = await llm.generate({ prompt: 'Hello custom API!' }); console.log('Provider:', llm.provider); console.log('Provider Name:', llm.providerName); console.log('Response:', response.text); console.log(); } // ============================================ // Example 6: Provider Switching // ============================================ async function providerSwitchingExample() { console.log('=== Provider Switching ===\n'); // Factory function to create adapters function createLLM(provider: ProviderId): LlmClient { const mockClients: Record<string, any> = { openai: { chat: { completions: { create: async () => ({ choices: [{ message: { content: 'OpenAI response' } }], usage: { completion_tokens: 3 } }) } } }, anthropic: { messages: { create: async () => ({ content: [{ type: 'text', text: 'Anthropic response' }], usage: { output_tokens: 3 } }) } }, local: async (prompt: string) => `Local: ${prompt}` }; return createAdapter({ provider, client: mockClients[provider], defaultModel: 'default' }); } // Switch between providers easily const providers: ProviderId[] = ['openai', 'anthropic', 'local']; for (const provider of providers) { const llm = createLLM(provider); const response = await llm.generate({ prompt: 'Hello!' }); console.log(`${provider}: ${response.text}`); } console.log(); } // Run all examples async function main() { try { await openAIExample(); await anthropicExample(); await localExample(); await monitoredAdapterExample(); await customAdapterExample(); await providerSwitchingExample(); console.log('=== All examples completed ==='); } catch (error) { console.error('Error:', error); } } main();