import OpenAI from 'openai';
import { createFoilTracer, SpanKind } from '@foil-ai/sdk';
const openai = new OpenAI();
const tracer = createFoilTracer({
apiKey: process.env.FOIL_API_KEY,
agentName: 'customer-support-agent'
});
async function handleUserQuery(query, userId) {
return await tracer.trace(async (ctx) => {
// Step 1: Search knowledge base
const docs = await ctx.retriever('knowledge-base', async () => {
return await searchKnowledgeBase(query);
}, { input: { query } });
// Step 2: Generate response with context
const span = await ctx.startSpan(SpanKind.LLM, 'gpt-4o', {
input: { query, context: docs },
properties: { userId }
});
const response = await openai.chat.completions.create({
model: 'gpt-4o',
messages: [
{ role: 'system', content: `Context: ${docs.join('\n')}` },
{ role: 'user', content: query }
]
});
await span.end({
output: response.choices[0].message.content,
tokens: {
prompt: response.usage.prompt_tokens,
completion: response.usage.completion_tokens,
total: response.usage.total_tokens
}
});
return response.choices[0].message.content;
}, {
name: 'handle-query',
properties: { userId }
});
}