Skip to content

Commit fae3b26

Browse files
committed
revert: restore original span processor
1 parent 1697f3d commit fae3b26

File tree

1 file changed

+21
-39
lines changed
  • instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/src/opentelemetry/instrumentation/openai_agents

1 file changed

+21
-39
lines changed

instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/src/opentelemetry/instrumentation/openai_agents/span_processor.py

Lines changed: 21 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,6 @@ def _enum_values(enum_cls) -> dict[str, str]:
8080

8181

8282
class GenAIProvider:
83-
"""String constants for known GenAI provider names."""
84-
8583
OPENAI = _PROVIDER_VALUES["OPENAI"]
8684
GCP_GEN_AI = _PROVIDER_VALUES["GCP_GEN_AI"]
8785
GCP_VERTEX_AI = _PROVIDER_VALUES["GCP_VERTEX_AI"]
@@ -105,8 +103,6 @@ class GenAIProvider:
105103

106104

107105
class GenAIOperationName:
108-
"""Normalized GenAI operation names used by the processor."""
109-
110106
CHAT = _OPERATION_VALUES["CHAT"]
111107
GENERATE_CONTENT = _OPERATION_VALUES["GENERATE_CONTENT"]
112108
TEXT_COMPLETION = _OPERATION_VALUES["TEXT_COMPLETION"]
@@ -133,17 +129,13 @@ class GenAIOperationName:
133129

134130

135131
class GenAIOutputType:
136-
"""Supported GenAI output types normalized by the processor."""
137-
138132
TEXT = _OUTPUT_VALUES["TEXT"]
139133
JSON = _OUTPUT_VALUES["JSON"]
140134
IMAGE = _OUTPUT_VALUES["IMAGE"]
141135
SPEECH = _OUTPUT_VALUES["SPEECH"]
142136

143137

144138
class GenAIToolType:
145-
"""Canonical tool type values for tool spans."""
146-
147139
FUNCTION = "function"
148140
EXTENSION = "extension"
149141
DATASTORE = "datastore"
@@ -152,16 +144,13 @@ class GenAIToolType:
152144

153145

154146
class GenAIEvaluationAttributes:
155-
"""Attribute names used to describe GenAI evaluation metadata."""
156-
157147
NAME = "gen_ai.evaluation.name"
158148
SCORE_VALUE = "gen_ai.evaluation.score.value"
159149
SCORE_LABEL = "gen_ai.evaluation.score.label"
160150
EXPLANATION = "gen_ai.evaluation.explanation"
161151

162152

163153
def _attr(name: str, fallback: str) -> str:
164-
"""Return semantic attribute name with fallback for older SDK versions."""
165154
return getattr(GenAIAttributes, name, fallback)
166155

167156

@@ -319,15 +308,13 @@ class ContentCaptureMode(Enum):
319308

320309
@property
321310
def capture_in_span(self) -> bool:
322-
"""Return True when content should be captured on span attributes."""
323311
return self in (
324312
ContentCaptureMode.SPAN_ONLY,
325313
ContentCaptureMode.SPAN_AND_EVENT,
326314
)
327315

328316
@property
329317
def capture_in_event(self) -> bool:
330-
"""Return True when content should be captured on span events."""
331318
return self in (
332319
ContentCaptureMode.EVENT_ONLY,
333320
ContentCaptureMode.SPAN_AND_EVENT,
@@ -397,14 +384,21 @@ def _get_span_status(span: Span[Any]) -> Status:
397384
return Status(StatusCode.OK)
398385

399386

387+
_SPAN_NAME_BASE_OVERRIDES: dict[str, str] = {
388+
GenAIOperationName.SPEECH: "speech",
389+
GenAIOperationName.GUARDRAIL: "guardrail",
390+
GenAIOperationName.HANDOFF: "handoff",
391+
}
392+
393+
400394
def get_span_name(
401395
operation_name: str,
402396
model: Optional[str] = None,
403397
agent_name: Optional[str] = None,
404398
tool_name: Optional[str] = None,
405399
) -> str:
406400
"""Generate spec-compliant span name based on operation type."""
407-
base_name = operation_name
401+
base_name = _SPAN_NAME_BASE_OVERRIDES.get(operation_name, operation_name)
408402

409403
if operation_name in {
410404
GenAIOperationName.CHAT,
@@ -440,6 +434,7 @@ def __init__(
440434
include_sensitive_data: bool = True,
441435
content_mode: ContentCaptureMode = ContentCaptureMode.SPAN_AND_EVENT,
442436
base_url: Optional[str] = None,
437+
emit_legacy: bool = True,
443438
agent_name: Optional[str] = None,
444439
agent_id: Optional[str] = None,
445440
agent_description: Optional[str] = None,
@@ -456,28 +451,16 @@ def __init__(
456451
"""Initialize processor with metrics support.
457452
458453
Args:
459-
tracer: Optional OpenTelemetry tracer.
460-
system_name: Provider name (openai/azure.ai.inference/etc.).
461-
include_sensitive_data: Include model/tool IO when True.
462-
content_mode: Control where message content is captured.
463-
base_url: API endpoint for server.address/port.
464-
agent_name: Name of the agent (can be overridden by env var).
465-
agent_id: ID of the agent (can be overridden by env var).
466-
agent_description: Description of the agent (can be overridden by
467-
env var).
468-
server_address: Server address (can be overridden by env var or
469-
base_url).
470-
server_port: Server port (can be overridden by env var or base_url).
471-
metrics_enabled: Enable GenAI metrics when True.
472-
agent_name_default: Fallback agent name when span data omits one.
473-
agent_id_default: Fallback agent id when span data omits one.
474-
agent_description_default: Fallback agent description when span data
475-
omits one.
476-
base_url_default: Default API endpoint when not supplied explicitly.
477-
server_address_default: Default server address when not supplied
478-
explicitly.
479-
server_port_default: Default server port when not supplied
480-
explicitly.
454+
tracer: Optional OpenTelemetry tracer
455+
system_name: Provider name (openai/azure.ai.inference/etc.)
456+
include_sensitive_data: Include model/tool IO when True
457+
base_url: API endpoint for server.address/port
458+
emit_legacy: Also emit deprecated attribute names
459+
agent_name: Name of the agent (can be overridden by env var)
460+
agent_id: ID of the agent (can be overridden by env var)
461+
agent_description: Description of the agent (can be overridden by env var)
462+
server_address: Server address (can be overridden by env var or base_url)
463+
server_port: Server port (can be overridden by env var or base_url)
481464
"""
482465
self._tracer = tracer
483466
self.system_name = normalize_provider(system_name) or system_name
@@ -487,6 +470,8 @@ def __init__(
487470
)
488471
effective_base_url = base_url or base_url_default
489472
self.base_url = effective_base_url
473+
# Legacy emission removed; parameter retained for compatibility but unused
474+
self.emit_legacy = False
490475

491476
# Agent information - prefer explicit overrides; otherwise defer to span data
492477
self.agent_name = agent_name
@@ -1083,7 +1068,6 @@ def _build_content_payload(self, span: Span[Any]) -> ContentPayload:
10831068
elif _is_instance_of(span_data, FunctionSpanData) and capture_tools:
10841069

10851070
def _serialize_tool_value(value: Any) -> Optional[str]:
1086-
"""Serialize tool payloads while preserving JSON structures."""
10871071
if value is None:
10881072
return None
10891073
if isinstance(value, (dict, list)):
@@ -1799,7 +1783,6 @@ def _merge_content_sequence(
17991783
return result
18001784

18011785
def _clone_message(self, message: Any) -> Any:
1802-
"""Return a deep copy of normalized message content."""
18031786
if isinstance(message, dict):
18041787
return {
18051788
key: self._clone_message(value)
@@ -1812,7 +1795,6 @@ def _clone_message(self, message: Any) -> Any:
18121795
return message
18131796

18141797
def _is_placeholder_message(self, message: Any) -> bool:
1815-
"""Return True when message only contains redacted placeholder text."""
18161798
if not isinstance(message, dict):
18171799
return False
18181800
parts = message.get("parts")

0 commit comments

Comments
 (0)