Skip to content

Commit 48ac64b

Browse files
committed
Merge branch 'main' of https://github.com/open-telemetry/opentelemetry-python-contrib into genai-instrumentation-semconv
2 parents 0ff51f3 + a4adc93 commit 48ac64b

File tree

22 files changed

+3310
-2537
lines changed

22 files changed

+3310
-2537
lines changed

CHANGELOG.md

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1212
## Unreleased
1313

1414
### Fixed
15-
1615
- `opentelemetry-instrumentation-dbapi`: fix crash retrieving libpq version when enabling commenter with psycopg
1716
([#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))
2017

2118
### Added
2219
- `opentelemetry-instrumentation`: botocore: Add support for AWS Secrets Manager semantic convention attribute
2320
([#3765](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3765))
2421
- Add `rstcheck` to pre-commit to stop introducing invalid RST
2522
([#3777](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3777))
26-
- `opentelemetry-exporter-credential-provider-gcp`: create this package which provides support for supplying your machine's Application Default Credentials (https://cloud.google.com/docs/authentication/application-default-credentials) to the OTLP Exporters created automatically by OpenTelemetry Python's auto instrumentation. These credentials authorize OTLP traces to be sent to `telemetry.googleapis.com`.
27-
[#3766](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3766).
23+
- `opentelemetry-exporter-credential-provider-gcp`: create this package which provides support for supplying your machine's Application Default
24+
Credentials (https://cloud.google.com/docs/authentication/application-default-credentials) to the OTLP Exporters created automatically by OpenTelemetry Python's auto instrumentation. These credentials authorize OTLP traces to be sent to `telemetry.googleapis.com`. [#3766](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3766).
2825

2926
## Version 1.37.0/0.58b0 (2025-09-11)
3027

docs/conf.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,14 @@ def getlistcfg(strval):
155155
]
156156

157157

158-
ignore_categories = ["py-class", "py-func", "py-exc", "py-obj", "any"]
158+
ignore_categories = [
159+
"py-class",
160+
"py-func",
161+
"py-exc",
162+
"py-obj",
163+
"py-data",
164+
"any",
165+
]
159166

160167
for category in ignore_categories:
161168
if category in mcfg:

docs/nitpick-exceptions.ini

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ py-obj=
7575
opentelemetry.instrumentation.dbapi.ConnectionT
7676
opentelemetry.instrumentation.dbapi.CursorT
7777

78+
py-data=
79+
typing.Union
80+
typing.Optional
81+
7882
py-func=
7983
poll
8084
flush

instrumentation-genai/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
| --------------- | ------------------ | --------------- | -------------- |
44
| [opentelemetry-instrumentation-google-genai](./opentelemetry-instrumentation-google-genai) | google-genai >= 1.0.0 | No | development
55
| [opentelemetry-instrumentation-langchain](./opentelemetry-instrumentation-langchain) | langchain >= 0.3.21 | No | development
6+
| [opentelemetry-instrumentation-openai-agents](./opentelemetry-instrumentation-openai-agents) | openai-agents >= 0.3.3 | No | development
67
| [opentelemetry-instrumentation-openai-v2](./opentelemetry-instrumentation-openai-v2) | openai >= 1.26.0 | Yes | development
78
| [opentelemetry-instrumentation-vertexai](./opentelemetry-instrumentation-vertexai) | google-cloud-aiplatform >= 1.64 | No | development
89
| [opentelemetry-instrumentation-weaviate](./opentelemetry-instrumentation-weaviate) | weaviate-client >= 3.0.0,<5.0.0 | No | development

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ classifiers = [
3737
"Programming Language :: Python :: 3.12"
3838
]
3939
dependencies = [
40-
"opentelemetry-api >=1.31.1, <2",
40+
"opentelemetry-api >=1.37, <2",
4141
"opentelemetry-instrumentation >=0.52b1, <2",
4242
"opentelemetry-semantic-conventions >=0.52b1, <2"
4343
]

instrumentation-genai/opentelemetry-instrumentation-google-genai/src/opentelemetry/instrumentation/google_genai/instrumentor.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
from typing import Any, Collection, Optional
1616

17-
from opentelemetry._events import get_event_logger_provider
17+
from opentelemetry._logs import get_logger_provider
1818
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
1919
from opentelemetry.metrics import get_meter_provider
2020
from opentelemetry.trace import get_tracer_provider
@@ -50,13 +50,13 @@ def _instrument(self, **kwargs: Any):
5050
tracer_provider = (
5151
kwargs.get("tracer_provider") or get_tracer_provider()
5252
)
53-
event_logger_provider = (
54-
kwargs.get("event_logger_provider") or get_event_logger_provider()
53+
logger_provider = (
54+
kwargs.get("logger_provider") or get_logger_provider()
5555
)
5656
meter_provider = kwargs.get("meter_provider") or get_meter_provider()
5757
otel_wrapper = OTelWrapper.from_providers(
5858
tracer_provider=tracer_provider,
59-
event_logger_provider=event_logger_provider,
59+
logger_provider=logger_provider,
6060
meter_provider=meter_provider,
6161
)
6262
completion_hook = (

instrumentation-genai/opentelemetry-instrumentation-google-genai/src/opentelemetry/instrumentation/google_genai/otel_wrapper.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
import google.genai
2020

21-
from opentelemetry._events import Event, EventLogger, EventLoggerProvider
21+
from opentelemetry._logs import LogRecord, Logger, LoggerProvider
2222
from opentelemetry.metrics import Meter, MeterProvider
2323
from opentelemetry.semconv._incubating.metrics import gen_ai_metrics
2424
from opentelemetry.semconv.schemas import Schemas
@@ -41,10 +41,10 @@
4141

4242
class OTelWrapper:
4343
def __init__(
44-
self, tracer: Tracer, event_logger: EventLogger, meter: Meter
44+
self, tracer: Tracer, logger: Logger, meter: Meter
4545
):
4646
self._tracer = tracer
47-
self._event_logger = event_logger
47+
self._logger = logger
4848
self._meter = meter
4949
self._operation_duration_metric = (
5050
gen_ai_metrics.create_gen_ai_client_operation_duration(meter)
@@ -56,14 +56,14 @@ def __init__(
5656
@staticmethod
5757
def from_providers(
5858
tracer_provider: TracerProvider,
59-
event_logger_provider: EventLoggerProvider,
59+
logger_provider: LoggerProvider,
6060
meter_provider: MeterProvider,
6161
):
6262
return OTelWrapper(
6363
tracer_provider.get_tracer(
6464
_SCOPE_NAME, _LIBRARY_VERSION, _SCHEMA_URL, _SCOPE_ATTRIBUTES
6565
),
66-
event_logger_provider.get_event_logger(
66+
logger_provider.get_logger(
6767
_SCOPE_NAME, _LIBRARY_VERSION, _SCHEMA_URL, _SCOPE_ATTRIBUTES
6868
),
6969
meter=meter_provider.get_meter(
@@ -106,12 +106,14 @@ def log_response_content(
106106
def _log_event(
107107
self, event_name: str, attributes: dict[str, str], body: dict[str, Any]
108108
):
109-
event = Event(event_name, body=body, attributes=attributes)
110-
self._event_logger.emit(event)
109+
event = LogRecord(
110+
event_name=event_name, body=body, attributes=attributes
111+
)
112+
self._logger.emit(event)
111113

112114
def log_completion_details(
113115
self,
114-
event: Event,
116+
event: LogRecord,
115117
) -> None:
116118
_logger.debug("Recording completion details event.")
117-
self._event_logger.emit(event)
119+
self._logger.emit(event)

instrumentation-genai/opentelemetry-instrumentation-google-genai/tests/common/otel_mocker.py

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,14 @@
1313
# limitations under the License.
1414

1515

16-
import opentelemetry._events
1716
import opentelemetry._logs._internal
1817
import opentelemetry.metrics._internal
1918
import opentelemetry.trace
20-
from opentelemetry._events import (
21-
get_event_logger_provider,
22-
set_event_logger_provider,
19+
from opentelemetry._logs import (
20+
get_logger_provider,
21+
set_logger_provider,
2322
)
24-
from opentelemetry._logs import get_logger_provider, set_logger_provider
2523
from opentelemetry.metrics import get_meter_provider, set_meter_provider
26-
from opentelemetry.sdk._events import EventLoggerProvider
2724
from opentelemetry.sdk._logs import LoggerProvider
2825
from opentelemetry.sdk._logs.export import (
2926
InMemoryLogExporter,
@@ -43,22 +40,19 @@
4340
def _bypass_otel_once():
4441
opentelemetry.trace._TRACER_PROVIDER_SET_ONCE = Once()
4542
opentelemetry._logs._internal._LOGGER_PROVIDER_SET_ONCE = Once()
46-
opentelemetry._events._EVENT_LOGGER_PROVIDER_SET_ONCE = Once()
4743
opentelemetry.metrics._internal._METER_PROVIDER_SET_ONCE = Once()
4844

4945

5046
class OTelProviderSnapshot:
5147
def __init__(self):
5248
self._tracer_provider = get_tracer_provider()
5349
self._logger_provider = get_logger_provider()
54-
self._event_logger_provider = get_event_logger_provider()
5550
self._meter_provider = get_meter_provider()
5651

5752
def restore(self):
5853
_bypass_otel_once()
5954
set_tracer_provider(self._tracer_provider)
6055
set_logger_provider(self._logger_provider)
61-
set_event_logger_provider(self._event_logger_provider)
6256
set_meter_provider(self._meter_provider)
6357

6458

@@ -82,6 +76,10 @@ def attributes(self):
8276
def body(self):
8377
return self._log_data.log_record.body
8478

79+
@property
80+
def event_name(self):
81+
return self._log_data.log_record.event_name
82+
8583
def __str__(self):
8684
return self._log_data.log_record.to_json()
8785

@@ -175,23 +173,21 @@ def assert_does_not_have_span_named(self, name):
175173
assert span is None, f"Found unexpected span named {name}"
176174

177175
def get_event_named(self, event_name):
178-
for event in self.get_finished_logs():
179-
event_name_attr = event.attributes.get("event.name")
180-
if event_name_attr is None:
181-
continue
182-
if event_name_attr == event_name:
183-
return event
184-
return None
176+
return next(
177+
(
178+
event
179+
for event in self.get_finished_logs()
180+
if event.event_name == event_name
181+
),
182+
None,
183+
)
185184

186185
def get_events_named(self, event_name):
187-
result = []
188-
for event in self.get_finished_logs():
189-
event_name_attr = event.attributes.get("event.name")
190-
if event_name_attr is None:
191-
continue
192-
if event_name_attr == event_name:
193-
result.append(event)
194-
return result
186+
return [
187+
event
188+
for event in self.get_finished_logs()
189+
if event.event_name == event_name
190+
]
195191

196192
def assert_has_event_named(self, name):
197193
event = self.get_event_named(name)
@@ -219,8 +215,6 @@ def _install_logs(self):
219215
provider = LoggerProvider()
220216
provider.add_log_record_processor(SimpleLogRecordProcessor(self._logs))
221217
set_logger_provider(provider)
222-
event_provider = EventLoggerProvider(logger_provider=provider)
223-
set_event_logger_provider(event_provider)
224218

225219
def _install_metrics(self):
226220
provider = MeterProvider(metric_readers=[self._metrics])

instrumentation-genai/opentelemetry-instrumentation-google-genai/tests/utils/test_tool_call_wrapper.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
from google.genai import types as genai_types
2020

21-
from opentelemetry._events import get_event_logger_provider
21+
from opentelemetry._logs import get_logger_provider
2222
from opentelemetry.instrumentation._semconv import (
2323
_OpenTelemetrySemanticConventionStability,
2424
_OpenTelemetryStabilitySignalType,
@@ -41,7 +41,7 @@ def setUp(self):
4141
self._otel.install()
4242
self._otel_wrapper = otel_wrapper.OTelWrapper.from_providers(
4343
get_tracer_provider(),
44-
get_event_logger_provider(),
44+
get_logger_provider(),
4545
get_meter_provider(),
4646
)
4747

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
examples/.env
2+
examples/openai_agents_multi_agent_travel/.env

0 commit comments

Comments
 (0)