Skip to main content

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.

This module provides automatic instrumentation for the Anthropic SDK which may be used in conjunction with OpenTelemetry.

Installation

Install the instrumentation package:
npm install @arizeai/openinference-instrumentation-anthropic

Quickstart

Install required packages:
npm install @arizeai/openinference-instrumentation-anthropic @arizeai/openinference-semantic-conventions @anthropic-ai/sdk @opentelemetry/sdk-node @opentelemetry/exporter-trace-otlp-proto @opentelemetry/sdk-trace-node @opentelemetry/semantic-conventions
Set up instrumentation in your application:
import { NodeSDK, resources } from "@opentelemetry/sdk-node";
import { AnthropicInstrumentation } from "@arizeai/openinference-instrumentation-anthropic";
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto";
import { SimpleSpanProcessor } from "@opentelemetry/sdk-trace-node";
import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions";
import { SEMRESATTRS_PROJECT_NAME } from "@arizeai/openinference-semantic-conventions";

import Anthropic from "@anthropic-ai/sdk";

// Configure the SDK with Anthropic instrumentation
const instrumentation = new AnthropicInstrumentation({
  // Optional: configure trace settings
  traceConfig: {
    // hideInputs: true,
    // hideOutputs: true,
  },
});
// necessary when instrumenting in an ESM environment
instrumentation.manuallyInstrument(Anthropic);
const sdk = new NodeSDK({
  spanProcessors: [
    new SimpleSpanProcessor(
      new OTLPTraceExporter({
        url: "http://localhost:6006/v1/traces",
      }),
    ),
  ],
  resource: resources.resourceFromAttributes({
    [ATTR_SERVICE_NAME]: "anthropic-service",
    [SEMRESATTRS_PROJECT_NAME]: "anthropic-service",
  }),
  instrumentations: [instrumentation],
});

// Initialize the SDK
sdk.start();

// Now use Anthropic as normal

const anthropic = new Anthropic({
  apiKey: process.env.ANTHROPIC_API_KEY,
});

const message = await anthropic.messages.create({
  model: "claude-3-5-haiku-latest",
  max_tokens: 1000,
  messages: [{ role: "user", content: "Hello, Claude!" }],
});

console.log(message.content);

sdk.shutdown();

Configuration

The AnthropicInstrumentation constructor accepts the following options:
  • instrumentationConfig: Standard OpenTelemetry instrumentation configuration
  • traceConfig: OpenInference-specific trace configuration for masking/redacting sensitive information
  • tracerProvider: Optional custom tracer provider

Supported Features

  • Messages API: Full support for anthropic.messages.create()
  • Streaming: Automatic handling of streaming responses
  • Tool Use: Captures tool/function calling information
  • Token Usage: Records input/output token counts when available
  • Error Handling: Proper error recording and span status management

Semantic Conventions

This instrumentation follows the OpenInference semantic conventions for LLM observability, capturing:
  • Model name and provider information
  • Input/output messages and content
  • Token usage statistics
  • Tool calling details
  • Invocation parameters

Resources