Troubleshooting Trace Issues in Typescript Vercel AI-SDK for Phoenix
I'm having issues sending up traces from my typescript vercel ai-sdk app to cloud phoenix I've followed these two guides to the T but no luck https://arize.com/docs/phoenix/integrations/vercel/vercel-ai-sdk-tracing-js and https://arize.com/docs/phoenix/tracing/llm-traces-1/quickstart-tracing-ts my instrumentation.ts looks like this
import { registerOTel } from '@vercel/otel';
import * as Sentry from '@sentry/nextjs';
// Phoenix/Arize imports
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto";
import {
isOpenInferenceSpan,
OpenInferenceBatchSpanProcessor
} from "@arizeai/openinference-vercel";
import { SEMRESATTRS_PROJECT_NAME } from "@arizeai/openinference-semantic-conventions";
export async function register() {
// Phoenix configuration
const PHOENIX_COLLECTOR_ENDPOINT = process.env.PHOENIX_COLLECTOR_ENDPOINT;
const SERVICE_NAME = 'ai-chatbot';
// Create Phoenix span processor if endpoint is configured
let phoenixSpanProcessor: OpenInferenceBatchSpanProcessor | undefined;
if (PHOENIX_COLLECTOR_ENDPOINT && process.env.PHOENIX_API_KEY) {
phoenixSpanProcessor = new OpenInferenceBatchSpanProcessor({
exporter: new OTLPTraceExporter({
headers: {
// API key if you're sending it to Phoenix
api_key: process.env["PHOENIX_API_KEY"] ,
},
url:
process.env["PHOENIX_COLLECTOR_ENDPOINT"] ||
"https://app.phoenix.arize.com/v1/traces",
}),
spanFilter: (span) => {
// Only export spans that are OpenInference to remove non-generative spans
// This should be removed if you want to export all spans
console.log('[DEBUG]span', span);
return isOpenInferenceSpan(span);
},
})
}
// Register OpenTelemetry with Vercel's setup, adding Phoenix processor
registerOTel({
serviceName: SERVICE_NAME,
// Add Phoenix span processor alongside Vercel's default processors
spanProcessors: phoenixSpanProcessor ? [phoenixSpanProcessor as any] : undefined,
// Override resource attributes to include Phoenix-specific ones
// attributes: {
// [SEMRESATTRS_PROJECT_NAME]: SERVICE_NAME,
// }
});
if (process.env.NEXT_RUNTIME === 'nodejs') {
await import('./sentry.server.config');
}
if (process.env.NEXT_RUNTIME === 'edge') {
await import('./sentry.edge.config');
}
}
export const onRequestError = Sentry.captureRequestError;
i've added a console.log in the span filter and am seeing those logs come through but no traces in phoenix online i have set these two variables
PHOENIX_API_KEY=''
PHOENIX_COLLECTOR_ENDPOINT="https://app.phoenix.arize.com/v1/traces"
and i call streamText with experimental_telemetry: {enabled:true} these are my otel + openinference packages
@arizeai/openinference-semantic-conventions 2.1.0
@arizeai/openinference-vercel 2.2.2
@vercel/otel 1.13.0
@opentelemetry/api 1.8.0
@opentelemetry/api-logs 0.46.0
@opentelemetry/exporter-trace-otlp-proto 0.46.0
@opentelemetry/instrumentation 0.46.0
@opentelemetry/resources 1.19.0
@opentelemetry/sdk-logs 0.46.0
@opentelemetry/sdk-metrics 1.19.0
@opentelemetry/sdk-trace-base 1.19.0
@opentelemetry/sdk-trace-node 1.19.0
@opentelemetry/semantic-conventions 1.19.0not sure where i'm going wrong since the span filter is logging
