JavaScript SDK
Examples
Copy-paste SDK examples
Copy-paste examples for common use cases.
Basic Chat Loop
import { createDriftClient } from '@driftos/client';
import OpenAI from 'openai';
const drift = createDriftClient(
'https://api.driftos.dev/api/v1/embed',
process.env.DRIFTOS_API_KEY
);
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
async function chat(conversationId: string, userMessage: string) {
// Route message
const result = await drift.route(conversationId, userMessage);
// Get context
const { system, messages } = await drift.buildPrompt(result.branchId);
// Call LLM
const response = await openai.chat.completions.create({
model: 'gpt-4',
messages: [
{ role: 'system', content: system },
...messages,
{ role: 'user', content: userMessage }
]
});
return {
reply: response.choices[0].message.content,
routing: result
};
}Express.js API Endpoint
import express from 'express';
import { createDriftClient } from '@driftos/client';
import OpenAI from 'openai';
const app = express();
app.use(express.json());
const drift = createDriftClient(
'https://api.driftos.dev/api/v1/llm',
process.env.DRIFTOS_API_KEY
);
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
app.post('/chat', async (req, res) => {
const { conversationId, message } = req.body;
try {
// Route message
const result = await drift.route(conversationId, message);
// Get context
const { system, messages } = await drift.buildPrompt(result.branchId, {
maxMessages: 10
});
// Call LLM
const response = await openai.chat.completions.create({
model: 'gpt-4',
messages: [
{ role: 'system', content: system },
...messages,
{ role: 'user', content: message }
]
});
res.json({
reply: response.choices[0].message.content,
routing: {
action: result.action,
topic: result.branchTopic
}
});
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.listen(3000);Custom System Prompt
const result = await drift.route(conversationId, userMessage);
const { system, messages } = await drift.buildPrompt(result.branchId, {
maxMessages: 15,
systemPrompt: 'You are a helpful travel assistant specializing in European destinations.'
});
const response = await openai.chat.completions.create({
model: 'gpt-4',
messages: [
{ role: 'system', content: system },
...messages,
{ role: 'user', content: userMessage }
]
});Streaming Responses
async function chatStream(conversationId: string, userMessage: string) {
// Route message
const result = await drift.route(conversationId, userMessage);
// Get context
const { system, messages } = await drift.buildPrompt(result.branchId);
// Stream LLM response
const stream = await openai.chat.completions.create({
model: 'gpt-4',
messages: [
{ role: 'system', content: system },
...messages,
{ role: 'user', content: userMessage }
],
stream: true
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content || '';
process.stdout.write(content);
}
}Error Handling
async function chatWithRetry(conversationId: string, message: string) {
try {
const result = await drift.route(conversationId, message);
const { system, messages } = await drift.buildPrompt(result.branchId);
const response = await openai.chat.completions.create({
model: 'gpt-4',
messages: [
{ role: 'system', content: system },
...messages,
{ role: 'user', content: message }
]
});
return response.choices[0].message.content;
} catch (error) {
if (error.status === 401) {
throw new Error('Invalid DriftOS API key');
}
if (error.status === 500) {
// Retry once
console.log('Retrying...');
return chatWithRetry(conversationId, message);
}
throw error;
}
}Switching Between Core and Embed
// Start with Embed for speed
let drift = createDriftClient(
'https://api.driftos.dev/api/v1/embed',
process.env.DRIFTOS_API_KEY
);
// Switch to Core for complex conversations
function switchToCore() {
drift = createDriftClient(
'https://api.driftos.dev/api/v1/llm',
process.env.DRIFTOS_API_KEY
);
}
// Switch to Embed for high-volume
function switchToEmbed() {
drift = createDriftClient(
'https://api.driftos.dev/api/v1/embed',
process.env.DRIFTOS_API_KEY
);
}Next Steps
- API Reference - Complete method docs
- REST API - Direct HTTP usage
- Troubleshooting - Fix issues
