Skip to main content

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 modelpilot

Initialization

Configuration Options
apiKeyrequiredYour ModelPilot API key
routerIdrequiredRouter ID from dashboard
timeoutoptionalRequest 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

Next Steps