213 lines
5.6 KiB
TypeScript
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);
|