> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/Arize-ai/openinference/llms.txt
> Use this file to discover all available pages before exploring further.

# OpenAI

> Auto-instrumentation for the OpenAI Node.js SDK

This module provides automatic instrumentation for the [OpenAI Node.js SDK](https://github.com/openai/openai-node) which may be used in conjunction with OpenTelemetry.

## Installation

Install the instrumentation package:

<CodeGroup>
  ```bash npm theme={null}
  npm install --save @arizeai/openinference-instrumentation-openai
  ```

  ```bash yarn theme={null}
  yarn add @arizeai/openinference-instrumentation-openai
  ```

  ```bash pnpm theme={null}
  pnpm add @arizeai/openinference-instrumentation-openai
  ```
</CodeGroup>

## Usage

To load the OpenAI instrumentation, specify it in the registerInstrumentations call along with any additional instrumentation you wish to enable.

```typescript theme={null}
const { NodeTracerProvider } = require("@opentelemetry/sdk-trace-node");
const { OpenAIInstrumentation } = require("@arizeai/openinference-instrumentation-openai");
const { registerInstrumentations } = require("@opentelemetry/instrumentation");

const provider = new NodeTracerProvider();
provider.register();

registerInstrumentations({
  instrumentations: [new OpenAIInstrumentation()],
});
```

## TypeScript Example

```typescript theme={null}
import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
import { Resource } from "@opentelemetry/resources";
import { SEMRESATTRS_PROJECT_NAME } from "@arizeai/openinference-semantic-conventions";
import { OpenAIInstrumentation } from "@arizeai/openinference-instrumentation-openai";
import { registerInstrumentations } from "@opentelemetry/instrumentation";

// Create a custom tracer provider
const customTracerProvider = new NodeTracerProvider({
  resource: new Resource({
    [SEMRESATTRS_PROJECT_NAME]: "my-openai-project",
  }),
});

// Pass the custom tracer provider to the instrumentation
const openaiInstrumentation = new OpenAIInstrumentation({
  tracerProvider: customTracerProvider,
});

// Register the instrumentation with the custom tracer provider
registerInstrumentations({
  instrumentations: [openaiInstrumentation],
  tracerProvider: customTracerProvider,
});
```

Alternatively, you can set the tracer provider after creating the instrumentation:

```typescript theme={null}
const openaiInstrumentation = new OpenAIInstrumentation();
openaiInstrumentation.setTracerProvider(customTracerProvider);
```

## Compatibility

`@arizeai/openinference-instrumentation-openai` is compatible with the following versions of the `openai` package:

| OpenAI Version | OpenInference Instrumentation Version |
| -------------- | ------------------------------------- |
| ^6.0.0         | ^4.0.0                                |
| ^5.0.0         | ^3.0.0                                |
| ^4.0.0         | ^2.0.0                                |

## Resources

* [npm package](https://www.npmjs.com/package/@arizeai/openinference-instrumentation-openai)
* [Source code](https://github.com/Arize-ai/openinference/tree/main/js/packages/openinference-instrumentation-openai)
* [OpenTelemetry Node.js SDK documentation](https://opentelemetry.io/docs/instrumentation/js/getting-started/nodejs/)
