[agentserver] Invoke and Core package refactor#46127
Open
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>
This reverts commit 973a32b.
...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/_tracing.py
Outdated
Show resolved
Hide resolved
The CI dev-build tool (process_requires) rewrites azure-* dependency version specs. Adding the exporter to Artifacts ensures a compatible dev build is published to the dev feed alongside agentserver packages. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…gage - Updated _ensure_log_filter comment to say 'first request' not 'module load' - Updated _tracing.py docstring: OTel is required, not optional - Added W3C Baggage and structured logging to invocations CHANGELOG Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This reverts commit 15aa0c5.
sdk/agentserver/azure-ai-agentserver-core/azure/ai/agentserver/core/_base.py
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
...agentserver/azure-ai-agentserver-invocations/azure/ai/agentserver/invocations/_invocation.py
Outdated
Show resolved
Hide resolved
…-safe filter - sse_keepalive_stream: use asyncio.shield to prevent cancelling upstream iterator on timeout. Reuse pending task across timeouts. - SIGTERM handler comment: clarified it logs and re-raises, not forwards. - request_span docstring: removed stale 'no-op when OTel not installed'. - _ensure_log_filter: added threading.Lock for double-checked locking. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
...agentserver/azure-ai-agentserver-invocations/azure/ai/agentserver/invocations/_invocation.py
Show resolved
Hide resolved
...agentserver/azure-ai-agentserver-invocations/azure/ai/agentserver/invocations/_invocation.py
Outdated
Show resolved
Hide resolved
...er/azure-ai-agentserver-githubcopilot/azure/ai/agentserver/githubcopilot/_copilot_adapter.py
Show resolved
Hide resolved
… adapter logging - Removed duplicate 'import logging' in _invocation.py - Added _sanitize_id for invocation_id and session_id in _traced_invocation_endpoint - Fixed _copilot_adapter.py: consolidated logging import, removed _logging alias Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
...agentserver/azure-ai-agentserver-invocations/azure/ai/agentserver/invocations/_invocation.py
Show resolved
Hide resolved
sdk/agentserver/azure-ai-agentserver-core/azure/ai/agentserver/core/_tracing.py
Outdated
Show resolved
Hide resolved
sdk/agentserver/azure-ai-agentserver-core/azure/ai/agentserver/core/_base.py
Show resolved
Hide resolved
…-log processor - Replaced TraceContextTextMapPropagator with CompositePropagator (TraceContextTextMapPropagator + W3CBaggagePropagator) to properly extract inbound baggage header into OTel context. - x-request-id now set as both span attribute AND baggage entry for downstream propagation. - Added _BaggageLogRecordProcessor that copies all W3C Baggage entries into every OTel log record's attributes for end-to-end correlation. Registered on both Azure Monitor and OTLP log providers. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- _base.py: moved 'import sys' to stdlib group - _tracing.py: moved opentelemetry imports to third-party group before constants - _invocation.py: moved contextvars to stdlib group, opentelemetry to third-party, removed duplicate import Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The OTel SDK's LogRecordProcessor interface requires on_emit(), not emit(). This caused AttributeError when the log handler tried to process log records through the processor chain. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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