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_tokensinputTokens
usage.completion_tokensoutputTokens
idrequestId
Wall clocklatencyMs

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,
        }),
      },
    ),
)