Commit Graph

3 Commits

  • Python: Add Foundry Memory Context Provider (#3943)
    * Initial plan
    
    * Add FoundryMemoryProvider and tests
    
    Co-authored-by: eavanvalkenburg <13749212+eavanvalkenburg@users.noreply.github.com>
    
    * Add sample and documentation for FoundryMemoryProvider
    
    Co-authored-by: eavanvalkenburg <13749212+eavanvalkenburg@users.noreply.github.com>
    
    * Address code review feedback for FoundryMemoryProvider
    
    Co-authored-by: eavanvalkenburg <13749212+eavanvalkenburg@users.noreply.github.com>
    
    * Address PR review comments: Add DEFAULT_SOURCE_ID, use logging.getLogger, move state to session.state
    
    Co-authored-by: eavanvalkenburg <13749212+eavanvalkenburg@users.noreply.github.com>
    
    * Fix Foundry memory ItemParam usage and exports
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Refactor provider hook state and standardize source IDs
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Support endpoint-based Foundry memory init
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * updated implementation and sample
    
    * updated code and samples
    
    * Fix foundry memory provider tests: mock structure and field names
    
    - Use Mock objects with memory_item.content for memory mocks
    - Assert 'content' instead of 'text' on SDK message items
    - Update exception types from ServiceInitializationError to ValueError
    - Remove unused ServiceInitializationError import
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Fix mypy errors in foundry memory provider
    
    Add type: ignore[arg-type] for scope (str | None vs str) and items
    (list variance) passed to Azure SDK methods.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * fix import
    
    ---------
    
    Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
    Co-authored-by: eavanvalkenburg <13749212+eavanvalkenburg@users.noreply.github.com>
    Co-authored-by: eavanvalkenburg <github@vanvalkenburg.eu>
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
  • Python: [BREAKING] Scope provider state by source_id and standardize source IDs (#3995)
    * Initial plan
    
    * Add FoundryMemoryProvider and tests
    
    Co-authored-by: eavanvalkenburg <13749212+eavanvalkenburg@users.noreply.github.com>
    
    * Add sample and documentation for FoundryMemoryProvider
    
    Co-authored-by: eavanvalkenburg <13749212+eavanvalkenburg@users.noreply.github.com>
    
    * Address code review feedback for FoundryMemoryProvider
    
    Co-authored-by: eavanvalkenburg <13749212+eavanvalkenburg@users.noreply.github.com>
    
    * Address PR review comments: Add DEFAULT_SOURCE_ID, use logging.getLogger, move state to session.state
    
    Co-authored-by: eavanvalkenburg <13749212+eavanvalkenburg@users.noreply.github.com>
    
    * Fix Foundry memory ItemParam usage and exports
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Refactor provider hook state and standardize source IDs
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Support endpoint-based Foundry memory init
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Fix core README workflows link
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * updated implementation and sample
    
    * Split out Foundry memory provider changes
    
    Remove FoundryMemoryProvider implementation/tests/sample plus export and docs mentions from this branch so only non-Foundry changes remain.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Trigger CI rerun for PR #3995
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
    Co-authored-by: eavanvalkenburg <13749212+eavanvalkenburg@users.noreply.github.com>
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
  • Python: ADR: Unifying Context Management with ContextMiddleware (Python) (#3609)
    * Add ADR for Python ContextMiddleware unification
    
    * Add session serialization/deserialization design to ADR
    
    * Add Related Issues section mapping to ADR
    
    * Update session management: create_session, get_session_by_id, agent.serialize_session
    
    * ADR: Add hooks alternative, context compaction discussion, and PR feedback
    
    - Add Option 3: ContextHooks with before_run/after_run pattern
    - Add detailed pros/cons for both wrapper and hooks approaches
    - Add Open Discussion section on context compaction strategies
    - Clarify response_messages is read-only (use AgentMiddleware for modifications)
    - Add SimpleRAG examples showing input-only filtering
    - Clarify default storage only added when NO middleware configured
    - Add RAGWithBuffer examples for self-managed history
    - Rename hook methods to before_run/after_run
    
    * ADR: Restructure and add .NET comparison
    
    - Add class hierarchy clarification for both options
    - Merge detailed design sections (side-by-side comparison)
    - Move detailed design before decision outcome
    - Move compaction discussion after decision
    - Add .NET implementation comparison (feature equivalence)
    - Update .NET method names to match actual implementation
    - Rename hook methods to before_run/after_run
    - Fix storage context table for injected context
    
    * tweaks
    
    * fix smart load
    
    * ADR: Add naming discussion note for ContextHooks
    
    - Note that class and method names are open for discussion
    - Add alternative method naming options table
    - Include invoking/invoked as option matching current Python and .NET
    
    * Update context middleware design: remove smart mode, add attribution filtering
    
    - Remove smart mode for load_messages (now explicit bool, default True)
    - Add attribution marker in additional_properties for message filtering
    - Update validation to warn on multiple or zero storage loaders
    - Add note about ChatReducer naming from .NET
    - Note that attribution should not be propagated to storage
    
    * Add Decision 2: Instance Ownership (instances in session vs agent)
    
    - Option A: Instances in Session (current proposal)
    - Option B: Instances in Agent, State in Session
      - B1: Simple dict state with optional return
      - B2: SessionState object with mutable wrapper
    - Updated examples to use Hooks pattern (before_run/after_run)
    - Added open discussion on hook factories in Option B model
    
    * Update ADR: Choose ContextPlugin with before_run/after_run and Option B1
    
    Decision outcomes:
    - Option 3 (Hooks pattern) with ContextPlugin class name
    - Methods: before_run/after_run
    - Option B1: Instances in Agent, State in Session (simple dict)
    - Whole state dict passed to plugins (mutable, no return needed)
    - Added trust note: plugins reason over messages, so they're trusted by default
    
    Status changed from proposed to accepted.
    
    * Add agent and session params to before_run/after_run methods
    
    Signature now: before_run(agent, session, context, state)
    
    * Remove ContextPluginRunner, store plugins directly on agent
    
    Simpler design: agent stores Sequence[ContextPlugin] and calls
    before_run/after_run directly in the run method.
    
    * Update workplan to 2 PRs for simpler review
    
    * updated doc
    
    * Refine ADR: serialization, ownership, decorators, session methods, exports
    
    - Add to_dict()/from_dict() on AgentSession with 'type' discriminator
    - Present serialization as Option A (direct) vs Option B (through agent)
    - Rewrite ownership section as 2x2 matrix (orthogonal decision)
    - Move Instance Ownership Options before Decision Outcome
    - Fix get_session to use service_session_id, split from create_session
    - Add decorator-based provider convenience API (@before_run/@after_run)
    - Add _ prefix naming strategy for all PR1 types (core + external)
    - Constructor compatibility table for existing providers
    - Add load_messages=False skip logic to all agent run loops
    - Clarify abstract vs non-abstract in execution pattern samples
    - Update auto-provision: trigger on conversation_id or store=True
    - Document root package exports (ContextProvider, HistoryProvider, etc.)
    - Rename section heading to 'Key Design Considerations'
    
    * Rename ADR to 0016-python-context-middleware.md
    
    * Fix broken link: #3-unified-storage-middleware → #3-unified-storage