Python: add hosting Channels sample apps#5645
Open
eavanvalkenburg wants to merge 2 commits intomicrosoft:feature/python-hostingfrom
Open
Python: add hosting Channels sample apps#5645eavanvalkenburg wants to merge 2 commits intomicrosoft:feature/python-hostingfrom
eavanvalkenburg wants to merge 2 commits intomicrosoft:feature/python-hostingfrom
Conversation
…osting/af-hosting Adds five end-to-end sample apps under ``python/samples/04-hosting/af-hosting/`` that exercise the ``agent-framework-hosting`` Channels stack from the simplest single-channel case up to a multi-channel deployment with cross-channel identity linking. Samples (ordered by complexity) ------------------------------- * ``foundry_hosted_agent/`` — minimal Responses + Invocations host with a Foundry-backed agent and ``FoundryHostedAgentHistoryProvider``. ``agd``-deployable; bundles a ``Dockerfile`` and ``scripts/vendor-packages.sh`` that copies workspace packages into ``_vendor/`` for self-contained builds. ``_vendor/`` is gitignored. * ``local_responses/`` — single-channel Responses host with a ``run_hook`` that strips caller-supplied options and forces a reasoning preset. Demonstrates the hook seam over the uniform ``ChannelRequest`` envelope. * ``local_responses_workflow/`` — Responses + Invocations exposing a three-agent workflow with per-conversation checkpoint storage. * ``local_telegram/`` — Responses + Telegram with a ``@tool``, ``FileHistoryProvider``, hooks, and a ``ResponseTarget`` multicast variant (``call_server_multicast.py``) that pushes a single Responses reply to a separate Telegram chat. * ``local_identity_link/`` — full surface: Responses + Invocations + Telegram + Activity Protocol (Teams) + the ``EntraIdentityLinkChannel`` sidecar. Resolves per-channel ids onto a single Entra object id so a user's history follows them across surfaces. Notes ----- * Samples that use Telegram/Teams via Activity Protocol depend on the renamed ``agent-framework-hosting-activity-protocol`` package (see the PR-5 series). * All samples use ``[tool.uv.sources]`` editable workspace deps, except ``foundry_hosted_agent/`` which uses the ``./_vendor/`` self-contained layout for ``azd`` Docker builds. * Each sample includes a ``README.md`` with run instructions and an ``app.py`` ASGI entrypoint plus a ``call_server.py`` client harness. Depends on the prior hosting PRs (foundry-hosted-agent refactor + hosting-core + the per-channel packages). After those merge, this branch can be rebased onto ``main`` cleanly. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…Hub branch Switches every sample's ``[tool.uv.sources]`` from in-monorepo editable path deps (which only resolve when running inside the agent-framework workspace) to git refs targeting the ``feature/python-hosting`` branch on ``microsoft/agent-framework``. Samples now install standalone outside the monorepo while the ``agent-framework-hosting*`` packages are still pre-PyPI; once they publish, the ``[tool.uv.sources]`` block can be dropped and the declared deps resolve from PyPI. Cleanup ------- * Drops ``foundry_hosted_agent/scripts/vendor-packages.sh``, ``_vendor/`` from ``.gitignore``, the ``hooks.prepackage`` block in ``azure.yaml`` and the ``COPY _vendor/`` step in the Dockerfile — vendoring is no longer needed because git refs make the deps network-resolvable from any context. * Drops obsolete ``workspace.pyproject.toml`` reference and ``scripts/`` / ``workspace.pyproject.toml`` entries from ``Dockerfile.dockerignore``. * Updates the foundry sample's Dockerfile to ``uv sync --no-dev`` (no ``--frozen``) so it locks fresh against the GitHub-hosted deps at build time. * Drops every committed ``uv.lock`` because the resolver needs network access to ``feature/python-hosting`` to lock — they regenerate the first time a user runs ``uv sync`` after the branch lands. * Refreshes the per-sample READMEs to mention the GitHub install path instead of "in-tree workspace packages". Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
89360f1 to
870f583
Compare
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.
Motivation and Context
Adds the runnable sample apps for the Python hosting Channels work specified in SPEC-002 (merged via #5549) and the channel packages in PR-1..PR-7.
Description
Adds five sample apps under
python/samples/04-hosting/af-hosting/:local_responses/local_responses_workflow/local_telegram/local_identity_link/ActivityProtocolChannelfrom PR-5a, not the Teams-SDK channel from PR-5bfoundry_hosted_agent/azd-deployable;Dockerfile+azure.yamlfor Foundry Hosted AgentsEach sample's
pyproject.tomlpulls hosting packages directly from this repo'sfeature/python-hostingbranch via[tool.uv.sources]git refs, e.g.:This pattern lets the samples be tried before any of the channel packages are published to PyPI. The READMEs note the migration path to PyPI deps once the packages are released.
uv.lockfiles are intentionally not committed — generated on the user's firstuv sync.foundry_hosted_agent/previously bundled a_vendor/snapshot of the hosting packages so its container could build self-contained; that scaffolding is now removed in favor of the git-ref pattern (noscripts/vendor-packages.sh, no_vendor/COPYin the Dockerfile, nohooks.prepackageinazure.yaml).Stack
PR-8 of 9 — the last PR. Nothing depends on it. The samples won't
uv syncagainst thefeature/python-hostingbranch until PR-1..PR-7 land on that branch first; merging this PR earlier is harmless but the samples won't run.refactor/foundry-hosted-agent-history-providerfoundry_hosted_agent/feat/hosting-corefeat/hosting-channel-responsesfeat/hosting-channel-invocationsfoundry_hosted_agent/,local_identity_link/feat/hosting-channel-activity-protocollocal_identity_link/feat/hosting-channel-telegramlocal_telegram/,local_identity_link/feat/hosting-entra-helperslocal_identity_link/Contribution Checklist