Skip to content

Commit 5691155

Browse files
committed
WIP adding types from dev to upstream types/handler
1 parent 2a19bf4 commit 5691155

File tree

1 file changed

+30
-12
lines changed
  • util/opentelemetry-util-genai-dev/src/opentelemetry/util/genai

1 file changed

+30
-12
lines changed

util/opentelemetry-util-genai-dev/src/opentelemetry/util/genai/types.py

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,20 @@
1414

1515

1616
import time
17+
from contextvars import Token
1718
from dataclasses import dataclass, field
1819
from enum import Enum
1920
from typing import Any, Dict, List, Literal, Optional, Type, Union
2021
from uuid import UUID, uuid4
2122

23+
from typing_extensions import TypeAlias
24+
25+
from opentelemetry.context import Context
2226
from opentelemetry.trace import Span
2327
from opentelemetry.util.types import AttributeValue
2428

29+
ContextToken: TypeAlias = Token[Context]
30+
2531

2632
class ContentCapturingMode(Enum):
2733
# Do not capture content (default).
@@ -76,34 +82,46 @@ class OutputMessage:
7682
finish_reason: Union[str, FinishReason]
7783

7884

85+
def _new_input_messages() -> list[InputMessage]:
86+
return []
87+
88+
89+
def _new_output_messages() -> list[OutputMessage]:
90+
return []
91+
92+
93+
def _new_str_any_dict() -> dict[str, Any]:
94+
return {}
95+
96+
7997
@dataclass
8098
class LLMInvocation:
8199
"""
82-
Represents a single LLM call invocation.
83-
Added optional fields (run_id, parent_run_id, messages, chat_generations) to
84-
interoperate with advanced generators (SpanMetricGenerator, SpanMetricEventGenerator).
100+
Represents a single LLM call invocation. When creating an LLMInvocation object,
101+
only update the data attributes. The span and context_token attributes are
102+
set by the TelemetryHandler.
85103
"""
86104

87105
request_model: str
88-
# Stores either a contextvars Token or a context manager (use_span) kept open until finish/error.
89-
context_token: Optional[Any] = None
106+
context_token: Optional[ContextToken] = None
90107
span: Optional[Span] = None
91108
start_time: float = field(default_factory=time.time)
92109
end_time: Optional[float] = None
93-
input_messages: List[InputMessage] = field(default_factory=list)
94-
output_messages: List[OutputMessage] = field(default_factory=list)
110+
input_messages: List[InputMessage] = field(
111+
default_factory=_new_input_messages
112+
)
113+
output_messages: List[OutputMessage] = field(
114+
default_factory=_new_output_messages
115+
)
95116
provider: Optional[str] = None
96117
response_model_name: Optional[str] = None
97118
response_id: Optional[str] = None
98119
input_tokens: Optional[AttributeValue] = None
99120
output_tokens: Optional[AttributeValue] = None
100-
attributes: Dict[str, Any] = field(default_factory=dict)
101-
# Advanced generator compatibility fields
121+
attributes: Dict[str, Any] = field(default_factory=_new_str_any_dict)
122+
# Ahead of upstream
102123
run_id: UUID = field(default_factory=uuid4)
103124
parent_run_id: Optional[UUID] = None
104-
# Unified views expected by span_metric* generators
105-
messages: List[InputMessage] = field(default_factory=list)
106-
chat_generations: List[OutputMessage] = field(default_factory=list)
107125

108126

109127
@dataclass

0 commit comments

Comments
 (0)