Documentation
OpenAI Example
Track OpenAI chat completions with timing and token usage.
Instrument OpenAI chat completions with timing, usage extraction, and request tracking.
openai.ts
typescript
import OpenAI from 'openai'
import { PromptLayer } from '@promptlayer/js'
const openai = new OpenAI()
const promptlayer = new PromptLayer({
apiKey: process.env.PROMPTLAYER_API_KEY!,
projectId: process.env.PROMPTLAYER_PROJECT_ID!,
})
const startedAt = Date.now()
try {
const completion = await openai.chat.completions.create({
model: 'gpt-4o-mini',
messages: [{ role: 'user', content: 'Summarize ticket #4821' }],
})
await promptlayer.trackRequest({
provider: 'openai',
model: 'gpt-4o-mini',
feature: 'ticket_summary',
promptVersion: 'summary_v1',
requestId: completion.id,
inputTokens: completion.usage?.prompt_tokens,
outputTokens: completion.usage?.completion_tokens,
latencyMs: Date.now() - startedAt,
status: 'success',
})
} catch (error) {
await promptlayer.trackRequest({
provider: 'openai',
model: 'gpt-4o-mini',
latencyMs: Date.now() - startedAt,
status: 'failed',
errorType: 'provider_error',
errorMessage: error instanceof Error ? error.message : String(error),
})
throw error
} finally {
await promptlayer.flush()
}
Usage mapping
| OpenAI field | PromptLayer field |
|---|---|
| usage.prompt_tokens | inputTokens |
| usage.completion_tokens | outputTokens |
| id | requestId |
| Wall clock | latencyMs |
Inside a trace
Use timeRequest() to time the call and extract usage automatically:
timeRequest
typescript
await promptlayer.withTrace(
{ workflow: 'customer_support' },
async (trace) =>
trace.timeRequest(
{ span: 'classify_ticket', provider: 'openai', model: 'gpt-4o-mini' },
() => openai.chat.completions.create({ model: 'gpt-4o-mini', messages }),
{
extractUsage: (result) => ({
requestId: result.id,
inputTokens: result.usage?.prompt_tokens,
outputTokens: result.usage?.completion_tokens,
}),
},
),
)