Documentation Index Fetch the complete documentation index at: https://arizeai-433a7140.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
This module provides automatic instrumentation for the OpenAI Node.js SDK . which may be used in conjunction with @opentelemetry/sdk-trace-node .
Install
npm install --save @arizeai/openinference-instrumentation-openai openai
npm install --save @opentelemetry/api @opentelemetry/sdk-trace-node \
@opentelemetry/sdk-trace-base \
@opentelemetry/resources \
@opentelemetry/semantic-conventions \
@opentelemetry/instrumentation \
@opentelemetry/exporter-trace-otlp-proto \
@arizeai/openinference-semantic-conventions
Setup
To instrument your application, import and enable OpenAIInstrumentation
Create the instrumentation.js file:
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto" ;
import { resourceFromAttributes } from "@opentelemetry/resources" ;
import { SimpleSpanProcessor } from "@opentelemetry/sdk-trace-base" ;
import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node" ;
import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions" ;
import { SEMRESATTRS_PROJECT_NAME } from "@arizeai/openinference-semantic-conventions" ;
import { registerInstrumentations } from "@opentelemetry/instrumentation" ;
// OpenAI instrumentation
import OpenAI from "openai" ;
import { OpenAIInstrumentation } from "@arizeai/openinference-instrumentation-openai" ;
const COLLECTOR_ENDPOINT = "your-phoenix-collector-endpoint" ;
const SERVICE_NAME = "openai-app" ;
const provider = new NodeTracerProvider ({
resource: resourceFromAttributes ({
[ ATTR_SERVICE_NAME ]: SERVICE_NAME ,
[ SEMRESATTRS_PROJECT_NAME ]: SERVICE_NAME ,
}),
spanProcessors: [
new SimpleSpanProcessor (
new OTLPTraceExporter ({
url: ` ${ COLLECTOR_ENDPOINT } /v1/traces` ,
// (optional) if connecting to Phoenix with Authentication enabled
headers: { Authorization: `Bearer ${ process . env . PHOENIX_API_KEY } ` },
})
),
],
});
provider . register ();
console . log ( "Provider registered" );
const instrumentation = new OpenAIInstrumentation ();
instrumentation . manuallyInstrument ( OpenAI );
registerInstrumentations ({
instrumentations: [ instrumentation ],
});
console . log ( "OpenAI instrumentation registered" );
See all 41 lines
Run OpenAI
Import the instrumentation.js file first, then use OpenAI as usual.
import "./instrumentation.js" ;
import OpenAI from "openai" ;
// set OPENAI_API_KEY in environment, or pass it in arguments
const openai = new OpenAI ({
apiKey: 'your-openai-api-key'
});
openai . chat . completions
. create ({
model: "gpt-4o" ,
messages: [{ role: "user" , content: "Write a haiku." }],
})
. then (( response ) => {
console . log ( response . choices [ 0 ]. message . content );
});
See all 16 lines
Observe
After setting up instrumentation and running your OpenAI application, traces will appear in the Phoenix UI for visualization and analysis.
Custom Tracer Provider
You can specify a custom tracer provider for OpenAI instrumentation in multiple ways:
Method 1: Pass tracerProvider on instantiation
const instrumentation = new OpenAIInstrumentation ({
tracerProvider: customTracerProvider ,
});
instrumentation . manuallyInstrument ( OpenAI );
See all 4 lines
Method 2: Set tracerProvider after instantiation
const instrumentation = new OpenAIInstrumentation ();
instrumentation . setTracerProvider ( customTracerProvider );
instrumentation . manuallyInstrument ( OpenAI );
Method 3: Pass tracerProvider to registerInstrumentations
const instrumentation = new OpenAIInstrumentation ();
instrumentation . manuallyInstrument ( OpenAI );
registerInstrumentations ({
instrumentations: [ instrumentation ],
tracerProvider: customTracerProvider ,
});
Resources