Files
agent-framework/python/samples/semantic-kernel-migration
T
Eduard van Valkenburg 0521f5bed8 Python: [BREAKING] Simplify API: ChatAgent -> Agent, ChatMessage -> Message (#3747)
* [BREAKING] Rename ChatAgent -> Agent, ChatMessage -> Message, ChatClientProtocol -> SupportsChatGetResponse

Simplify the public API by removing redundant 'Chat' prefix from core types:
- ChatAgent -> Agent
- RawChatAgent -> RawAgent
- ChatMessage -> Message
- ChatClientProtocol -> SupportsChatGetResponse

Also renamed internal WorkflowMessage (was Message in _runner_context) to avoid collision.

No backward compatibility aliases - this is a clean breaking change.

* [BREAKING] Rename Agent chat_client parameter to client

* Fix rebase issues: WorkflowMessage references and broken markdown links

* Fix formatting and lint issues from code quality checks

* Fix import ordering in workflow sample files

* fixed rebase

* Fix test failures: use WorkflowMessage and A2AMessage after ChatMessage→Message rename

- Replace Message(data=..., source_id=...) with WorkflowMessage(...) in workflow tests
- Fix isinstance check in A2A agent to use A2AMessage instead of Message
- Fix import in test_workflow_observability.py (Message→WorkflowMessage)

* Fix lint, fmt, and sample errors after ChatMessage→Message rename

- Auto-fix 70+ ruff lint issues across samples (ChatMessage→Message refs)
- Fix HostedVectorStoreContent→Content.from_hosted_vector_store in file search sample
- Fix _normalize_messages→normalize_messages in custom agent sample
- Fix context.terminate→raise MiddlewareTermination in middleware samples
- Fix with_update_hook→with_transform_hook in override middleware sample
- Add TOptions_co import back to custom_chat_client sample
- Add noqa for FastAPI File() default in chatkit sample
- Fix B023 loop variable capture in weather agent sample

* fix: update Agent constructor calls from chat_client to client in declaration-only tool tests

* fix: add register_cleanup to devui lazy-loading proxy and type stub

* fixed tests and updated new pieces

* fix agui typevar

* fix merge errors

* fix merge conflicts

* fiux merge

* Remove unused links

---------

Co-authored-by: Evan Mattson <evan.mattson@microsoft.com>
0521f5bed8 · 2026-02-10 23:04:32 +00:00
History
..

Semantic Kernel → Microsoft Agent Framework Migration Samples

This gallery helps Semantic Kernel (SK) developers move to the Microsoft Agent Framework (AF) with minimal guesswork. Each script pairs SK code with its AF equivalent so you can compare primitives, tooling, and orchestration patterns side by side while you migrate production workloads.

Whats Included

Whats Included

Chat completion parity

Azure AI agent parity

OpenAI Assistants API parity

OpenAI Responses API parity

Copilot Studio parity

Orchestrations

  • sequential.py — Step-by-step SK Team → AF SequentialBuilder migration.
  • concurrent_basic.py — Concurrent orchestration parity.
  • group_chat.py — Group chat coordination with an LLM-backed manager in both SDKs.
  • handoff.py - Handoff coordination between agents.
  • magentic.py — Magentic Team orchestration vs. AF builder wiring.

Processes

Each script is fully async and the main() routine runs both implementations back to back so you can observe their outputs in a single execution.

Prerequisites

  • Python 3.10 or later.
  • Access to the necessary model endpoints (Azure OpenAI, OpenAI, Azure AI, Copilot Studio, etc.).
  • Installed SDKs: semantic-kernel and the Microsoft Agent Framework (pip install semantic-kernel agent-framework), or the repos editable packages if you are developing locally.
  • Service credentials exposed through environment variables (for example OPENAI_API_KEY, AZURE_OPENAI_ENDPOINT, AZURE_OPENAI_KEY, or Copilot Studio auth settings).

Running Single-Agent Samples

From the repository root:

python samples/semantic-kernel-migration/chat_completion/01_basic_chat_completion.py

Every script accepts no CLI arguments and will first call the SK implementation, followed by the AF version. Adjust the prompt or credentials inside the file as necessary before running.

Running Orchestration & Workflow Samples

Advanced comparisons are split between samantic-kernel-migration/orchestrations (Sequential, Concurrent, Magentic) and samantic-kernel-migration/processes (fan-out/fan-in, nested). You can run them directly, or isolate dependencies in a throwaway virtual environment:

cd samples/semantic-kernel-migration
uv venv --python 3.10 .venv-migration
source .venv-migration/bin/activate
uv pip install semantic-kernel agent-framework
uv run python orchestrations/sequential.py
uv run python processes/fan_out_fan_in_process.py

Swap the script path for any other workflow or process sample. Deactivate the sandbox with deactivate when you are finished.

Tips for Migration

  • Keep the original SK sample open while iterating on the AF equivalent; the code is intentionally formatted so you can copy/paste across SDKs.
  • Threads/conversation state are explicit in AF. When porting SK code that relies on implicit thread reuse, call agent.get_new_thread() and pass it into each run call.
  • Tools map cleanly: SK @kernel_function plugins translate to AF @tool callables. Hosted tools (code interpreter, web search, MCP) are available only in AF—introduce them once parity is achieved.
  • For multi-agent orchestration, AF workflows expose checkpoints and resume capabilities that SK Process/Team abstractions do not. Use the workflow samples as a blueprint when modernizing complex agent graphs.