Trace, monitor, and evaluate LLM applications with Arize AX
Copy for LLM View Markdown Ask AI about this page Arize AX is an enterprise-grade observability, evaluation, and experimentation platform purpose-built for agents and complex AI systems. It empowers teams to rigorously develop and improve real-world AI applications.
Arize AX offers first-class OpenTelemetry integration and works directly with the AI SDK in both Next.js and Node.js environments.
In Next.js applications, use one of the OpenInference span processors with registerOtel from @vercel/otel.
First, install the required dependencies for the AI SDK, OpenTelemetry and OpenInference.
npm install ai @ai-sdk/openai @ai-sdk/otel @vercel/otel @arizeai/openinference-vercel @opentelemetry/exporter-trace-otlp-proto
Then, in your instrumentation.ts file add the following, including the AI SDK telemetry integration registration:
import { registerTelemetry } from ' ai ' ;
import { LegacyOpenTelemetry } from ' @ai-sdk/otel ' ;
import { registerOTel } from ' @vercel/otel ' ;
import {
isOpenInferenceSpan ,
OpenInferenceSimpleSpanProcessor ,
} from ' @arizeai/openinference-vercel ' ;
import { OTLPTraceExporter } from ' @opentelemetry/exporter-trace-otlp-proto ' ;
registerTelemetry ( new LegacyOpenTelemetry ()) ;
export function register () {
registerOTel ( {
attributes : {
model_id : ' my-ai-app ' ,
model_version : ' 1.0.0 ' ,
},
spanProcessors : [
new OpenInferenceSimpleSpanProcessor ( {
exporter : new OTLPTraceExporter ( {
url : ' https://otlp.arize.com/v1/traces ' ,
headers : {
space_id : process . env . ARIZE_SPACE_ID ,
api_key : process . env . ARIZE_API_KEY ,
},
} ) ,
// Optionally add a span filter to only include AI related spans
spanFilter : isOpenInferenceSpan ,
} ) ,
] ,
} ) ;
}
Spans will show up in Arize AX under the project specified in the model_id field above.
Once the integration is registered, telemetry is emitted automatically for all AI SDK calls:
import { generateText } from ' ai ' ;
import { openai } from ' @ai-sdk/openai ' ;
const result = await generateText ( {
model : openai ( ' gpt-6-luna ' ) ,
prompt : ' Please write a haiku. ' ,
} ) ;
In Node.js you can use the NodeSDK or the NodeTraceProvider.
First, install the required dependencies for the AI SDK, OpenTelemetry and OpenInference.
npm install ai @ai-sdk/openai @ai-sdk/otel @opentelemetry/sdk-node @arizeai/openinference-vercel @opentelemetry/exporter-trace-otlp-proto @opentelemetry/resources
Then, in your instrumentation.ts file add the following:
import { registerTelemetry } from ' ai ' ;
import { LegacyOpenTelemetry } from ' @ai-sdk/otel ' ;
import {
isOpenInferenceSpan ,
OpenInferenceSimpleSpanProcessor ,
} from ' @arizeai/openinference-vercel ' ;
import { OTLPTraceExporter } from ' @opentelemetry/exporter-trace-otlp-proto ' ;
import { resourceFromAttributes } from ' @opentelemetry/resources ' ;
import { NodeSDK } from ' @opentelemetry/sdk-node ' ;
const sdk = new NodeSDK ( {
resource : resourceFromAttributes ( {
model_id : ' my-ai-app ' ,
model_version : ' 1.0.0 ' ,
} ) ,
spanProcessors : [
new OpenInferenceSimpleSpanProcessor ( {
exporter : new OTLPTraceExporter ( {
url : ' https://otlp.arize.com/v1/traces ' ,
headers : {
space_id : process . env . ARIZE_SPACE_ID ,
api_key : process . env . ARIZE_API_KEY ,
},
} ) ,
spanFilter : isOpenInferenceSpan ,
} ) ,
] ,
} ) ;
sdk . start () ;
registerTelemetry ( new LegacyOpenTelemetry ()) ;
Spans will show up in Arize AX under the project specified in the model_id field above.
Once the integration is registered, telemetry is emitted automatically for all AI SDK calls:
const result = await generateText ( {
model : openai ( ' gpt-6-luna ' ) ,
prompt : ' Please write a haiku. ' ,
} ) ;
First, install the required dependencies for the AI SDK, OpenTelemetry and OpenInference.
npm install ai @ai-sdk/openai @ai-sdk/otel @opentelemetry/sdk-trace-node @arizeai/openinference-vercel @opentelemetry/exporter-trace-otlp-proto @opentelemetry/resources
Then, in your instrumentation.ts file add the following:
import { registerTelemetry } from ' ai ' ;
import { LegacyOpenTelemetry } from ' @ai-sdk/otel ' ;
import {
isOpenInferenceSpan ,
OpenInferenceSimpleSpanProcessor ,
} from ' @arizeai/openinference-vercel ' ;
import { OTLPTraceExporter } from ' @opentelemetry/exporter-trace-otlp-proto ' ;
import { resourceFromAttributes } from ' @opentelemetry/resources ' ;
import { NodeTracerProvider } from ' @opentelemetry/sdk-trace-node ' ;
const provider = new NodeTracerProvider ( {
resource : resourceFromAttributes ( {
model_id : ' my-ai-app ' ,
model_version : ' 1.0.0 ' ,
} ) ,
spanProcessors : [
new OpenInferenceSimpleSpanProcessor ( {
exporter : new OTLPTraceExporter ( {
url : ' https://otlp.arize.com/v1/traces ' ,
headers : {
space_id : process . env . ARIZE_SPACE_ID ,
api_key : process . env . ARIZE_API_KEY ,
},
} ) ,
spanFilter : isOpenInferenceSpan ,
} ) ,
] ,
} ) ;
provider . register () ;
registerTelemetry ( new LegacyOpenTelemetry ()) ;
Spans will show up in Arize AX under the project specified in the model_id field above.
Once the integration is registered, telemetry is emitted automatically for all AI SDK calls:
const result = await generateText ( {
model : openai ( ' gpt-6-luna ' ) ,
prompt : ' Please write a haiku. ' ,
} ) ;
After sending spans to your Arize AX project check out other features:
Rerunning spans in the prompt playground to iterate and compare prompts and parameters
Add spans to datasets for evaluation and development workflows
Continuously run online evaluations on your incoming spans to understand application performance
AX has a TypeScript client for managing your datasets and evaluations.