OpenInference JS
    Preparing search index...

    Module @arizeai/openinference-genai

    OpenInference GenAI

    npm version

    This package provides a set of utilities to convert OpenTelemetry GenAI span attributes to OpenInference span attributes.

    Warning

    The OpenTelemetry GenAI conventions are still incubating, and may include breaking changes at any time. This package will attempt best effort conversions of a subset of the OpenTelemetry GenAI attributes to OpenInference attributes. Currently, attributes reflect their definition as of October 2025.

    npm install --save @arizeai/openinference-genai
    

    @arizeai/openinference-genai can be used as a standalone set of helper functions, or in conjunction with a SpanProcessor in order to automatically convert OpenTelemetry GenAI spans to OpenInference spans.

    You can mutate the span attributes in place by using the standalone helper functions.

    Important

    Span mutation is not supported by the OpenTelemetry SDK, so ensure that you are performing mutations in the last-mile of the span's lifetime (i.e. just before exporting the span in a SpanProcessor).

    import { convertGenAISpanAttributesToOpenInferenceSpanAttributes } from `@arizeai/openinference-genai`

    // obtain a span with OpenTelemetry GenAI attributes from your tracing system
    const span: ReadableSpan = {/* ... */}

    // convert the span attributes to OpenInference attributes
    const openinferenceAttributes = convertGenAISpanAttributesToOpenInferenceSpanAttributes(span.attributes)

    // add the OpenInference attributes to the span
    span.attributes = {...span.attributes, ...openinferenceAttributes}

    You can use the a custom TraceExporter to automatically convert OpenTelemetry GenAI spans to OpenInference spans.

    See examples/export-spans.ts for a runnable version of the following sample code.

    Start by installing packages

    pnpm add @opentelemetry/api @opentelemetry/core @opentelemetry/exporter-trace-otlp-proto @opentelemetry/sdk-trace-base @opentelemetry/sdk-trace-node @opentelemetry/semantic-conventions @opentelemetry/resources @arizeai/openinference-genai
    

    Create a custom TraceExporter that converts the OpenTelemetry GenAI attributes to OpenInference attributes.

    // openinferenceOTLPTraceExporter.ts
    import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto";
    import type { ReadableSpan } from "@opentelemetry/sdk-trace-base";
    import type { ExportResult } from "@opentelemetry/core";

    import { convertGenAISpanAttributesToOpenInferenceSpanAttributes } from "@arizeai/openinference-genai";
    import type { Mutable } from "@arizeai/openinference-genai/types";

    class OpenInferenceOTLPTraceExporter extends OTLPTraceExporter {
    export(
    spans: ReadableSpan[],
    resultCallback: (result: ExportResult) => void,
    ) {
    const processedSpans = spans.map((span) => {
    const processedAttributes =
    convertGenAISpanAttributesToOpenInferenceSpanAttributes(
    span.attributes,
    );
    // optionally you can replace the entire attributes object with the
    // processed attributes if you want _only_ the OpenInference attributes
    (span as Mutable<ReadableSpan>).attributes = {
    ...span.attributes,
    ...processedAttributes,
    };
    return span;
    });

    super.export(processedSpans, resultCallback);
    }
    }

    And then use it in the SpanProcessor of your choice.

    // instrumentation.ts
    import { resourceFromAttributes } from "@opentelemetry/resources";
    import {
    NodeTracerProvider,
    BatchSpanProcessor,
    } from "@opentelemetry/sdk-trace-node";
    import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions";

    import { SEMRESATTRS_PROJECT_NAME } from "@arizeai/openinference-semantic-conventions";

    import { OpenInferenceOTLPTraceExporter } from "./openinferenceOTLPTraceExporter";

    const COLLECTOR_ENDPOINT = process.env.COLLECTOR_ENDPOINT;
    const SERVICE_NAME = "openinference-genai-app";

    export const provider = new NodeTracerProvider({
    resource: resourceFromAttributes({
    [ATTR_SERVICE_NAME]: SERVICE_NAME,
    [SEMRESATTRS_PROJECT_NAME]: SERVICE_NAME,
    }),
    spanProcessors: [
    new BatchSpanProcessor(
    new OpenInferenceOTLPTraceExporter({
    url: `${COLLECTOR_ENDPOINT}/v1/traces`,
    }),
    ),
    ],
    });

    provider.register();

    See the examples directory in this package for more executable examples.

    To execute an example, run the following commands:

    cd js/packages/openinference-genai
    pnpm install
    pnpm -r build
    pnpx tsx examples/export-spans.ts

    Modules

    __generated__/opentelemetryInputMessages
    __generated__/opentelemetryOutputMessages
    attributes
    index
    types
    utils