@@ -80,6 +80,8 @@ def _enum_values(enum_cls) -> dict[str, str]:
8080
8181
8282class GenAIProvider :
83+ """String constants for known GenAI provider names."""
84+
8385 OPENAI = _PROVIDER_VALUES ["OPENAI" ]
8486 GCP_GEN_AI = _PROVIDER_VALUES ["GCP_GEN_AI" ]
8587 GCP_VERTEX_AI = _PROVIDER_VALUES ["GCP_VERTEX_AI" ]
@@ -103,6 +105,8 @@ class GenAIProvider:
103105
104106
105107class GenAIOperationName :
108+ """Normalized GenAI operation names used by the processor."""
109+
106110 CHAT = _OPERATION_VALUES ["CHAT" ]
107111 GENERATE_CONTENT = _OPERATION_VALUES ["GENERATE_CONTENT" ]
108112 TEXT_COMPLETION = _OPERATION_VALUES ["TEXT_COMPLETION" ]
@@ -129,13 +133,17 @@ class GenAIOperationName:
129133
130134
131135class GenAIOutputType :
136+ """Supported GenAI output types normalized by the processor."""
137+
132138 TEXT = _OUTPUT_VALUES ["TEXT" ]
133139 JSON = _OUTPUT_VALUES ["JSON" ]
134140 IMAGE = _OUTPUT_VALUES ["IMAGE" ]
135141 SPEECH = _OUTPUT_VALUES ["SPEECH" ]
136142
137143
138144class GenAIToolType :
145+ """Canonical tool type values for tool spans."""
146+
139147 FUNCTION = "function"
140148 EXTENSION = "extension"
141149 DATASTORE = "datastore"
@@ -144,13 +152,16 @@ class GenAIToolType:
144152
145153
146154class GenAIEvaluationAttributes :
155+ """Attribute names used to describe GenAI evaluation metadata."""
156+
147157 NAME = "gen_ai.evaluation.name"
148158 SCORE_VALUE = "gen_ai.evaluation.score.value"
149159 SCORE_LABEL = "gen_ai.evaluation.score.label"
150160 EXPLANATION = "gen_ai.evaluation.explanation"
151161
152162
153163def _attr (name : str , fallback : str ) -> str :
164+ """Return semantic attribute name with fallback for older SDK versions."""
154165 return getattr (GenAIAttributes , name , fallback )
155166
156167
@@ -308,13 +319,15 @@ class ContentCaptureMode(Enum):
308319
309320 @property
310321 def capture_in_span (self ) -> bool :
322+ """Return True when content should be captured on span attributes."""
311323 return self in (
312324 ContentCaptureMode .SPAN_ONLY ,
313325 ContentCaptureMode .SPAN_AND_EVENT ,
314326 )
315327
316328 @property
317329 def capture_in_event (self ) -> bool :
330+ """Return True when content should be captured on span events."""
318331 return self in (
319332 ContentCaptureMode .EVENT_ONLY ,
320333 ContentCaptureMode .SPAN_AND_EVENT ,
@@ -451,16 +464,29 @@ def __init__(
451464 """Initialize processor with metrics support.
452465
453466 Args:
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)
467+ tracer: Optional OpenTelemetry tracer.
468+ system_name: Provider name (openai/azure.ai.inference/etc.).
469+ include_sensitive_data: Include model/tool IO when True.
470+ content_mode: Control where message content is captured.
471+ base_url: API endpoint for server.address/port.
472+ emit_legacy: Retained for compatibility; legacy emission disabled.
473+ agent_name: Name of the agent (can be overridden by env var).
474+ agent_id: ID of the agent (can be overridden by env var).
475+ agent_description: Description of the agent (can be overridden by
476+ env var).
477+ server_address: Server address (can be overridden by env var or
478+ base_url).
479+ server_port: Server port (can be overridden by env var or base_url).
480+ metrics_enabled: Enable GenAI metrics when True.
481+ agent_name_default: Fallback agent name when span data omits one.
482+ agent_id_default: Fallback agent id when span data omits one.
483+ agent_description_default: Fallback agent description when span data
484+ omits one.
485+ base_url_default: Default API endpoint when not supplied explicitly.
486+ server_address_default: Default server address when not supplied
487+ explicitly.
488+ server_port_default: Default server port when not supplied
489+ explicitly.
464490 """
465491 self ._tracer = tracer
466492 self .system_name = normalize_provider (system_name ) or system_name
@@ -1068,6 +1094,7 @@ def _build_content_payload(self, span: Span[Any]) -> ContentPayload:
10681094 elif _is_instance_of (span_data , FunctionSpanData ) and capture_tools :
10691095
10701096 def _serialize_tool_value (value : Any ) -> Optional [str ]:
1097+ """Serialize tool payloads while preserving JSON structures."""
10711098 if value is None :
10721099 return None
10731100 if isinstance (value , (dict , list )):
@@ -1783,6 +1810,7 @@ def _merge_content_sequence(
17831810 return result
17841811
17851812 def _clone_message (self , message : Any ) -> Any :
1813+ """Return a deep copy of normalized message content."""
17861814 if isinstance (message , dict ):
17871815 return {
17881816 key : self ._clone_message (value )
@@ -1795,6 +1823,7 @@ def _clone_message(self, message: Any) -> Any:
17951823 return message
17961824
17971825 def _is_placeholder_message (self , message : Any ) -> bool :
1826+ """Return True when message only contains redacted placeholder text."""
17981827 if not isinstance (message , dict ):
17991828 return False
18001829 parts = message .get ("parts" )
0 commit comments