Description:
Implement a contextvars-based system to carry session_id, request_id, model_id, and sampling_iteration through async flows. This context should automatically appear in logs and traces.
Detailed Requirements:
- Create
mellea/telemetry/context.py module with:
ContextVar declarations for: session_id, request_id, model_id, sampling_iteration
- Context manager
with_context(**kwargs) for setting context
- Helper functions:
get_session_id(), get_request_id(), etc.
get_current_context() returning dict of all context values
- Create
MelleaContextFilter (extends logging.Filter) that injects context into log records
- Add filter to FancyLogger's handlers
- Update
JsonFormatter to include context fields when present
- Integrate context setting in key code paths:
MelleaSession.__enter__() - Set session_id
BaseSamplingStrategy.sample() - Set sampling_iteration
- Backend calls - Set request_id and model_id
- Propagate context to child spans automatically
Files to Create:
mellea/telemetry/context.py
Files to Modify:
mellea/core/utils.py - Add MelleaContextFilter, update JsonFormatter
mellea/stdlib/session.py - Set session context
mellea/stdlib/sampling/base.py - Set sampling iteration context
mellea/backends/*.py - Set request/model context
Acceptance Criteria:
Description:
Implement a contextvars-based system to carry
session_id,request_id,model_id, andsampling_iterationthrough async flows. This context should automatically appear in logs and traces.Detailed Requirements:
mellea/telemetry/context.pymodule with:ContextVardeclarations for:session_id,request_id,model_id,sampling_iterationwith_context(**kwargs)for setting contextget_session_id(),get_request_id(), etc.get_current_context()returning dict of all context valuesMelleaContextFilter(extendslogging.Filter) that injects context into log recordsJsonFormatterto include context fields when presentMelleaSession.__enter__()- Set session_idBaseSamplingStrategy.sample()- Set sampling_iterationFiles to Create:
mellea/telemetry/context.pyFiles to Modify:
mellea/core/utils.py- Add MelleaContextFilter, update JsonFormattermellea/stdlib/session.py- Set session contextmellea/stdlib/sampling/base.py- Set sampling iteration contextmellea/backends/*.py- Set request/model contextAcceptance Criteria: