Skip to content

Commit a046c12

Browse files
authored
Merge branch 'main' into barebones
2 parents 156a9ee + 74ff31b commit a046c12

File tree

9 files changed

+99
-141
lines changed

9 files changed

+99
-141
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1515

1616
- `opentelemetry-instrumentation-dbapi`: fix crash retrieving libpq version when enabling commenter with psycopg
1717
([#3796](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3796))
18+
- `opentelemetry-instrumentation-vertexai`: migrate off the deprecated events API to use the logs API
19+
([#3625](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3626))
1820

1921
### Added
2022
- `opentelemetry-instrumentation`: botocore: Add support for AWS Secrets Manager semantic convention attribute

instrumentation-genai/opentelemetry-instrumentation-vertexai/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ classifiers = [
2424
"Programming Language :: Python :: 3.12",
2525
]
2626
dependencies = [
27-
"opentelemetry-api ~= 1.28",
27+
"opentelemetry-api >= 1.37",
2828
"opentelemetry-instrumentation ~= 0.58b0",
2929
# TODO https://github.com/open-telemetry/opentelemetry-python-contrib/issues/3786: restrict
3030
# version after the first release

instrumentation-genai/opentelemetry-instrumentation-vertexai/src/opentelemetry/instrumentation/vertexai/__init__.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
wrap_function_wrapper, # type: ignore[reportUnknownVariableType]
4848
)
4949

50-
from opentelemetry._events import get_event_logger
50+
from opentelemetry._logs import get_logger
5151
from opentelemetry.instrumentation._semconv import (
5252
_OpenTelemetrySemanticConventionStability,
5353
_OpenTelemetryStabilitySignalType,
@@ -128,12 +128,12 @@ def _instrument(self, **kwargs: Any):
128128
tracer_provider,
129129
schema_url=schema,
130130
)
131-
event_logger_provider = kwargs.get("event_logger_provider")
132-
event_logger = get_event_logger(
131+
logger_provider = kwargs.get("logger_provider")
132+
logger = get_logger(
133133
__name__,
134134
"",
135+
logger_provider=logger_provider,
135136
schema_url=schema,
136-
event_logger_provider=event_logger_provider,
137137
)
138138
sem_conv_opt_in_mode = _OpenTelemetrySemanticConventionStability._get_opentelemetry_stability_opt_in_mode(
139139
_OpenTelemetryStabilitySignalType.GEN_AI,
@@ -142,7 +142,7 @@ def _instrument(self, **kwargs: Any):
142142
# Type checker now knows sem_conv_opt_in_mode is a Literal[_StabilityMode.DEFAULT]
143143
method_wrappers = MethodWrappers(
144144
tracer,
145-
event_logger,
145+
logger,
146146
is_content_enabled(sem_conv_opt_in_mode),
147147
sem_conv_opt_in_mode,
148148
completion_hook,
@@ -151,7 +151,7 @@ def _instrument(self, **kwargs: Any):
151151
# Type checker now knows it's the other literal
152152
method_wrappers = MethodWrappers(
153153
tracer,
154-
event_logger,
154+
logger,
155155
is_content_enabled(sem_conv_opt_in_mode),
156156
sem_conv_opt_in_mode,
157157
completion_hook,

instrumentation-genai/opentelemetry-instrumentation-vertexai/src/opentelemetry/instrumentation/vertexai/events.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
from dataclasses import asdict, dataclass
2828
from typing import Any, Iterable, Literal
2929

30-
from opentelemetry._events import Event
30+
from opentelemetry._logs import LogRecord
3131
from opentelemetry.semconv._incubating.attributes import gen_ai_attributes
3232
from opentelemetry.util.types import AnyValue
3333

@@ -36,7 +36,7 @@ def user_event(
3636
*,
3737
role: str = "user",
3838
content: AnyValue = None,
39-
) -> Event:
39+
) -> LogRecord:
4040
"""Creates a User event
4141
https://github.com/open-telemetry/semantic-conventions/blob/v1.28.0/docs/gen-ai/gen-ai-events.md#user-event
4242
"""
@@ -45,8 +45,8 @@ def user_event(
4545
}
4646
if content is not None:
4747
body["content"] = content
48-
return Event(
49-
name="gen_ai.user.message",
48+
return LogRecord(
49+
event_name="gen_ai.user.message",
5050
attributes={
5151
gen_ai_attributes.GEN_AI_SYSTEM: gen_ai_attributes.GenAiSystemValues.VERTEX_AI.value,
5252
},
@@ -58,7 +58,7 @@ def assistant_event(
5858
*,
5959
role: str = "assistant",
6060
content: AnyValue = None,
61-
) -> Event:
61+
) -> LogRecord:
6262
"""Creates an Assistant event
6363
https://github.com/open-telemetry/semantic-conventions/blob/v1.28.0/docs/gen-ai/gen-ai-events.md#assistant-event
6464
"""
@@ -67,8 +67,8 @@ def assistant_event(
6767
}
6868
if content is not None:
6969
body["content"] = content
70-
return Event(
71-
name="gen_ai.assistant.message",
70+
return LogRecord(
71+
event_name="gen_ai.assistant.message",
7272
attributes={
7373
gen_ai_attributes.GEN_AI_SYSTEM: gen_ai_attributes.GenAiSystemValues.VERTEX_AI.value,
7474
},
@@ -80,7 +80,7 @@ def system_event(
8080
*,
8181
role: str = "system",
8282
content: AnyValue = None,
83-
) -> Event:
83+
) -> LogRecord:
8484
"""Creates a System event
8585
https://github.com/open-telemetry/semantic-conventions/blob/v1.28.0/docs/gen-ai/gen-ai-events.md#system-event
8686
"""
@@ -89,8 +89,8 @@ def system_event(
8989
}
9090
if content is not None:
9191
body["content"] = content
92-
return Event(
93-
name="gen_ai.system.message",
92+
return LogRecord(
93+
event_name="gen_ai.system.message",
9494
attributes={
9595
gen_ai_attributes.GEN_AI_SYSTEM: gen_ai_attributes.GenAiSystemValues.VERTEX_AI.value,
9696
},
@@ -103,7 +103,7 @@ def tool_event(
103103
role: str | None,
104104
id_: str,
105105
content: AnyValue = None,
106-
) -> Event:
106+
) -> LogRecord:
107107
"""Creates a Tool message event
108108
https://github.com/open-telemetry/semantic-conventions/blob/v1.28.0/docs/gen-ai/gen-ai-events.md#event-gen_aitoolmessage
109109
"""
@@ -116,8 +116,8 @@ def tool_event(
116116
}
117117
if content is not None:
118118
body["content"] = content
119-
return Event(
120-
name="gen_ai.tool.message",
119+
return LogRecord(
120+
event_name="gen_ai.tool.message",
121121
attributes={
122122
gen_ai_attributes.GEN_AI_SYSTEM: gen_ai_attributes.GenAiSystemValues.VERTEX_AI.value,
123123
},
@@ -158,7 +158,7 @@ def choice_event(
158158
index: int,
159159
message: ChoiceMessage,
160160
tool_calls: Iterable[ChoiceToolCall] = (),
161-
) -> Event:
161+
) -> LogRecord:
162162
"""Creates a choice event, which describes the Gen AI response message.
163163
https://github.com/open-telemetry/semantic-conventions/blob/v1.28.0/docs/gen-ai/gen-ai-events.md#event-gen_aichoice
164164
"""
@@ -174,8 +174,8 @@ def choice_event(
174174
if tool_calls_list:
175175
body["tool_calls"] = tool_calls_list
176176

177-
return Event(
178-
name="gen_ai.choice",
177+
return LogRecord(
178+
event_name="gen_ai.choice",
179179
attributes={
180180
gen_ai_attributes.GEN_AI_SYSTEM: gen_ai_attributes.GenAiSystemValues.VERTEX_AI.value,
181181
},

instrumentation-genai/opentelemetry-instrumentation-vertexai/src/opentelemetry/instrumentation/vertexai/patch.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
overload,
2929
)
3030

31-
from opentelemetry._events import Event, EventLogger
31+
from opentelemetry._logs import Logger, LogRecord
3232
from opentelemetry.instrumentation._semconv import (
3333
_StabilityMode,
3434
)
@@ -116,7 +116,7 @@ class MethodWrappers:
116116
def __init__(
117117
self,
118118
tracer: Tracer,
119-
event_logger: EventLogger,
119+
logger: Logger,
120120
capture_content: ContentCapturingMode,
121121
sem_conv_opt_in_mode: Literal[
122122
_StabilityMode.GEN_AI_LATEST_EXPERIMENTAL
@@ -128,7 +128,7 @@ def __init__(
128128
def __init__(
129129
self,
130130
tracer: Tracer,
131-
event_logger: EventLogger,
131+
logger: Logger,
132132
capture_content: bool,
133133
sem_conv_opt_in_mode: Literal[_StabilityMode.DEFAULT],
134134
completion_hook: CompletionHook,
@@ -137,7 +137,7 @@ def __init__(
137137
def __init__(
138138
self,
139139
tracer: Tracer,
140-
event_logger: EventLogger,
140+
logger: Logger,
141141
capture_content: Union[bool, ContentCapturingMode],
142142
sem_conv_opt_in_mode: Union[
143143
Literal[_StabilityMode.DEFAULT],
@@ -146,7 +146,7 @@ def __init__(
146146
completion_hook: CompletionHook,
147147
) -> None:
148148
self.tracer = tracer
149-
self.event_logger = event_logger
149+
self.logger = logger
150150
self.capture_content = capture_content
151151
self.sem_conv_opt_in_mode = sem_conv_opt_in_mode
152152
self.completion_hook = completion_hook
@@ -227,16 +227,16 @@ def handle_response(
227227
for k, v in content_attributes.items()
228228
}
229229
)
230-
event = Event(
231-
name="gen_ai.client.inference.operation.details",
230+
event = LogRecord(
231+
event_name="gen_ai.client.inference.operation.details",
232232
)
233233
event.attributes = attributes
234234
if capture_content in (
235235
ContentCapturingMode.SPAN_AND_EVENT,
236236
ContentCapturingMode.EVENT_ONLY,
237237
):
238238
event.attributes |= content_attributes
239-
self.event_logger.emit(event)
239+
self.logger.emit(event)
240240
self.completion_hook.on_completion(
241241
inputs=inputs,
242242
outputs=outputs,
@@ -273,7 +273,7 @@ def _with_default_instrumentation(
273273
for event in request_to_events(
274274
params=params, capture_content=capture_content
275275
):
276-
self.event_logger.emit(event)
276+
self.logger.emit(event)
277277

278278
# TODO: set error.type attribute
279279
# https://github.com/open-telemetry/semantic-conventions/blob/main/docs/gen-ai/gen-ai-spans.md
@@ -294,7 +294,7 @@ def handle_response(
294294
for event in response_to_events(
295295
response=response, capture_content=capture_content
296296
):
297-
self.event_logger.emit(event)
297+
self.logger.emit(event)
298298

299299
yield handle_response
300300

instrumentation-genai/opentelemetry-instrumentation-vertexai/src/opentelemetry/instrumentation/vertexai/utils.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333

3434
from google.protobuf import json_format
3535

36-
from opentelemetry._events import Event
36+
from opentelemetry._logs import LogRecord
3737
from opentelemetry.instrumentation._semconv import (
3838
_StabilityMode,
3939
)
@@ -256,7 +256,7 @@ def get_span_name(span_attributes: Mapping[str, AttributeValue]) -> str:
256256

257257
def request_to_events(
258258
*, params: GenerateContentParams, capture_content: bool
259-
) -> Iterable[Event]:
259+
) -> Iterable[LogRecord]:
260260
# System message
261261
if params.system_instruction:
262262
request_content = _parts_to_any_value(
@@ -348,7 +348,7 @@ def response_to_events(
348348
response: prediction_service.GenerateContentResponse
349349
| prediction_service_v1beta1.GenerateContentResponse,
350350
capture_content: bool,
351-
) -> Iterable[Event]:
351+
) -> Iterable[LogRecord]:
352352
for candidate in response.candidates:
353353
tool_calls = _extract_tool_calls(
354354
candidate=candidate, capture_content=capture_content

instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/conftest.py

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
from opentelemetry.instrumentation.vertexai.utils import (
3939
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT,
4040
)
41-
from opentelemetry.sdk._events import EventLoggerProvider
4241
from opentelemetry.sdk._logs import LoggerProvider
4342
from opentelemetry.sdk._logs.export import (
4443
InMemoryLogExporter,
@@ -84,13 +83,12 @@ def fixture_tracer_provider(span_exporter):
8483
return provider
8584

8685

87-
@pytest.fixture(scope="function", name="event_logger_provider")
88-
def fixture_event_logger_provider(log_exporter):
86+
@pytest.fixture(scope="function", name="logger_provider")
87+
def fixture_logger_provider(log_exporter):
8988
provider = LoggerProvider()
9089
provider.add_log_record_processor(SimpleLogRecordProcessor(log_exporter))
91-
event_logger_provider = EventLoggerProvider(provider)
9290

93-
return event_logger_provider
91+
return provider
9492

9593

9694
@pytest.fixture(scope="function", name="meter_provider")
@@ -117,7 +115,7 @@ def vertexai_init(vcr: VCR) -> None:
117115

118116
@pytest.fixture(scope="function")
119117
def instrument_no_content(
120-
tracer_provider, event_logger_provider, meter_provider, request
118+
tracer_provider, logger_provider, meter_provider, request
121119
):
122120
# Reset global state..
123121
_OpenTelemetrySemanticConventionStability._initialized = False
@@ -129,7 +127,7 @@ def instrument_no_content(
129127
instrumentor = VertexAIInstrumentor()
130128
instrumentor.instrument(
131129
tracer_provider=tracer_provider,
132-
event_logger_provider=event_logger_provider,
130+
logger_provider=logger_provider,
133131
meter_provider=meter_provider,
134132
)
135133

@@ -141,7 +139,7 @@ def instrument_no_content(
141139

142140
@pytest.fixture(scope="function")
143141
def instrument_no_content_with_experimental_semconvs(
144-
tracer_provider, event_logger_provider, meter_provider, request
142+
tracer_provider, logger_provider, meter_provider, request
145143
):
146144
# Reset global state..
147145
_OpenTelemetrySemanticConventionStability._initialized = False
@@ -155,7 +153,7 @@ def instrument_no_content_with_experimental_semconvs(
155153
instrumentor = VertexAIInstrumentor()
156154
instrumentor.instrument(
157155
tracer_provider=tracer_provider,
158-
event_logger_provider=event_logger_provider,
156+
logger_provider=logger_provider,
159157
meter_provider=meter_provider,
160158
)
161159

@@ -167,7 +165,7 @@ def instrument_no_content_with_experimental_semconvs(
167165

168166
@pytest.fixture(scope="function")
169167
def instrument_with_experimental_semconvs(
170-
tracer_provider, event_logger_provider, meter_provider
168+
tracer_provider, logger_provider, meter_provider
171169
):
172170
# Reset global state..
173171
_OpenTelemetrySemanticConventionStability._initialized = False
@@ -180,7 +178,7 @@ def instrument_with_experimental_semconvs(
180178
instrumentor = VertexAIInstrumentor()
181179
instrumentor.instrument(
182180
tracer_provider=tracer_provider,
183-
event_logger_provider=event_logger_provider,
181+
logger_provider=logger_provider,
184182
meter_provider=meter_provider,
185183
)
186184

@@ -192,7 +190,7 @@ def instrument_with_experimental_semconvs(
192190

193191
@pytest.fixture(scope="function")
194192
def instrument_with_upload_hook(
195-
tracer_provider, event_logger_provider, meter_provider
193+
tracer_provider, logger_provider, meter_provider
196194
):
197195
# Reset global state..
198196
_OpenTelemetrySemanticConventionStability._initialized = False
@@ -207,7 +205,7 @@ def instrument_with_upload_hook(
207205
instrumentor = VertexAIInstrumentor()
208206
instrumentor.instrument(
209207
tracer_provider=tracer_provider,
210-
event_logger_provider=event_logger_provider,
208+
logger_provider=logger_provider,
211209
meter_provider=meter_provider,
212210
)
213211

@@ -221,7 +219,7 @@ def instrument_with_upload_hook(
221219

222220
@pytest.fixture(scope="function")
223221
def instrument_with_content(
224-
tracer_provider, event_logger_provider, meter_provider, request
222+
tracer_provider, logger_provider, meter_provider, request
225223
):
226224
# Reset global state..
227225
_OpenTelemetrySemanticConventionStability._initialized = False
@@ -232,7 +230,7 @@ def instrument_with_content(
232230
instrumentor = VertexAIInstrumentor()
233231
instrumentor.instrument(
234232
tracer_provider=tracer_provider,
235-
event_logger_provider=event_logger_provider,
233+
logger_provider=logger_provider,
236234
meter_provider=meter_provider,
237235
)
238236

0 commit comments

Comments
 (0)