ml-provider-clients/examples/basic-usage.ts

213 lines
5.6 KiB
TypeScript

/**
* Basic usage examples for ML Provider Clients
*/
import {
createLlamaCppProvider,
createClaudeProvider,
createOpenAIProvider,
type StreamEvent,
} from '../src/index';
// ============================================================================
// LlamaCpp Example
// ============================================================================
async function llamaCppExample() {
console.log('=== LlamaCpp Provider Example ===\n');
const provider = createLlamaCppProvider({
endpoint: 'http://localhost:8000',
model: 'fast',
temperature: 0.7,
maxTokens: 512,
});
// Health check
const health = await provider.healthCheck();
console.log('Health:', health);
if (health.status !== 'ok') {
console.error('Service not available');
return;
}
// Stream a response
console.log('\nStreaming response...\n');
await provider.sendMessage(
{
messages: [
{ role: 'user', content: 'Explain the concept of recursion in one sentence.' },
],
systemPrompt: 'You are a concise programming tutor.',
},
(event: StreamEvent) => {
if (event.type === 'chunk') {
process.stdout.write(event.content);
} else if (event.type === 'error') {
console.error('\nError:', event.error);
} else if (event.type === 'done') {
console.log('\n\nDone!\n');
}
}
);
}
// ============================================================================
// Claude Example
// ============================================================================
async function claudeExample() {
console.log('=== Claude Provider Example ===\n');
const provider = createClaudeProvider({
model: 'sonnet',
maxBudgetUsd: 0.5,
});
// Check availability
const available = await provider.isAvailable();
console.log('Claude CLI available:', available);
if (!available) {
console.error('Claude CLI not found - install with: npm install -g @anthropic-ai/claude');
return;
}
// Stream a response
console.log('\nStreaming response...\n');
await provider.sendMessage(
{
messages: [
{ role: 'user', content: 'Write a haiku about TypeScript.' },
],
},
(event: StreamEvent) => {
switch (event.type) {
case 'start':
console.log(`[${event.agentName}]`);
break;
case 'chunk':
process.stdout.write(event.content);
break;
case 'thinking':
console.log(`\n[Thinking: ${event.content.slice(0, 50)}...]`);
break;
case 'error':
console.error('\nError:', event.error);
break;
case 'done':
console.log('\n\nDone!\n');
break;
}
}
);
}
// ============================================================================
// OpenAI Example
// ============================================================================
async function openAIExample() {
console.log('=== OpenAI Provider Example ===\n');
const apiKey = process.env.OPENAI_API_KEY;
if (!apiKey) {
console.error('OPENAI_API_KEY not set');
return;
}
const provider = createOpenAIProvider({
apiKey,
model: 'gpt-4-turbo',
temperature: 0.7,
maxTokens: 512,
});
// Stream a response
console.log('Streaming response...\n');
await provider.sendMessage(
{
messages: [
{ role: 'user', content: 'Explain async/await in JavaScript in 2 sentences.' },
],
systemPrompt: 'You are a concise JavaScript tutor.',
},
(event: StreamEvent) => {
if (event.type === 'chunk') {
process.stdout.write(event.content);
} else if (event.type === 'error') {
console.error('\nError:', event.error);
} else if (event.type === 'done') {
console.log('\n\nDone!\n');
}
}
);
}
// ============================================================================
// Cancellation Example
// ============================================================================
async function cancellationExample() {
console.log('=== Cancellation Example ===\n');
const provider = createLlamaCppProvider();
const controller = new AbortController();
// Cancel after 2 seconds
setTimeout(() => {
console.log('\nCancelling request...');
controller.abort();
}, 2000);
await provider.sendMessage(
{
messages: [
{ role: 'user', content: 'Write a long story about a dragon.' },
],
},
(event: StreamEvent) => {
if (event.type === 'chunk') {
process.stdout.write(event.content);
} else if (event.type === 'error') {
console.error('\nError:', event.error);
} else if (event.type === 'done') {
console.log('\n\nDone!\n');
}
},
controller.signal
);
}
// ============================================================================
// Run examples
// ============================================================================
async function main() {
const example = process.argv[2];
switch (example) {
case 'llamacpp':
await llamaCppExample();
break;
case 'claude':
await claudeExample();
break;
case 'openai':
await openAIExample();
break;
case 'cancel':
await cancellationExample();
break;
default:
console.log('Usage: tsx examples/basic-usage.ts <llamacpp|claude|openai|cancel>');
console.log('\nExamples:');
console.log(' tsx examples/basic-usage.ts llamacpp');
console.log(' tsx examples/basic-usage.ts claude');
console.log(' OPENAI_API_KEY=sk-... tsx examples/basic-usage.ts openai');
console.log(' tsx examples/basic-usage.ts cancel');
}
}
main().catch(console.error);