-
Notifications
You must be signed in to change notification settings - Fork 0
Aanshu/tmp response trace #23
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft
aanshu-ss
wants to merge
19
commits into
master
Choose a base branch
from
aanshu/tmp-response-traceID
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Conversation
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
…e ID to responses
…span and trace ID handling
…d remove commented-out code
…ng proper context management and trace ID handling.
…ext management, and documentation
…decorator with optional trace callback for improved tracing
1bf88dc to
b187239
Compare
…nd logging; add pulse_tool decorator for tool registration
…or future enhancements
…lity; restore original function name
…t version in setup.py
…te imports accordingly
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.
Fix OpenTelemetry Context Propagation in Async Generator Functions
Problem Statement
The existing @pulse_agent decorator was not properly propagating OpenTelemetry trace context to async generator functions, resulting in different trace IDs being generated within the wrapped function compared to the wrapper span. This broke distributed tracing continuity and made it difficult to correlate logs and spans across the application.
Root Cause
Async generators (async def functions with yield) have unique execution characteristics:
They return an async generator object immediately upon invocation
Actual execution occurs during iteration over the generator
Each yield statement creates suspension points where execution context can be lost
The previous implementation's context attachment/detachment mechanism didn't account for these suspension points
Solution
Updated the @pulse_agent decorator to use Python's contextvars.copy_context() for proper context propagation in async generators.
Key Changes
Context Capture: Use copy_context() to capture the current execution context before entering the async wrapper
Context Preservation: Run the entire async generator within the captured context using ctx.run()
Span Lifecycle Management: Ensure the OpenTelemetry span remains active throughout the generator's execution lifecycle