From 710cc24660cf161cfbbcb280e87ed8e913e793d0 Mon Sep 17 00:00:00 2001 From: Radhika Gupta Date: Thu, 4 Jun 2026 11:02:17 -0700 Subject: [PATCH 1/9] Update otel dependencies --- pyproject.toml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 7fd8ae1a..813a535f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,19 +24,19 @@ dependencies = [ "azure-core<2.0.0,>=1.28.0", "azure-core-tracing-opentelemetry~=1.0.0b11", "azure-monitor-opentelemetry-exporter~=1.0.0b53", - "opentelemetry-sdk==1.40", - "opentelemetry-api==1.40", - "opentelemetry-exporter-otlp-proto-http==1.40", - "opentelemetry-instrumentation==0.61b0", - "opentelemetry-instrumentation-django==0.61b0", - "opentelemetry-instrumentation-fastapi==0.61b0", - "opentelemetry-instrumentation-flask==0.61b0", - "opentelemetry-instrumentation-httpx==0.61b0", - "opentelemetry-instrumentation-psycopg2==0.61b0", - "opentelemetry-instrumentation-requests==0.61b0", - "opentelemetry-instrumentation-urllib==0.61b0", - "opentelemetry-instrumentation-urllib3==0.61b0", - "opentelemetry-instrumentation-logging==0.61b0", + "opentelemetry-sdk>=1.40,<1.43", + "opentelemetry-api>=1.40,<1.43", + "opentelemetry-exporter-otlp-proto-http>=1.40,<1.43", + "opentelemetry-instrumentation>=0.61b0,<0.64b0", + "opentelemetry-instrumentation-django>=0.61b0,<0.64b0", + "opentelemetry-instrumentation-fastapi>=0.61b0,<0.64b0", + "opentelemetry-instrumentation-flask>=0.61b0,<0.64b0", + "opentelemetry-instrumentation-httpx>=0.61b0,<0.64b0", + "opentelemetry-instrumentation-psycopg2>=0.61b0,<0.64b0", + "opentelemetry-instrumentation-requests>=0.61b0,<0.64b0", + "opentelemetry-instrumentation-urllib>=0.61b0,<0.64b0", + "opentelemetry-instrumentation-urllib3>=0.61b0,<0.64b0", + "opentelemetry-instrumentation-logging>=0.61b0,<0.64b0", "opentelemetry-instrumentation-openai-agents-v2==0.1.0", "opentelemetry-instrumentation-openai-v2==2.3b0", "opentelemetry-resource-detector-azure<1.0.0,>=0.1.5", From fd78b8331ace756cfaee618df3cdd1c4e4e0ff19 Mon Sep 17 00:00:00 2001 From: Radhika Gupta Date: Mon, 8 Jun 2026 09:08:25 -0700 Subject: [PATCH 2/9] Update otel dependencies --- pyproject.toml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 813a535f..dae454f8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,19 +24,19 @@ dependencies = [ "azure-core<2.0.0,>=1.28.0", "azure-core-tracing-opentelemetry~=1.0.0b11", "azure-monitor-opentelemetry-exporter~=1.0.0b53", - "opentelemetry-sdk>=1.40,<1.43", - "opentelemetry-api>=1.40,<1.43", - "opentelemetry-exporter-otlp-proto-http>=1.40,<1.43", - "opentelemetry-instrumentation>=0.61b0,<0.64b0", - "opentelemetry-instrumentation-django>=0.61b0,<0.64b0", - "opentelemetry-instrumentation-fastapi>=0.61b0,<0.64b0", - "opentelemetry-instrumentation-flask>=0.61b0,<0.64b0", - "opentelemetry-instrumentation-httpx>=0.61b0,<0.64b0", - "opentelemetry-instrumentation-psycopg2>=0.61b0,<0.64b0", - "opentelemetry-instrumentation-requests>=0.61b0,<0.64b0", - "opentelemetry-instrumentation-urllib>=0.61b0,<0.64b0", - "opentelemetry-instrumentation-urllib3>=0.61b0,<0.64b0", - "opentelemetry-instrumentation-logging>=0.61b0,<0.64b0", + "opentelemetry-sdk==1.42", + "opentelemetry-api==1.42", + "opentelemetry-exporter-otlp-proto-http==1.42", + "opentelemetry-instrumentation>=0.63b0,<0.64b0", + "opentelemetry-instrumentation-django=>=0.63b0,<0.64b0", + "opentelemetry-instrumentation-fastapi=>=0.63b0,<0.64b0", + "opentelemetry-instrumentation-flask>=0.63b0,<0.64b0", + "opentelemetry-instrumentation-httpx>=0.63b0,<0.64b0", + "opentelemetry-instrumentation-psycopg2>=0.63b0,<0.64b0", + "opentelemetry-instrumentation-requests>=0.63b0,<0.64b0", + "opentelemetry-instrumentation-urllib>=0.63b0,<0.64b0", + "opentelemetry-instrumentation-urllib3>=0.63b0,<0.64b0", + "opentelemetry-instrumentation-logging>=0.63b0,<0.64b0", "opentelemetry-instrumentation-openai-agents-v2==0.1.0", "opentelemetry-instrumentation-openai-v2==2.3b0", "opentelemetry-resource-detector-azure<1.0.0,>=0.1.5", From e590a30f504d06bb8b3245633f9e8c2f7b47825f Mon Sep 17 00:00:00 2001 From: Radhika Gupta Date: Wed, 24 Jun 2026 11:50:15 -0700 Subject: [PATCH 3/9] Update deps --- pyproject.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index dae454f8..c63e3798 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,10 +23,10 @@ classifiers = [ dependencies = [ "azure-core<2.0.0,>=1.28.0", "azure-core-tracing-opentelemetry~=1.0.0b11", - "azure-monitor-opentelemetry-exporter~=1.0.0b53", - "opentelemetry-sdk==1.42", - "opentelemetry-api==1.42", - "opentelemetry-exporter-otlp-proto-http==1.42", + "azure-monitor-opentelemetry-exporter~=1.0.0b53", # will update this to latest version of exporter once is it released + "opentelemetry-sdk~=1.42.0", + "opentelemetry-api~=1.42.0", + "opentelemetry-exporter-otlp-proto-http~=1.42.0", "opentelemetry-instrumentation>=0.63b0,<0.64b0", "opentelemetry-instrumentation-django=>=0.63b0,<0.64b0", "opentelemetry-instrumentation-fastapi=>=0.63b0,<0.64b0", From 399e26effe1084da0463931e0b934dccca65a4aa Mon Sep 17 00:00:00 2001 From: Radhika Gupta Date: Wed, 24 Jun 2026 11:58:31 -0700 Subject: [PATCH 4/9] Bump version --- pyproject.toml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index c63e3798..1c3d0eef 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,19 +24,19 @@ dependencies = [ "azure-core<2.0.0,>=1.28.0", "azure-core-tracing-opentelemetry~=1.0.0b11", "azure-monitor-opentelemetry-exporter~=1.0.0b53", # will update this to latest version of exporter once is it released - "opentelemetry-sdk~=1.42.0", - "opentelemetry-api~=1.42.0", - "opentelemetry-exporter-otlp-proto-http~=1.42.0", - "opentelemetry-instrumentation>=0.63b0,<0.64b0", - "opentelemetry-instrumentation-django=>=0.63b0,<0.64b0", - "opentelemetry-instrumentation-fastapi=>=0.63b0,<0.64b0", - "opentelemetry-instrumentation-flask>=0.63b0,<0.64b0", - "opentelemetry-instrumentation-httpx>=0.63b0,<0.64b0", - "opentelemetry-instrumentation-psycopg2>=0.63b0,<0.64b0", - "opentelemetry-instrumentation-requests>=0.63b0,<0.64b0", - "opentelemetry-instrumentation-urllib>=0.63b0,<0.64b0", - "opentelemetry-instrumentation-urllib3>=0.63b0,<0.64b0", - "opentelemetry-instrumentation-logging>=0.63b0,<0.64b0", + "opentelemetry-sdk~=1.43.0", + "opentelemetry-api~=1.43.0", + "opentelemetry-exporter-otlp-proto-http~=1.43.0", + "opentelemetry-instrumentation>=0.64b0,<0.65b0", + "opentelemetry-instrumentation-django=>=0.64b0,<0.65b0", + "opentelemetry-instrumentation-fastapi=>=0.64b0,<0.65b0", + "opentelemetry-instrumentation-flask>=0.64b0,<0.65b0", + "opentelemetry-instrumentation-httpx>=0.64b0,<0.65b0", + "opentelemetry-instrumentation-psycopg2>=0.64b0,<0.65b0", + "opentelemetry-instrumentation-requests>=0.64b0,<0.65b0", + "opentelemetry-instrumentation-urllib>=0.64b0,<0.65b0", + "opentelemetry-instrumentation-urllib3>=0.64b0,<0.65b0", + "opentelemetry-instrumentation-logging>=0.64b0,<0.65b0", "opentelemetry-instrumentation-openai-agents-v2==0.1.0", "opentelemetry-instrumentation-openai-v2==2.3b0", "opentelemetry-resource-detector-azure<1.0.0,>=0.1.5", From ba1a1b1686fd436e079eb15821a81dc60c34b664 Mon Sep 17 00:00:00 2001 From: Radhika Gupta Date: Wed, 24 Jun 2026 11:59:40 -0700 Subject: [PATCH 5/9] Fix format --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 1c3d0eef..1fffedc1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,8 +28,8 @@ dependencies = [ "opentelemetry-api~=1.43.0", "opentelemetry-exporter-otlp-proto-http~=1.43.0", "opentelemetry-instrumentation>=0.64b0,<0.65b0", - "opentelemetry-instrumentation-django=>=0.64b0,<0.65b0", - "opentelemetry-instrumentation-fastapi=>=0.64b0,<0.65b0", + "opentelemetry-instrumentation-django>=0.64b0,<0.65b0", + "opentelemetry-instrumentation-fastapi>=0.64b0,<0.65b0", "opentelemetry-instrumentation-flask>=0.64b0,<0.65b0", "opentelemetry-instrumentation-httpx>=0.64b0,<0.65b0", "opentelemetry-instrumentation-psycopg2>=0.64b0,<0.65b0", From ed026534fbd7f6d58bef632caaaafdd534ef53ab Mon Sep 17 00:00:00 2001 From: Radhika Gupta Date: Tue, 30 Jun 2026 14:01:36 -0700 Subject: [PATCH 6/9] Update exporter version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 1fffedc1..cc11df6e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ classifiers = [ dependencies = [ "azure-core<2.0.0,>=1.28.0", "azure-core-tracing-opentelemetry~=1.0.0b11", - "azure-monitor-opentelemetry-exporter~=1.0.0b53", # will update this to latest version of exporter once is it released + "azure-monitor-opentelemetry-exporter~=1.0.0b54", # will update this to latest version of exporter once is it released "opentelemetry-sdk~=1.43.0", "opentelemetry-api~=1.43.0", "opentelemetry-exporter-otlp-proto-http~=1.43.0", From f971d9e8f339022c61bb7255caedd2c83daacc65 Mon Sep 17 00:00:00 2001 From: Radhika Gupta Date: Tue, 30 Jun 2026 14:51:28 -0700 Subject: [PATCH 7/9] Remove comment --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index cc11df6e..201fc8b1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ classifiers = [ dependencies = [ "azure-core<2.0.0,>=1.28.0", "azure-core-tracing-opentelemetry~=1.0.0b11", - "azure-monitor-opentelemetry-exporter~=1.0.0b54", # will update this to latest version of exporter once is it released + "azure-monitor-opentelemetry-exporter~=1.0.0b54", "opentelemetry-sdk~=1.43.0", "opentelemetry-api~=1.43.0", "opentelemetry-exporter-otlp-proto-http~=1.43.0", From 1c1cf6e3d05f0d43704750e7fa74ce6f3ecc30d5 Mon Sep 17 00:00:00 2001 From: Radhika Gupta Date: Tue, 30 Jun 2026 16:18:21 -0700 Subject: [PATCH 8/9] Comply with upstream changes --- .../_genai/main_agent/_processor.py | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/microsoft/opentelemetry/_genai/main_agent/_processor.py b/src/microsoft/opentelemetry/_genai/main_agent/_processor.py index 5cb098a1..a60e88fa 100644 --- a/src/microsoft/opentelemetry/_genai/main_agent/_processor.py +++ b/src/microsoft/opentelemetry/_genai/main_agent/_processor.py @@ -108,15 +108,16 @@ def on_end(self, span: ReadableSpan) -> None: if mutable is None: return + # Build the attributes to write before touching the (now frozen) span. + updates: dict[str, object] = {} + # Self-promotion: top-level invoke_agent spans copy their own # gen_ai.agent.* → microsoft.gen_ai.main_agent.* if attributes.get(GEN_AI_OPERATION_NAME_KEY) == INVOKE_AGENT_OPERATION_NAME: for target, source in _SELF_COPY_TABLE: value = attributes.get(source) if value is not None: - mutable[target] = value - return - + updates[target] = value # Fallback propagation: re-read from the parent span whose attributes # may have been set after this child was created (timing issue). if parent is not None: @@ -126,7 +127,26 @@ def on_end(self, span: ReadableSpan) -> None: if value is None: value = parent_attributes.get(fallback) if value is not None: + updates[target] = value + + if not updates: + return + + # OTel SDK >= 1.43 freezes span attributes (``_immutable = True``) inside + # ``end()`` *before* invoking ``on_end``. Writing then raises ``TypeError``. + # Temporarily lift the freeze for our own synchronous writes and always + # restore it so the exported ``ReadableSpan`` snapshot stays frozen. + was_immutable = getattr(mutable, "_immutable", False) + if was_immutable: + mutable._immutable = False # pylint: disable=protected-access + try: + for target, value in updates.items(): mutable[target] = value + finally: + mutable._immutable = True # pylint: disable=protected-access + else: + for target, value in updates.items(): + mutable[target] = value def shutdown(self) -> None: self._parent_spans.clear() From c38b9c72f895008e699386652cc4e72ba0f75794 Mon Sep 17 00:00:00 2001 From: Radhika Gupta Date: Tue, 30 Jun 2026 16:32:06 -0700 Subject: [PATCH 9/9] Fix mypy --- src/microsoft/opentelemetry/_genai/main_agent/_processor.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/microsoft/opentelemetry/_genai/main_agent/_processor.py b/src/microsoft/opentelemetry/_genai/main_agent/_processor.py index a60e88fa..7c24a644 100644 --- a/src/microsoft/opentelemetry/_genai/main_agent/_processor.py +++ b/src/microsoft/opentelemetry/_genai/main_agent/_processor.py @@ -28,6 +28,7 @@ from opentelemetry.sdk.trace import ReadableSpan, Span from opentelemetry.sdk.trace.export import SpanProcessor from opentelemetry.trace import Span as SpanAPI +from opentelemetry.util.types import AttributeValue # Each row: (target attribute on current span, # primary source attribute on parent span, @@ -109,7 +110,7 @@ def on_end(self, span: ReadableSpan) -> None: return # Build the attributes to write before touching the (now frozen) span. - updates: dict[str, object] = {} + updates: dict[str, AttributeValue] = {} # Self-promotion: top-level invoke_agent spans copy their own # gen_ai.agent.* → microsoft.gen_ai.main_agent.*