[agentserver] Invoke and Core package refactor#46127
Merged
Conversation
- Added docstring for TracingHelper.__init__ connection_string param - Added enrichment processor dupe guard (_enrichment_configured flag) - Fixed InMemorySpanExporter import path in test_tracing.py - Fixed @app → @server variable name mismatch in test_tracing.py - Updated invocations CHANGELOG with 2.0.0b1 + kept 1.0.0b1 history - Fixed duplicate InvocationAgentServerHost imports in README - Fixed README titles to match Verify Readmes pattern - Fixed tracing tests to use TestClient and set APPLICATIONINSIGHTS env var - Fixed test pollution: OTel provider reused across test modules - Removed obsolete baggage test Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Core: added historical 1.0.0b1 entry below 2.0.0b1, removed stale leaf_customer_span_id from features. Invocations: reverted to single 1.0.0b1 entry (new package, no prior releases). Updated feature list to reflect InvocationAgentServerHost. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replaced the TracingHelper class with: - configure_tracing() — standalone function for exporter setup, overridable via AgentServerHost(configure_tracing=my_func) or disabled with configure_tracing=None - request_span() — module-level context manager for span creation - end_span/record_error/trace_stream — module-level lifecycle helpers - AgentServerHost.request_span() — thin method that delegates with pre-populated host identity (agent_id, project_id) Protocol SDKs now use self.request_span() instead of self._tracing.request_span() with None checks. All functions are no-ops when opentelemetry-api is not installed. Removed TracingHelper from core __init__.py exports. Agent identity (name/version/project_id) moved to AgentServerHost. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Removed TracingHelper import, contextlib.nullcontext pattern, and None checks. Now uses self.request_span() and _tracing.record_error(). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
get_logger() was a one-liner wrapping logging.getLogger('azure.ai.agentserver').
Replaced all usages with direct logging.getLogger() calls and deleted _logger.py.
Removed get_logger from core __init__.py exports.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
Pull request overview
This PR refactors the AgentServer tracing and logging surface, moving from class-based helpers to function-based tracing setup and host-provided span helpers, and updates the invocations protocol and tests accordingly.
Changes:
- Refactor core tracing from
TracingHelperto function-based APIs (configure_tracing,request_span,end_span,record_error,trace_stream) and addAgentServerHost.request_span(). - Update invocations host and tests to use the new tracing APIs and switch tests from
httpxASGI transport tostarlette.testclient.TestClient. - Refresh READMEs/CHANGELOGs to align with the invocations host model and updated tracing behavior.
Reviewed changes
Copilot reviewed 13 out of 13 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| sdk/agentserver/azure-ai-agentserver-invocations/tests/test_tracing.py | Updates tracing tests to new tracing implementation and TestClient usage. |
| sdk/agentserver/azure-ai-agentserver-invocations/tests/test_span_parenting.py | Adjusts span parenting tests for the updated tracing/context behavior. |
| sdk/agentserver/azure-ai-agentserver-invocations/README.md | Updates package title and removes duplicated imports in snippets. |
| sdk/agentserver/azure-ai-agentserver-invocations/CHANGELOG.md | Updates feature list to reflect InvocationAgentServerHost and mixin model. |
| sdk/agentserver/azure-ai-agentserver-invocations/azure/ai/agentserver/invocations/_invocation.py | Moves invocations tracing to host span helper + core tracing functions. |
| sdk/agentserver/azure-ai-agentserver-core/tests/test_tracing.py | Updates tests to validate configure_tracing injection behavior. |
| sdk/agentserver/azure-ai-agentserver-core/samples/selfhosted_invocation/selfhosted_invocation.py | Updates sample to use AgentServerHost.request_span() and new tracing helpers. |
| sdk/agentserver/azure-ai-agentserver-core/README.md | Updates package title. |
| sdk/agentserver/azure-ai-agentserver-core/CHANGELOG.md | Updates breaking-change notes for tracing/logging behavior. |
| sdk/agentserver/azure-ai-agentserver-core/azure/ai/agentserver/core/_tracing.py | Implements the function-based tracing API and exporter setup. |
| sdk/agentserver/azure-ai-agentserver-core/azure/ai/agentserver/core/_logger.py | Removes the old get_logger() facade module. |
| sdk/agentserver/azure-ai-agentserver-core/azure/ai/agentserver/core/_base.py | Adds configure_tracing injection + request_span() convenience method. |
| sdk/agentserver/azure-ai-agentserver-core/azure/ai/agentserver/core/init.py | Updates exported public API surface. |
sdk/agentserver/azure-ai-agentserver-invocations/tests/test_tracing.py
Outdated
Show resolved
Hide resolved
sdk/agentserver/azure-ai-agentserver-invocations/tests/test_tracing.py
Outdated
Show resolved
Hide resolved
sdk/agentserver/azure-ai-agentserver-invocations/tests/test_tracing.py
Outdated
Show resolved
Hide resolved
sdk/agentserver/azure-ai-agentserver-core/azure/ai/agentserver/core/_tracing.py
Outdated
Show resolved
Hide resolved
...agentserver/azure-ai-agentserver-invocations/azure/ai/agentserver/invocations/_invocation.py
Outdated
Show resolved
Hide resolved
...agentserver/azure-ai-agentserver-invocations/azure/ai/agentserver/invocations/_invocation.py
Show resolved
Hide resolved
...agentserver/azure-ai-agentserver-core/samples/selfhosted_invocation/selfhosted_invocation.py
Outdated
Show resolved
Hide resolved
sdk/agentserver/azure-ai-agentserver-core/azure/ai/agentserver/core/__init__.py
Show resolved
Hide resolved
Moved opentelemetry-api, opentelemetry-sdk, opentelemetry-exporter-otlp, and azure-monitor-opentelemetry-exporter from optional [tracing] extras to primary dependencies. Removed _HAS_OTEL flag, try/except import guard, and all conditional checks — OTel is always available. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…acing.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…acing.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…/core/_tracing.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…date CHANGELOG - Exported end_span, record_error, trace_stream from core __init__.py (no more importing internal _tracing module from other packages) - Updated invocations to use public imports from core - Updated selfhosted sample to use public record_error import - Added None guard in _wrap_streaming_response for otel_span - Fixed test docstring mismatch (tracing_disabled_by_default) - Updated CHANGELOG to reflect TracingHelper → functions change - Fixed get_logger import in githubcopilot adapter Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…dk-for-python into agentserver/invoke
… isolation headers, HTTP/2 - x-platform-server header now includes version and python runtime - Instrumentation scope: Azure.AI.AgentServer (core), .Invocations (invocations) - record_error() now sets error.type attribute per OTel semantic conventions - baggage header included in W3C trace context extraction - x-request-id propagated into span attributes - Platform isolation headers (x-agent-user-isolation-key, x-agent-chat-isolation-key) exposed via request.state - HTTP/2 disabled in Hypercorn config (spec requires HTTP/1.1 only) - Fixed get_logger import in githubcopilot adapter Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…GTERM forwarding - Re-added W3C baggage propagation for invocation_id/session_id - Added SSE_KEEPALIVE_INTERVAL env var and resolve_sse_keepalive_interval() - Added sse_keepalive_stream() as AgentServerHost static method (not in tracing) - Added _InvocationLogFilter for structured log scope with InvocationId/SessionId - Added SIGTERM handler in run() that logs and re-raises for Hypercorn - Separated trace_stream (tracing concern) from sse_keepalive_stream (transport) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
...agentserver/azure-ai-agentserver-invocations/azure/ai/agentserver/invocations/_invocation.py
Outdated
Show resolved
Hide resolved
...agentserver/azure-ai-agentserver-invocations/azure/ai/agentserver/invocations/_invocation.py
Outdated
Show resolved
Hide resolved
sdk/agentserver/azure-ai-agentserver-core/azure/ai/agentserver/core/_base.py
Outdated
Show resolved
Hide resolved
sdk/agentserver/azure-ai-agentserver-core/azure/ai/agentserver/core/_tracing.py
Show resolved
Hide resolved
…log handler - Replaced per-request logger.addFilter/removeFilter with contextvars (_invocation_id_var, _session_id_var) for concurrency-safe structured logging. Filter installed once at module level, reads from contextvars. - SIGTERM handler now restored in finally block after run() exits. - _setup_otlp_log_export only adds LoggingHandler when Azure Monitor handler is not already configured, preventing duplicate log emission. - Fixed Black formatting in test_tracing.py dict literals. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The CI dev-build tool (process_requires) rewrites all azure-* dependency version specs for dev builds, transforming >=1.0.0b21 into >=1.0.0a1,<1.0.0b0 which is unresolvable. The exporter is imported lazily with try/except in _tracing.py so it works correctly when installed separately. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
johanste
reviewed
Apr 7, 2026
sdk/agentserver/azure-ai-agentserver-core/azure/ai/agentserver/core/_base.py
Show resolved
Hide resolved
johanste
reviewed
Apr 7, 2026
sdk/agentserver/azure-ai-agentserver-core/azure/ai/agentserver/core/_config.py
Outdated
Show resolved
Hide resolved
…/core/_config.py Co-authored-by: Johan Stenberg (MSFT) <johan.stenberg@microsoft.com>
…/core/_config.py Co-authored-by: Johan Stenberg (MSFT) <johan.stenberg@microsoft.com>
…ndryEnrichmentSpanProcessor (#46186) * fix: move agent identity attrs to _on_ending in FoundryEnrichmentSpanProcessor Move gen_ai.agent.name, gen_ai.agent.version, and gen_ai.agent.id from on_start to _on_ending so underlying frameworks (LangChain, Semantic Kernel, etc.) cannot overwrite them. Uses guarded direct _attributes access as a workaround for opentelemetry-sdk <=1.40.0 spec-compliance gap where set_attribute() is a no-op during _on_ending. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: add shutdown() to _CollectorExporter for SDK compatibility Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Remove redundant shutdown method definition --------- Co-authored-by: Neehar Duvvuri <neeharduvvuri@Neehars-MacBook-Pro.local> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…dk-for-python into agentserver/invoke
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- request_span (both _base.py and _tracing.py): added :type:, :keyword:, :paramtype:, :rtype:, and missing instrumentation_scope doc - _handle_sigterm: prefixed unused args with _ (_signum, _frame) - sse_keepalive_stream: added :type: and :rtype: - end_span, flush_spans, record_error, trace_stream: added :type: - _BaggageLogRecordProcessor.on_emit: added :param log_data: Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ensures _on_ending span processor method and stable baggage/log APIs are available. Avoids edge cases with older SDK versions. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
johanste
reviewed
Apr 8, 2026
sdk/agentserver/azure-ai-agentserver-core/azure/ai/agentserver/core/_base.py
Outdated
Show resolved
Hide resolved
…/core/_base.py Co-authored-by: Johan Stenberg (MSFT) <johan.stenberg@microsoft.com>
johanste
approved these changes
Apr 8, 2026
pradeepkintali
approved these changes
Apr 8, 2026
lusu-msft
approved these changes
Apr 8, 2026
kashifkhan
approved these changes
Apr 8, 2026
tendau
approved these changes
Apr 8, 2026
Member
|
/check-enforcer override |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Please add an informative description that covers that changes made by the pull request and link all relevant issues.
If an SDK is being regenerated based on a new API spec, a link to the pull request containing these API spec changes should be included above.
All SDK Contribution checklist:
General Guidelines and Best Practices
Testing Guidelines