Skip to content

Conversation

@jimilp7
Copy link

@jimilp7 jimilp7 commented Jan 29, 2026

Summary

Fixes: #6673

This PR makes the AI SDK telemetry compliant with OpenTelemetry GenAI Semantic Conventions.

Target Version: AI SDK v6 (uses LanguageModelV3 types)

Changes

  • Set SpanKind.CLIENT for LLM API call spans (doGenerate/doStream)
  • Update span naming to {operation} {model} format (e.g., chat gpt-4)
  • Add gen_ai.operation.name attribute (chat, text_completion, embeddings)
  • Add gen_ai.provider.name attribute (alongside deprecated gen_ai.system)
  • Add gen_ai.input.messages with OTel message schema (role/parts format)
  • Add gen_ai.output.messages with OTel message schema
  • Add gen_ai.tool.definitions with OTel tool schema

Files Modified

  • packages/ai/src/telemetry/record-span.ts - Added kind parameter
  • packages/ai/src/telemetry/convert-to-otel-genai-messages.ts - NEW: conversion helpers
  • packages/ai/src/telemetry/convert-to-otel-genai-messages.test.ts - NEW: tests
  • packages/ai/src/generate-text/stream-text.ts
  • packages/ai/src/generate-text/generate-text.ts
  • packages/ai/src/generate-object/generate-object.ts
  • packages/ai/src/generate-object/stream-object.ts

OTel Message Schema

Messages now follow the OTel GenAI format:

[
  {"role": "user", "parts": [{"type": "text", "content": "Hello"}]},
  {"role": "assistant", "parts": [
    {"type": "text", "content": "Hi!"},
    {"type": "tool_call", "id": "call_123", "name": "get_weather", "arguments": {...}}
  ]},
  {"role": "tool", "parts": [{"type": "tool_call_response", "id": "call_123", "result": "..."}]}
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

1 participant