Commit Graph

2 Commits

  • Simplify Python hosting core (#6492)
    Remove linking, multicast, durable delivery, and host push machinery from the v1 hosting core. Keep those scenarios in a proposed follow-up ADR and update channel packages, samples, docs, tests, and workspace metadata around the smaller host/channel contract.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
  • Python: add agent-framework-hosting-responses channel (#5639)
    * feat(hosting-responses): add OpenAI Responses-shaped channel package
    
    New ``agent-framework-hosting-responses`` package implementing the
    OpenAI Responses-shaped HTTP channel for the Hosting framework. Mounts
    ``POST /responses`` (and a ``/responses/{response_id}`` GET) onto an
    ``AgentFrameworkHost`` and translates the OpenAI Responses wire shape
    to/from the channel-neutral ``ChannelRequest`` / ``HostedRunResult``
    plumbing.
    
    Surface (re-exported from ``agent_framework_hosting_responses``):
    
    - ``ResponsesChannel`` -- concrete ``Channel`` implementation. Owns the
      Starlette route(s), parses inbound JSON into ``ChannelRequest``, runs
      the optional ``ChannelRunHook``, calls back into the
      ``ChannelContext`` to invoke the agent target, builds Responses
      envelopes (sync JSON or SSE), and respects
      ``DeliveryReport.include_originating`` so cross-channel push routes
      only ack to the originating Responses caller.
    - The minted ``response_id`` is propagated via the host's ContextVar
      machinery so storage-side history providers (e.g.
      ``FoundryHostedAgentHistoryProvider``) persist envelopes against the
      same id the channel returns.
    - 48 unit tests covering route wiring, parsing of each Responses input
      shape, hook composition, sync vs streaming paths, and originating
      vs non-originating delivery branches.
    
    Registers the package in ``python/pyproject.toml`` ``[tool.uv.sources]``
    and adds the matching pyright ``executionEnvironments`` entry.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * review: address PR-3 round 2 feedback
    
    - consume IsolationKeys.chat_key from the host-bound contextvar instead
      of the raw `x-agent-chat-isolation-key` header off the wire so the
      host's ASGI isolation middleware (or any operator-supplied
      replacement) is the authoritative point at which the caller is
      authenticated and the bucket key is established
    - expand `response_id_factory` docstring to call out partition
      co-location vs. partition-ownership enforcement: the channel forwards
      `previous_response_id` as a hint to the factory; the storage layer
      validates the embedded partition against the bound user/chat
      isolation keys
    - on mid-stream failure, call `deliver_response` with the accumulated
      text before emitting `response.failed` so host-side history /
      push-channel state stays consistent with the partial deltas the
      client already saw
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * docs(hosting-responses): fix quickstart to use current Agent API
    
    ChatAgent was renamed to Agent and ChatMessage to Message. Update the
    README quickstart to use client.as_agent(...) and refresh the stale
    docstring reference in _channel.py.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * fix(hosting-responses): adapt to hosted run result wrapper
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * feat(hosting-responses): add response hooks
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * fix(hosting-responses): keep instructions in chat options
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>