ModelPilot SDK
Native JavaScript/TypeScript SDK with full ModelPilot features and optimizations.
Quick Example
javascript
import ModelPilot from 'modelpilot';
const client = new ModelPilot({
apiKey: 'mp_xxx',
routerId: 'router_xxx'
});
const completion = await client.chat.completions.create({
messages: [
{ role: 'user', content: 'Hello!' }
]
});
console.log(completion.choices[0].message.content);
console.log('Cost:', completion._meta?.cost);Installation
bash
npm install modelpilotInitialization
Configuration Options
apiKeyrequiredYour ModelPilot API keyrouterIdrequiredRouter ID from dashboardtimeoutoptionalRequest timeout (default: 30000ms)retriesoptionalMax retry attempts (default: 3)javascript
const client = new ModelPilot({
apiKey: process.env.MODELPILOT_API_KEY,
routerId: process.env.MODELPILOT_ROUTER_ID,
timeout: 30000,
retries: 3
});Chat Completions
Basic Request
javascript
const completion = await client.chat.completions.create({
messages: [
{ role: 'system', content: 'You are a helpful assistant.' },
{ role: 'user', content: 'What is 2+2?' }
],
temperature: 0.7,
max_tokens: 150
});
console.log(completion.choices[0].message.content);
// Output: "2+2 equals 4."
// Access metadata
console.log('Model used:', completion._meta?.modelUsed);
console.log('Cost:', completion._meta?.cost);
console.log('Latency:', completion._meta?.latencyMs);Streaming
javascript
const stream = await client.chat.completions.create({
messages: [
{ role: 'user', content: 'Tell me a story' }
],
stream: true
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content || '';
process.stdout.write(content);
}
// Access metadata after stream completes
console.log('Total cost:', stream._meta?.cost);TypeScript Support
Full Type Definitions
The SDK includes complete TypeScript types
typescript
import ModelPilot, { ChatMessage, ChatCompletion } from 'modelpilot';
const client = new ModelPilot({
apiKey: process.env.MODELPILOT_API_KEY!,
routerId: process.env.MODELPILOT_ROUTER_ID!
});
const messages: ChatMessage[] = [
{ role: 'user', content: 'Hello!' }
];
const completion: ChatCompletion = await client.chat.completions.create({
messages
});Error Handling
Try-Catch Pattern
javascript
try {
const completion = await client.chat.completions.create({
messages: [{ role: 'user', content: 'Hello!' }]
});
console.log(completion.choices[0].message.content);
} catch (error) {
if (error.statusCode === 429) {
console.error('Rate limit exceeded');
} else if (error.statusCode === 401) {
console.error('Invalid API key');
} else {
console.error('Error:', error.message);
}
}Best Practices
Do This
- • Use environment variables for keys
- • Implement retry logic for failures
- • Monitor costs via metadata
- • Handle rate limits gracefully
- • Use streaming for long responses
Avoid This
- • Hardcoding API keys in code
- • Ignoring error responses
- • Making too many concurrent requests
- • Not implementing timeouts
- • Ignoring cost metadata