diff --git a/js/packages/openinference-core/test/trace-config/OITracer.test.ts b/js/packages/openinference-core/test/trace-config/OITracer.test.ts index 90e62ca9b..5ecf8c333 100644 --- a/js/packages/openinference-core/test/trace-config/OITracer.test.ts +++ b/js/packages/openinference-core/test/trace-config/OITracer.test.ts @@ -27,16 +27,16 @@ import { type Mocked, vi, } from "vitest"; -const memoryExporter = new InMemorySpanExporter(); -const tracerProvider = new NodeTracerProvider({ - spanProcessors: [new SimpleSpanProcessor(memoryExporter)], -}); -tracerProvider.register(); describe("OITracer", () => { let mockTracer: Mocked; let mockSpan: Mocked; let contextManager: ContextManager; + const memoryExporter = new InMemorySpanExporter(); + const tracerProvider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(memoryExporter)], + }); + tracerProvider.register(); beforeEach(() => { contextManager = new AsyncHooksContextManager().enable(); diff --git a/js/packages/openinference-instrumentation-anthropic/test/instrumentation.test.ts b/js/packages/openinference-instrumentation-anthropic/test/instrumentation.test.ts index c6648d62f..0045949af 100644 --- a/js/packages/openinference-instrumentation-anthropic/test/instrumentation.test.ts +++ b/js/packages/openinference-instrumentation-anthropic/test/instrumentation.test.ts @@ -15,9 +15,9 @@ describe("AnthropicInstrumentation", () => { beforeEach(() => { exporter = new InMemorySpanExporter(); - provider = new NodeTracerProvider(); - provider.addSpanProcessor(new SimpleSpanProcessor(exporter)); - + provider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(exporter)], + }); instrumentation = new AnthropicInstrumentation({ tracerProvider: provider, }); diff --git a/js/packages/openinference-instrumentation-bedrock-agent-runtime/test/custom-provider.test.ts b/js/packages/openinference-instrumentation-bedrock-agent-runtime/test/custom-provider.test.ts index d88da3960..6340fca14 100644 --- a/js/packages/openinference-instrumentation-bedrock-agent-runtime/test/custom-provider.test.ts +++ b/js/packages/openinference-instrumentation-bedrock-agent-runtime/test/custom-provider.test.ts @@ -25,14 +25,10 @@ describe("BedrockAgentInstrumentation with a custom tracer provider", () => { let polly: Polly; describe("BedrockAgentInstrumentation with custom TracerProvider passed in", () => { - const customTracerProvider = new NodeTracerProvider(); const customMemoryExporter = new InMemorySpanExporter(); - - // Note: We don't register this provider globally. - customTracerProvider.addSpanProcessor( - new SimpleSpanProcessor(customMemoryExporter), - ); - + const customTracerProvider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(customMemoryExporter)], + }); // Instantiate instrumentation with the custom provider const instrumentation = new BedrockAgentInstrumentation({ tracerProvider: customTracerProvider, @@ -96,13 +92,10 @@ describe("BedrockAgentInstrumentation with a custom tracer provider", () => { }); describe("BedrockkAgentInstrumentation with custom TracerProvider set", () => { - const customTracerProvider = new NodeTracerProvider(); const customMemoryExporter = new InMemorySpanExporter(); - - // Note: We don't register this provider globally. - customTracerProvider.addSpanProcessor( - new SimpleSpanProcessor(customMemoryExporter), - ); + const customTracerProvider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(customMemoryExporter)], + }); // Instantiate instrumentation with the custom provider const instrumentation = new BedrockAgentInstrumentation({}); @@ -167,13 +160,10 @@ describe("BedrockAgentInstrumentation with a custom tracer provider", () => { }); describe("BedrockAgentInstrumentation with custom TracerProvider set via registerInstrumentations", () => { - const customTracerProvider = new NodeTracerProvider(); const customMemoryExporter = new InMemorySpanExporter(); - - // Note: We don't register this provider globally. - customTracerProvider.addSpanProcessor( - new SimpleSpanProcessor(customMemoryExporter), - ); + const customTracerProvider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(customMemoryExporter)], + }); // Instantiate instrumentation with the custom provider const instrumentation = new BedrockAgentInstrumentation(); diff --git a/js/packages/openinference-instrumentation-bedrock-agent-runtime/test/integration.instrumentation.agent-traces.test.ts b/js/packages/openinference-instrumentation-bedrock-agent-runtime/test/integration.instrumentation.agent-traces.test.ts index 92c8034aa..9afc9bcc5 100644 --- a/js/packages/openinference-instrumentation-bedrock-agent-runtime/test/integration.instrumentation.agent-traces.test.ts +++ b/js/packages/openinference-instrumentation-bedrock-agent-runtime/test/integration.instrumentation.agent-traces.test.ts @@ -37,8 +37,9 @@ describe("BedrockAgentInstrumentation Trace Collector Integration - agent attrib instrumentation = new BedrockAgentInstrumentation(); instrumentation.disable(); memoryExporter = new InMemorySpanExporter(); - provider = new NodeTracerProvider(); - provider.addSpanProcessor(new SimpleSpanProcessor(memoryExporter)); + provider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(memoryExporter)], + }); provider.register(); instrumentation.setTracerProvider(provider); // Manually set module exports for testing (following OpenAI pattern) diff --git a/js/packages/openinference-instrumentation-bedrock-agent-runtime/test/integration.instrumentation.agent-without-traces.test.ts b/js/packages/openinference-instrumentation-bedrock-agent-runtime/test/integration.instrumentation.agent-without-traces.test.ts index e469c0cd2..636f4ae98 100644 --- a/js/packages/openinference-instrumentation-bedrock-agent-runtime/test/integration.instrumentation.agent-without-traces.test.ts +++ b/js/packages/openinference-instrumentation-bedrock-agent-runtime/test/integration.instrumentation.agent-without-traces.test.ts @@ -32,8 +32,9 @@ describe("BedrockAgentInstrumentation Integration - agent attributes and API rec instrumentation = new BedrockAgentInstrumentation(); instrumentation.disable(); memoryExporter = new InMemorySpanExporter(); - provider = new NodeTracerProvider(); - provider.addSpanProcessor(new SimpleSpanProcessor(memoryExporter)); + provider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(memoryExporter)], + }); provider.register(); instrumentation.setTracerProvider(provider); // Manually set module exports for testing (following OpenAI pattern) diff --git a/js/packages/openinference-instrumentation-bedrock-agent-runtime/test/integration.instrumentation.rag.test.ts b/js/packages/openinference-instrumentation-bedrock-agent-runtime/test/integration.instrumentation.rag.test.ts index c9f7e2cc1..3690aa4c9 100644 --- a/js/packages/openinference-instrumentation-bedrock-agent-runtime/test/integration.instrumentation.rag.test.ts +++ b/js/packages/openinference-instrumentation-bedrock-agent-runtime/test/integration.instrumentation.rag.test.ts @@ -39,8 +39,9 @@ describe("BedrockAgent RAG Instrumentation - attributes and API recording", () = instrumentation = new BedrockAgentInstrumentation(); instrumentation.disable(); memoryExporter = new InMemorySpanExporter(); - provider = new NodeTracerProvider(); - provider.addSpanProcessor(new SimpleSpanProcessor(memoryExporter)); + provider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(memoryExporter)], + }); provider.register(); instrumentation.setTracerProvider(provider); // Manually set module exports for testing (following OpenAI pattern) diff --git a/js/packages/openinference-instrumentation-bedrock/scripts/validate-converse-comprehensive.ts b/js/packages/openinference-instrumentation-bedrock/scripts/validate-converse-comprehensive.ts index 04cafde77..0e6b8576f 100644 --- a/js/packages/openinference-instrumentation-bedrock/scripts/validate-converse-comprehensive.ts +++ b/js/packages/openinference-instrumentation-bedrock/scripts/validate-converse-comprehensive.ts @@ -98,12 +98,6 @@ class ConverseComprehensiveValidator { } private setupTracing() { - this.provider = new NodeTracerProvider({ - resource: new Resource({ - [SEMRESATTRS_PROJECT_NAME]: "bedrock-converse-comprehensive-validation", - }), - }); - // Setup exporters const exporters = [new ConsoleSpanExporter()]; @@ -136,8 +130,13 @@ class ConverseComprehensiveValidator { exporters.push(phoenixExporter); } - exporters.forEach((exporter) => { - this.provider.addSpanProcessor(new SimpleSpanProcessor(exporter)); + this.provider = new NodeTracerProvider({ + resource: new Resource({ + [SEMRESATTRS_PROJECT_NAME]: "bedrock-converse-comprehensive-validation", + }), + spanProcessors: exporters.map( + (exporter) => new SimpleSpanProcessor(exporter), + ), }); this.provider.register(); diff --git a/js/packages/openinference-instrumentation-bedrock/scripts/validate-converse-stream.ts b/js/packages/openinference-instrumentation-bedrock/scripts/validate-converse-stream.ts index 30e94ebc4..6ccdd304d 100644 --- a/js/packages/openinference-instrumentation-bedrock/scripts/validate-converse-stream.ts +++ b/js/packages/openinference-instrumentation-bedrock/scripts/validate-converse-stream.ts @@ -102,13 +102,6 @@ class ConverseStreamPhoenixValidator { } private setupTracing() { - this.provider = new NodeTracerProvider({ - resource: new Resource({ - [SEMRESATTRS_PROJECT_NAME]: - "bedrock-converse-stream-phoenix-validation", - }), - }); - // Setup exporters const exporters: SpanExporter[] = [new ConsoleSpanExporter()]; @@ -141,8 +134,14 @@ class ConverseStreamPhoenixValidator { exporters.push(phoenixExporter); } - exporters.forEach((exporter) => { - this.provider.addSpanProcessor(new SimpleSpanProcessor(exporter)); + this.provider = new NodeTracerProvider({ + resource: new Resource({ + [SEMRESATTRS_PROJECT_NAME]: + "bedrock-converse-stream-phoenix-validation", + }), + spanProcessors: exporters.map( + (exporter) => new SimpleSpanProcessor(exporter), + ), }); this.provider.register(); diff --git a/js/packages/openinference-instrumentation-bedrock/scripts/validate-invoke-model.ts b/js/packages/openinference-instrumentation-bedrock/scripts/validate-invoke-model.ts index 2e3fe06f6..7f614b1be 100644 --- a/js/packages/openinference-instrumentation-bedrock/scripts/validate-invoke-model.ts +++ b/js/packages/openinference-instrumentation-bedrock/scripts/validate-invoke-model.ts @@ -98,12 +98,6 @@ class InstrumentationValidator { } private setupTracing() { - this.provider = new NodeTracerProvider({ - resource: new Resource({ - [SEMRESATTRS_PROJECT_NAME]: "bedrock-validation-script", - }), - }); - // Setup exporters const exporters = [new ConsoleSpanExporter()]; @@ -136,10 +130,14 @@ class InstrumentationValidator { exporters.push(phoenixExporter); } - exporters.forEach((exporter) => { - this.provider.addSpanProcessor(new SimpleSpanProcessor(exporter)); + this.provider = new NodeTracerProvider({ + resource: new Resource({ + [SEMRESATTRS_PROJECT_NAME]: "bedrock-validation-script", + }), + spanProcessors: exporters.map( + (exporter) => new SimpleSpanProcessor(exporter), + ), }); - this.provider.register(); } diff --git a/js/packages/openinference-instrumentation-bedrock/test/instrumentation.test.ts b/js/packages/openinference-instrumentation-bedrock/test/instrumentation.test.ts index 62b79eb35..d96b4ba8b 100644 --- a/js/packages/openinference-instrumentation-bedrock/test/instrumentation.test.ts +++ b/js/packages/openinference-instrumentation-bedrock/test/instrumentation.test.ts @@ -71,9 +71,10 @@ describe("BedrockInstrumentation", () => { instrumentation = new BedrockInstrumentation(); instrumentation.disable(); // Initially disabled spanExporter = new InMemorySpanExporter(); - provider = new NodeTracerProvider(); + provider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(spanExporter)], + }); - provider.addSpanProcessor(new SimpleSpanProcessor(spanExporter)); provider.register(); instrumentation.setTracerProvider(provider); @@ -3850,8 +3851,9 @@ describe("BedrockInstrumentation - custom tracing", () => { beforeAll(() => { // Setup global tracer provider and span exporter for comparison spanExporter = new InMemorySpanExporter(); - provider = new NodeTracerProvider(); - provider.addSpanProcessor(new SimpleSpanProcessor(spanExporter)); + provider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(spanExporter)], + }); provider.register(); }); @@ -3903,14 +3905,11 @@ describe("BedrockInstrumentation - custom tracing", () => { }); describe("BedrockInstrumentation with custom TracerProvider passed in", () => { - const customTracerProvider = new NodeTracerProvider(); const customMemoryExporter = new InMemorySpanExporter(); let instrumentation: BedrockInstrumentation; - - // Note: We don't register this provider globally. - customTracerProvider.addSpanProcessor( - new SimpleSpanProcessor(customMemoryExporter), - ); + const customTracerProvider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(customMemoryExporter)], + }); beforeAll(async () => { // Instantiate instrumentation with the custom provider @@ -3975,14 +3974,11 @@ describe("BedrockInstrumentation - custom tracing", () => { }); describe("BedrockInstrumentation with custom TracerProvider set", () => { - const customTracerProvider = new NodeTracerProvider(); const customMemoryExporter = new InMemorySpanExporter(); let instrumentation: BedrockInstrumentation; - - // Note: We don't register this provider globally. - customTracerProvider.addSpanProcessor( - new SimpleSpanProcessor(customMemoryExporter), - ); + const customTracerProvider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(customMemoryExporter)], + }); beforeAll(async () => { // Instantiate instrumentation and set the custom provider @@ -4046,15 +4042,12 @@ describe("BedrockInstrumentation - custom tracing", () => { }); describe("BedrockInstrumentation with custom TracerProvider set via registerInstrumentations", () => { - const customTracerProvider = new NodeTracerProvider(); const customMemoryExporter = new InMemorySpanExporter(); + const customTracerProvider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(customMemoryExporter)], + }); let instrumentation: BedrockInstrumentation; - // Note: We don't register this provider globally. - customTracerProvider.addSpanProcessor( - new SimpleSpanProcessor(customMemoryExporter), - ); - beforeAll(async () => { // Instantiate instrumentation and register with the custom provider instrumentation = new BedrockInstrumentation(); diff --git a/js/packages/openinference-instrumentation-langchain/examples/instrumentation.ts b/js/packages/openinference-instrumentation-langchain/examples/instrumentation.ts index d13299858..39bd02d25 100644 --- a/js/packages/openinference-instrumentation-langchain/examples/instrumentation.ts +++ b/js/packages/openinference-instrumentation-langchain/examples/instrumentation.ts @@ -21,17 +21,16 @@ const provider = new NodeTracerProvider({ [ATTR_SERVICE_NAME]: "langchain-service", [SEMRESATTRS_PROJECT_NAME]: "langchain-project", }), + spanProcessors: [ + new SimpleSpanProcessor(new ConsoleSpanExporter()), + new SimpleSpanProcessor( + new OTLPTraceExporter({ + url: "http://localhost:6006/v1/traces", + }), + ), + ], }); -provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter())); -provider.addSpanProcessor( - new SimpleSpanProcessor( - new OTLPTraceExporter({ - url: "http://localhost:6006/v1/traces", - }), - ), -); - const lcInstrumentation = new LangChainInstrumentation(); // LangChain must be manually instrumented as it doesn't have a traditional module structure lcInstrumentation.manuallyInstrument(CallbackManagerModule); diff --git a/js/packages/openinference-instrumentation-langchain/test/langchainV3.test.ts b/js/packages/openinference-instrumentation-langchain/test/langchainV3.test.ts index fdad5b637..fdcac9662 100644 --- a/js/packages/openinference-instrumentation-langchain/test/langchainV3.test.ts +++ b/js/packages/openinference-instrumentation-langchain/test/langchainV3.test.ts @@ -135,7 +135,9 @@ const expectedSpanAttributes = { }; describe("LangChainInstrumentation", () => { - const tracerProvider = new NodeTracerProvider(); + const tracerProvider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(memoryExporter)], + }); tracerProvider.register(); const instrumentation = new LangChainInstrumentation(); instrumentation.disable(); @@ -144,7 +146,6 @@ describe("LangChainInstrumentation", () => { provider.getTracer("default"); instrumentation.setTracerProvider(tracerProvider); - tracerProvider.addSpanProcessor(new SimpleSpanProcessor(memoryExporter)); const PROMPT_TEMPLATE = `Use the context below to answer the question. ---------------- @@ -703,7 +704,9 @@ describe("LangChainInstrumentation", () => { }); describe("LangChainInstrumentation with TraceConfigOptions", () => { - const tracerProvider = new NodeTracerProvider(); + const tracerProvider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(memoryExporter)], + }); tracerProvider.register(); const instrumentation = new LangChainInstrumentation({ traceConfig: { @@ -714,7 +717,6 @@ describe("LangChainInstrumentation with TraceConfigOptions", () => { const provider = new NodeTracerProvider(); provider.getTracer("default"); instrumentation.setTracerProvider(tracerProvider); - tracerProvider.addSpanProcessor(new SimpleSpanProcessor(memoryExporter)); beforeAll(() => { // Use manual instrumentation as intended for LangChain @@ -784,13 +786,10 @@ describe("LangChainInstrumentation with TraceConfigOptions", () => { describe("LangChainInstrumentation with a custom tracer provider", () => { describe("LangChainInstrumentation with custom TracerProvider passed in", () => { - const customTracerProvider = new NodeTracerProvider(); const customMemoryExporter = new InMemorySpanExporter(); - - // Note: We don't register this provider globally. - customTracerProvider.addSpanProcessor( - new SimpleSpanProcessor(customMemoryExporter), - ); + const customTracerProvider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(customMemoryExporter)], + }); // Instantiate instrumentation with the custom provider const instrumentation = new LangChainInstrumentation({ @@ -839,13 +838,10 @@ describe("LangChainInstrumentation with a custom tracer provider", () => { }); describe("LangChainInstrumentation with custom TracerProvider set", () => { - const customTracerProvider = new NodeTracerProvider(); const customMemoryExporter = new InMemorySpanExporter(); - - // Note: We don't register this provider globally. - customTracerProvider.addSpanProcessor( - new SimpleSpanProcessor(customMemoryExporter), - ); + const customTracerProvider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(customMemoryExporter)], + }); // Instantiate instrumentation with the custom provider const instrumentation = new LangChainInstrumentation(); @@ -889,13 +885,10 @@ describe("LangChainInstrumentation with a custom tracer provider", () => { }); describe("LangChainInstrumentation with custom TracerProvider set via registerInstrumentations", () => { - const customTracerProvider = new NodeTracerProvider(); const customMemoryExporter = new InMemorySpanExporter(); - - // Note: We don't register this provider globally. - customTracerProvider.addSpanProcessor( - new SimpleSpanProcessor(customMemoryExporter), - ); + const customTracerProvider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(customMemoryExporter)], + }); // Instantiate instrumentation with the custom provider const instrumentation = new LangChainInstrumentation(); diff --git a/js/packages/openinference-instrumentation-openai/examples/instrumentation.ts b/js/packages/openinference-instrumentation-openai/examples/instrumentation.ts index 5f43b1a40..338c0342b 100644 --- a/js/packages/openinference-instrumentation-openai/examples/instrumentation.ts +++ b/js/packages/openinference-instrumentation-openai/examples/instrumentation.ts @@ -1,3 +1,5 @@ +import { SEMRESATTRS_PROJECT_NAME } from "@arizeai/openinference-semantic-conventions"; + import { diag, DiagConsoleLogger, DiagLogLevel } from "@opentelemetry/api"; import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto"; import { registerInstrumentations } from "@opentelemetry/instrumentation"; @@ -7,7 +9,6 @@ import { NodeTracerProvider, SimpleSpanProcessor, } from "@opentelemetry/sdk-trace-node"; -import { SEMRESATTRS_SERVICE_NAME } from "@opentelemetry/semantic-conventions"; import { OpenAIInstrumentation } from "../src/index"; @@ -16,19 +17,18 @@ diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG); const provider = new NodeTracerProvider({ resource: new Resource({ - [SEMRESATTRS_SERVICE_NAME]: "openai-service", + [SEMRESATTRS_PROJECT_NAME]: "openai-service", }), + spanProcessors: [ + new SimpleSpanProcessor(new ConsoleSpanExporter()), + new SimpleSpanProcessor( + new OTLPTraceExporter({ + url: "http://localhost:6006/v1/traces", + }), + ), + ], }); -provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter())); -provider.addSpanProcessor( - new SimpleSpanProcessor( - new OTLPTraceExporter({ - url: "http://localhost:6006/v1/traces", - }), - ), -); - registerInstrumentations({ instrumentations: [new OpenAIInstrumentation()], }); diff --git a/js/packages/openinference-instrumentation-openai/examples/manual-instrumentation.ts b/js/packages/openinference-instrumentation-openai/examples/manual-instrumentation.ts index 03ab6d6e8..6e86ce984 100644 --- a/js/packages/openinference-instrumentation-openai/examples/manual-instrumentation.ts +++ b/js/packages/openinference-instrumentation-openai/examples/manual-instrumentation.ts @@ -3,6 +3,8 @@ * This file shows an example of how if openai is already imported, you can manually instrument it after it's been imported. */ +import { SEMRESATTRS_PROJECT_NAME } from "@arizeai/openinference-semantic-conventions"; + import { diag, DiagConsoleLogger, DiagLogLevel } from "@opentelemetry/api"; import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto"; import { Resource } from "@opentelemetry/resources"; @@ -10,7 +12,6 @@ import { NodeTracerProvider, SimpleSpanProcessor, } from "@opentelemetry/sdk-trace-node"; -import { SEMRESATTRS_SERVICE_NAME } from "@opentelemetry/semantic-conventions"; import { isPatched, OpenAIInstrumentation } from "../src"; @@ -22,18 +23,17 @@ diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG); const provider = new NodeTracerProvider({ resource: new Resource({ - [SEMRESATTRS_SERVICE_NAME]: "openai-service", + [SEMRESATTRS_PROJECT_NAME]: "openai-service", }), + spanProcessors: [ + new SimpleSpanProcessor( + new OTLPTraceExporter({ + url: "http://localhost:6006/v1/traces", + }), + ), + ], }); -provider.addSpanProcessor( - new SimpleSpanProcessor( - new OTLPTraceExporter({ - url: "http://localhost:6006/v1/traces", - }), - ), -); - provider.register(); // Make sure that openai is not patched diff --git a/js/packages/openinference-instrumentation-openai/test/openai.responses.test.ts b/js/packages/openinference-instrumentation-openai/test/openai.responses.test.ts index ced2e58db..6596f0262 100644 --- a/js/packages/openinference-instrumentation-openai/test/openai.responses.test.ts +++ b/js/packages/openinference-instrumentation-openai/test/openai.responses.test.ts @@ -17,14 +17,15 @@ const memoryExporter = new InMemorySpanExporter(); // Add new describe block for OpenAI Responses tests describe("OpenAIInstrumentation - Responses", () => { - const tracerProvider = new NodeTracerProvider(); + const tracerProvider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(memoryExporter)], + }); tracerProvider.register(); const instrumentation = new OpenAIInstrumentation(); instrumentation.disable(); let openai: OpenAI; instrumentation.setTracerProvider(tracerProvider); - tracerProvider.addSpanProcessor(new SimpleSpanProcessor(memoryExporter)); // @ts-expect-error the moduleExports property is private. This is needed to make the test work with auto-mocking instrumentation._modules[0].moduleExports = OpenAI; diff --git a/js/packages/openinference-instrumentation-openai/test/openai.test.ts b/js/packages/openinference-instrumentation-openai/test/openai.test.ts index 9865acd54..87f37fc4b 100644 --- a/js/packages/openinference-instrumentation-openai/test/openai.test.ts +++ b/js/packages/openinference-instrumentation-openai/test/openai.test.ts @@ -32,14 +32,15 @@ process.env.OPENAI_API_KEY = "fake-api-key"; const memoryExporter = new InMemorySpanExporter(); describe("OpenAIInstrumentation", () => { - const tracerProvider = new NodeTracerProvider(); + const tracerProvider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(memoryExporter)], + }); tracerProvider.register(); const instrumentation = new OpenAIInstrumentation(); instrumentation.disable(); let openai: OpenAI; instrumentation.setTracerProvider(tracerProvider); - tracerProvider.addSpanProcessor(new SimpleSpanProcessor(memoryExporter)); // @ts-expect-error the moduleExports property is private. This is needed to make the test work with auto-mocking instrumentation._modules[0].moduleExports = OpenAI; @@ -1110,7 +1111,9 @@ describe("OpenAIInstrumentation", () => { }); describe("OpenAIInstrumentation with TraceConfig", () => { - const tracerProvider = new NodeTracerProvider(); + const tracerProvider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(memoryExporter)], + }); tracerProvider.register(); const instrumentation = new OpenAIInstrumentation({ traceConfig: { hideInputs: true }, @@ -1119,7 +1122,6 @@ describe("OpenAIInstrumentation with TraceConfig", () => { let openai: OpenAI; instrumentation.setTracerProvider(tracerProvider); - tracerProvider.addSpanProcessor(new SimpleSpanProcessor(memoryExporter)); // @ts-expect-error the moduleExports property is private. This is needed to make the test work with auto-mocking instrumentation._modules[0].moduleExports = OpenAI; @@ -1195,14 +1197,15 @@ describe("OpenAIInstrumentation with TraceConfig", () => { }); describe("AzureOpenAIInstrumentation", () => { - const tracerProvider = new NodeTracerProvider(); + const tracerProvider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(memoryExporter)], + }); tracerProvider.register(); const instrumentation = new OpenAIInstrumentation(); instrumentation.disable(); let azureOpenai: AzureOpenAI; instrumentation.setTracerProvider(tracerProvider); - tracerProvider.addSpanProcessor(new SimpleSpanProcessor(memoryExporter)); // @ts-expect-error the moduleExports property is private. This is needed to make the test work with auto-mocking instrumentation._modules[0].moduleExports = OpenAI; @@ -1402,15 +1405,12 @@ describe("AzureOpenAIInstrumentation", () => { describe("OpenAIInstrumentation with a custom tracer provider", () => { describe("OpenAIInstrumentation with custom TracerProvider passed in", () => { - const customTracerProvider = new NodeTracerProvider(); const customMemoryExporter = new InMemorySpanExporter(); + const customTracerProvider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(customMemoryExporter)], + }); let openai: OpenAI; - // Note: We don't register this provider globally. - customTracerProvider.addSpanProcessor( - new SimpleSpanProcessor(customMemoryExporter), - ); - // Instantiate instrumentation with the custom provider const instrumentation = new OpenAIInstrumentation({ tracerProvider: customTracerProvider, @@ -1490,15 +1490,12 @@ describe("OpenAIInstrumentation with a custom tracer provider", () => { }); describe("OpenAIInstrumentation with custom TracerProvider set", () => { - const customTracerProvider = new NodeTracerProvider(); const customMemoryExporter = new InMemorySpanExporter(); + const customTracerProvider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(customMemoryExporter)], + }); let openai: OpenAI; - // Note: We don't register this provider globally. - customTracerProvider.addSpanProcessor( - new SimpleSpanProcessor(customMemoryExporter), - ); - // Instantiate instrumentation with the custom provider const instrumentation = new OpenAIInstrumentation(); instrumentation.setTracerProvider(customTracerProvider); @@ -1577,15 +1574,12 @@ describe("OpenAIInstrumentation with a custom tracer provider", () => { }); describe("OpenAIInstrumentation with custom TracerProvider set via registerInstrumentations", () => { - const customTracerProvider = new NodeTracerProvider(); const customMemoryExporter = new InMemorySpanExporter(); + const customTracerProvider = new NodeTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(customMemoryExporter)], + }); let openai: OpenAI; - // Note: We don't register this provider globally. - customTracerProvider.addSpanProcessor( - new SimpleSpanProcessor(customMemoryExporter), - ); - // Instantiate instrumentation with the custom provider const instrumentation = new OpenAIInstrumentation(); registerInstrumentations({ diff --git a/js/packages/openinference-vercel/src/OpenInferenceSpanProcessor.ts b/js/packages/openinference-vercel/src/OpenInferenceSpanProcessor.ts index 0d054d41b..6efc60520 100644 --- a/js/packages/openinference-vercel/src/OpenInferenceSpanProcessor.ts +++ b/js/packages/openinference-vercel/src/OpenInferenceSpanProcessor.ts @@ -27,7 +27,14 @@ import { addOpenInferenceAttributesToSpan, shouldExportSpan } from "./utils"; * exporter, * spanFilter: isOpenInferenceSpan, * }); - * tracerProvider.addSpanProcessor(processor); + * + * const tracerProvider = new NodeTracerProvider({ + * resource: resourceFromAttributes({ + * [SEMRESATTRS_PROJECT_NAME]: "your-project-name", + * }), + * spanProcessors: [processor], // <-- pass processor here + * }); + * * ``` */ export class OpenInferenceSimpleSpanProcessor extends SimpleSpanProcessor { @@ -81,7 +88,14 @@ export class OpenInferenceSimpleSpanProcessor extends SimpleSpanProcessor { * spanFilter: isOpenInferenceSpan, * config: { maxQueueSize: 2048, scheduledDelayMillis: 5000 }, * }); - * tracerProvider.addSpanProcessor(processor); + * + * const tracerProvider = new NodeTracerProvider({ + * resource: resourceFromAttributes({ + * [SEMRESATTRS_PROJECT_NAME]: "your-project-name", + * }), + * spanProcessors: [processor], // <-- pass processor here + * }); + * * ``` */ export class OpenInferenceBatchSpanProcessor extends BatchSpanProcessor {