Skip to content
cccskills
FreePublished on GitHub

genai:semantic-conventions

OpenTelemetry GenAI semantic conventions for agent instrumentation - the standard attributes for LLM observability

The English summary is being prepared. Showing the original description.

rossoctl/rossoctl303 stars(GitHub 303 + cccskills 0)
Works withOpenAI

Run score Not tested

See how to install

Files included (1)

  • SKILL.md5.4 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

OpenTelemetry GenAI Semantic Conventions

Reference for instrumenting agents with OpenTelemetry GenAI semantic conventions.

Spec: https://opentelemetry.io/docs/specs/semconv/gen-ai/

Architecture

Agent (gen_ai.* only) → OTEL Collector → Transform → Phoenix (llm.*) + MLflow (mlflow.trace.*)

Agents emit only gen_ai.* attributes. The OTEL Collector transforms these to:

  • OpenInference format (llm.*) for Phoenix
  • MLflow metadata (mlflow.trace.*) for MLflow session tracking

Core Attributes

Request Attributes (on LLM call spans)

AttributeTypeDescriptionExample
gen_ai.systemstringGenAI provider/systemopenai, anthropic, langchain
gen_ai.request.modelstringModel requestedgpt-4, claude-3-opus
gen_ai.request.max_tokensintMax tokens to generate1024
gen_ai.request.temperaturefloatSampling temperature0.7
gen_ai.request.top_pfloatNucleus sampling0.9

Response Attributes

AttributeTypeDescriptionExample
gen_ai.response.modelstringModel that respondedgpt-4-0613
gen_ai.response.idstringResponse identifierchatcmpl-abc123
gen_ai.response.finish_reasonsstring[]Why generation stopped["stop"]
gen_ai.usage.input_tokensintPrompt tokens150
gen_ai.usage.output_tokensintCompletion tokens250

Conversation/Session Attributes

AttributeTypeDescriptionExample
gen_ai.conversation.idstringSession/conversation IDuuid-123-456
gen_ai.promptstringUser prompt (truncated)What is the weather?
gen_ai.completionstringResponse (truncated)The weather is sunny

Agent Attributes (custom, for A2A agents)

AttributeTypeDescriptionExample
gen_ai.agent.namestringAgent nameweather-assistant
gen_ai.agent.idstringAgent/task IDtask-uuid-789

Python Usage

Auto-instrumentation (Recommended)

# Install: pip install opentelemetry-instrumentation-openai
from opentelemetry.instrumentation.openai import OpenAIInstrumentor

# Instruments all OpenAI SDK calls automatically
OpenAIInstrumentor().instrument()

Manual Span Attributes

from opentelemetry import trace

tracer = trace.get_tracer(__name__)

with tracer.start_as_current_span(
    "gen_ai.agent.invoke",
    attributes={
        "gen_ai.conversation.id": context_id,
        "gen_ai.agent.name": "my-agent",
        "gen_ai.system": "langchain",
        "gen_ai.request.model": "gpt-4",
        "gen_ai.prompt": user_input[:500],  # Truncate for size
    }
) as span:
    # Agent logic here
    result = await agent.run(user_input)

    # Add response attributes
    span.set_attribute("gen_ai.completion", str(result)[:500])

Adding to Existing Span

current_span = trace.get_current_span()
if current_span and current_span.is_recording():
    current_span.set_attribute("gen_ai.conversation.id", session_id)
    current_span.set_attribute("gen_ai.agent.name", "weather-assistant")

OTEL Collector Transforms

The collector transforms gen_ai.* to target formats:

GenAI → OpenInference (Phoenix)

GenAI AttributeOpenInference Attribute
gen_ai.request.modelllm.model_name
gen_ai.usage.input_tokensllm.token_count.prompt
gen_ai.usage.output_tokensllm.token_count.completion
gen_ai.systemllm.provider, llm.system

GenAI → MLflow

GenAI AttributeMLflow Metadata
gen_ai.conversation.idmlflow.trace.session (resource)
Span name gen_ai.agent.*mlflow.spanType=AGENT
Span with gen_ai.request.modelmlflow.spanType=LLM
Span name gen_ai.tool.*mlflow.spanType=TOOL

Span Naming Conventions

Use GenAI operation names for spans:

OperationSpan Name
Agent invocationgen_ai.agent.invoke
LLM chat completiongen_ai.chat
Tool callgen_ai.tool.{tool_name}
Embeddinggen_ai.embeddings

Best Practices

  1. Always set gen_ai.conversation.id for session tracking in MLflow
  2. Truncate prompts/completions to ~500 chars to avoid span size issues
  3. Use auto-instrumentation when available (OpenAI, Anthropic SDKs)
  4. Add manual attributes for custom agent spans
  5. Never emit OpenInference (llm.*) directly - let the collector transform

Dependencies

# pyproject.toml
dependencies = [
    "opentelemetry-sdk",
    "opentelemetry-exporter-otlp",
    "opentelemetry-instrumentation-openai>=0.34b0",  # For OpenAI auto-instrumentation
]

Related Skills

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

auth

Free

Authentication and authorization patterns for Rossoctl services

The English summary is being prepared. Showing the original description.

rossoctl/rossoctl303Updated Oct 25, 2026

Create confidential OAuth2 clients in Keycloak for server-to-service authentication

The English summary is being prepared. Showing the original description.

rossoctl/rossoctl303Updated Oct 25, 2026

Configure MLflow with mlflow-oidc-auth plugin for Keycloak OIDC authentication

The English summary is being prepared. Showing the original description.

rossoctl/rossoctl303Updated Oct 25, 2026

Configure OpenTelemetry Collector with OAuth2 authentication for trace export

The English summary is being prepared. Showing the original description.

rossoctl/rossoctl303Updated Oct 25, 2026

ci

Free

CI pipeline monitoring, status checks, and PR validation workflows

The English summary is being prepared. Showing the original description.

rossoctl/rossoctl303Updated Oct 25, 2026

Monitor running CI jobs, wait for completion, create tasks for results

The English summary is being prepared. Showing the original description.

rossoctl/rossoctl303Updated Oct 25, 2026

See all skills by rossoctl

Report a problem with this skill