From 5333cce63c8371a960ca39852bc0bba21cabb03e Mon Sep 17 00:00:00 2001
From: Roger Barreto <19890735+rogerbarreto@users.noreply.github.com>
Date: Wed, 15 Oct 2025 17:13:11 +0100
Subject: [PATCH] .NET: Remove Semantic Kernel Migration instructions (moved
already to SK Repository) (#1485)
* Moved SK->AF migrations
* Update dotnet/samples/SemanticKernelMigration/README.md
Co-authored-by: westey <164392973+westey-m@users.noreply.github.com>
* Removing extra jump for migration
---------
Co-authored-by: westey <164392973+westey-m@users.noreply.github.com>
---
dotnet/agent-framework-dotnet.slnx | 49 ---
dotnet/samples/README.md | 2 +-
...entOrchestrations_Step01_Concurrent.csproj | 26 --
.../Step01_Concurrent/Program.cs | 109 -----
...entOrchestrations_Step02_Sequential.csproj | 26 --
.../Step02_Sequential/Program.cs | 112 -----
.../AgentOrchestrations_Step03_Handoff.csproj | 26 --
.../Step03_Handoff/Program.cs | 247 -----------
.../AzureAIFoundry_Step01_Basics.csproj | 25 --
.../AzureAIFoundry/Step01_Basics/Program.cs | 77 ----
.../AzureAIFoundry_Step02_ToolCall.csproj | 23 -
.../AzureAIFoundry/Step02_ToolCall/Program.cs | 86 ----
...IFoundry_Step03_DependencyInjection.csproj | 23 -
.../Step03_DependencyInjection/Program.cs | 99 -----
...ureAIFoundry_Step04_CodeInterpreter.csproj | 22 -
.../Step04_CodeInterpreter/Program.cs | 123 ------
.../AzureOpenAI_Step01_Basics.csproj | 22 -
.../AzureOpenAI/Step01_Basics/Program.cs | 67 ---
.../AzureOpenAI_Step02_ToolCall.csproj | 23 -
.../AzureOpenAI/Step02_ToolCall/Program.cs | 54 ---
...reOpenAI_Step03_DependencyInjection.csproj | 23 -
.../Step03_DependencyInjection/Program.cs | 55 ---
...AzureOpenAIAssistants_Step01_Basics.csproj | 22 -
.../Step01_Basics/Program.cs | 81 ----
...ureOpenAIAssistants_Step02_ToolCall.csproj | 22 -
.../Step02_ToolCall/Program.cs | 98 -----
...sistants_Step03_DependencyInjection.csproj | 22 -
.../Step03_DependencyInjection/Program.cs | 98 -----
...AIAssistants_Step04_CodeInterpreter.csproj | 22 -
.../Step04_CodeInterpreter/Program.cs | 127 ------
.../AzureOpenAIResponses_Step01_Basics.csproj | 22 -
.../Step01_Basics/Program.cs | 67 ---
...enAIResponses_Step02_ReasoningModel.csproj | 22 -
.../Step02_ReasoningModel/Program.cs | 165 --------
...zureOpenAIResponses_Step03_ToolCall.csproj | 22 -
.../Step03_ToolCall/Program.cs | 54 ---
...esponses_Step04_DependencyInjection.csproj | 23 -
.../Step04_DependencyInjection/Program.cs | 54 ---
.../Step01_Basics/OpenAI_Step01_Basics.csproj | 22 -
.../OpenAI/Step01_Basics/Program.cs | 65 ---
.../OpenAI_Step02_ToolCall.csproj | 23 -
.../OpenAI/Step02_ToolCall/Program.cs | 53 ---
.../OpenAI_Step03_DependencyInjection.csproj | 23 -
.../Step03_DependencyInjection/Program.cs | 53 ---
.../OpenAIAssistants_Step01_Basics.csproj | 22 -
.../OpenAIAssistants/Step01_Basics/Program.cs | 77 ----
.../OpenAIAssistants_Step02_ToolCall.csproj | 22 -
.../Step02_ToolCall/Program.cs | 96 -----
...sistants_Step03_DependencyInjection.csproj | 22 -
.../Step03_DependencyInjection/Program.cs | 96 -----
...AIAssistants_Step04_CodeInterpreter.csproj | 22 -
.../Step04_CodeInterpreter/Program.cs | 124 ------
.../OpenAIResponses_Step01_Basics.csproj | 22 -
.../OpenAIResponses/Step01_Basics/Program.cs | 64 ---
...enAIResponses_Step02_ReasoningModel.csproj | 22 -
.../Step02_ReasoningModel/Program.cs | 162 --------
.../OpenAIResponses_Step03_ToolCall.csproj | 22 -
.../Step03_ToolCall/Program.cs | 53 ---
...esponses_Step04_DependencyInjection.csproj | 23 -
.../Step04_DependencyInjection/Program.cs | 51 ---
.../Playground/README.md | 20 -
.../Playground/SemanticKernelBasic/Program.cs | 89 ----
.../SemanticKernelBasic.csproj | 23 -
.../samples/SemanticKernelMigration/README.md | 393 ------------------
64 files changed, 1 insertion(+), 3903 deletions(-)
delete mode 100644 dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step01_Concurrent/AgentOrchestrations_Step01_Concurrent.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step01_Concurrent/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step02_Sequential/AgentOrchestrations_Step02_Sequential.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step02_Sequential/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step03_Handoff/AgentOrchestrations_Step03_Handoff.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step03_Handoff/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step01_Basics/AzureAIFoundry_Step01_Basics.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step01_Basics/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step02_ToolCall/AzureAIFoundry_Step02_ToolCall.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step02_ToolCall/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step03_DependencyInjection/AzureAIFoundry_Step03_DependencyInjection.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step03_DependencyInjection/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step04_CodeInterpreter/AzureAIFoundry_Step04_CodeInterpreter.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step04_CodeInterpreter/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAI/Step01_Basics/AzureOpenAI_Step01_Basics.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAI/Step01_Basics/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAI/Step02_ToolCall/AzureOpenAI_Step02_ToolCall.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAI/Step02_ToolCall/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAI/Step03_DependencyInjection/AzureOpenAI_Step03_DependencyInjection.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAI/Step03_DependencyInjection/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAIAssistants/Step01_Basics/AzureOpenAIAssistants_Step01_Basics.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAIAssistants/Step01_Basics/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAIAssistants/Step02_ToolCall/AzureOpenAIAssistants_Step02_ToolCall.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAIAssistants/Step02_ToolCall/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAIAssistants/Step03_DependencyInjection/AzureOpenAIAssistants_Step03_DependencyInjection.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAIAssistants/Step03_DependencyInjection/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAIAssistants/Step04_CodeInterpreter/AzureOpenAIAssistants_Step04_CodeInterpreter.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAIAssistants/Step04_CodeInterpreter/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAIResponses/Step01_Basics/AzureOpenAIResponses_Step01_Basics.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAIResponses/Step01_Basics/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAIResponses/Step02_ReasoningModel/AzureOpenAIResponses_Step02_ReasoningModel.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAIResponses/Step02_ReasoningModel/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAIResponses/Step03_ToolCall/AzureOpenAIResponses_Step03_ToolCall.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAIResponses/Step03_ToolCall/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAIResponses/Step04_DependencyInjection/AzureOpenAIResponses_Step04_DependencyInjection.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/AzureOpenAIResponses/Step04_DependencyInjection/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAI/Step01_Basics/OpenAI_Step01_Basics.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAI/Step01_Basics/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAI/Step02_ToolCall/OpenAI_Step02_ToolCall.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAI/Step02_ToolCall/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAI/Step03_DependencyInjection/OpenAI_Step03_DependencyInjection.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAI/Step03_DependencyInjection/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAIAssistants/Step01_Basics/OpenAIAssistants_Step01_Basics.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAIAssistants/Step01_Basics/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAIAssistants/Step02_ToolCall/OpenAIAssistants_Step02_ToolCall.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAIAssistants/Step02_ToolCall/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAIAssistants/Step03_DependencyInjection/OpenAIAssistants_Step03_DependencyInjection.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAIAssistants/Step03_DependencyInjection/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAIAssistants/Step04_CodeInterpreter/OpenAIAssistants_Step04_CodeInterpreter.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAIAssistants/Step04_CodeInterpreter/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAIResponses/Step01_Basics/OpenAIResponses_Step01_Basics.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAIResponses/Step01_Basics/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAIResponses/Step02_ReasoningModel/OpenAIResponses_Step02_ReasoningModel.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAIResponses/Step02_ReasoningModel/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAIResponses/Step03_ToolCall/OpenAIResponses_Step03_ToolCall.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAIResponses/Step03_ToolCall/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAIResponses/Step04_DependencyInjection/OpenAIResponses_Step04_DependencyInjection.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/OpenAIResponses/Step04_DependencyInjection/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/Playground/README.md
delete mode 100644 dotnet/samples/SemanticKernelMigration/Playground/SemanticKernelBasic/Program.cs
delete mode 100644 dotnet/samples/SemanticKernelMigration/Playground/SemanticKernelBasic/SemanticKernelBasic.csproj
delete mode 100644 dotnet/samples/SemanticKernelMigration/README.md
diff --git a/dotnet/agent-framework-dotnet.slnx b/dotnet/agent-framework-dotnet.slnx
index bba35b5703..0a594b4237 100644
--- a/dotnet/agent-framework-dotnet.slnx
+++ b/dotnet/agent-framework-dotnet.slnx
@@ -133,55 +133,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/dotnet/samples/README.md b/dotnet/samples/README.md
index a6fab54b41..d6f2f5c39c 100644
--- a/dotnet/samples/README.md
+++ b/dotnet/samples/README.md
@@ -18,7 +18,7 @@ The samples are subdivided into the following categories:
`AIAgent` and can be used with any underlying service that provides an `AIAgent` implementation.
- [Getting Started - Agent Providers](./GettingStarted/AgentProviders/README.md): Shows how to create an AIAgent instance for a selection of providers.
- [Getting Started - Agent Telemetry](./GettingStarted/AgentOpenTelemetry/README.md): Demo which showcases the integration of OpenTelemetry with the Microsoft Agent Framework using Azure OpenAI and .NET Aspire Dashboard for telemetry visualization.
-- [Semantic Kernel Migration](./SemanticKernelMigration/): Semantic Kernel to Agent Framework migration guide
+- [Semantic Kernel to Agent Framework Migration](https://github.com/microsoft/semantic-kernel/tree/main/dotnet/samples/AgentFrameworkMigration): For instructions and samples describing how to migrate from Semantic Kernel to Microsoft Agent Framework
## Prerequisites
diff --git a/dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step01_Concurrent/AgentOrchestrations_Step01_Concurrent.csproj b/dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step01_Concurrent/AgentOrchestrations_Step01_Concurrent.csproj
deleted file mode 100644
index a548ac03d0..0000000000
--- a/dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step01_Concurrent/AgentOrchestrations_Step01_Concurrent.csproj
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
- Exe
- net9.0
- enable
- enable
- $(NoWarn);CA1812;RCS1102;CA1707;VSTHRD200
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step01_Concurrent/Program.cs b/dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step01_Concurrent/Program.cs
deleted file mode 100644
index ac6c276434..0000000000
--- a/dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step01_Concurrent/Program.cs
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using Azure.AI.OpenAI;
-using Azure.Identity;
-using Microsoft.Agents.AI;
-using Microsoft.Agents.AI.Workflows;
-using Microsoft.Extensions.AI;
-using Microsoft.SemanticKernel;
-using Microsoft.SemanticKernel.Agents;
-using Microsoft.SemanticKernel.Agents.Orchestration;
-using Microsoft.SemanticKernel.Agents.Orchestration.Concurrent;
-using Microsoft.SemanticKernel.Agents.Runtime.InProcess;
-
-var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
-var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-4o-mini";
-
-var agentInstructions = "You are a translation assistant who only responds in {0}. Respond to any input by outputting the name of the input language and then translating the input to {0}.";
-
-// This sample compares running concurrent orchestrations using
-// Semantic Kernel and the Agent Framework.
-Console.WriteLine("=== Semantic Kernel Concurrent Orchestration ===");
-await SKConcurrentOrchestration();
-
-Console.WriteLine("\n=== Agent Framework Concurrent Agent Workflow ===");
-await AFConcurrentAgentWorkflow();
-
-# region SKConcurrentOrchestration
-#pragma warning disable SKEXP0110 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
-async Task SKConcurrentOrchestration()
-{
- ConcurrentOrchestration orchestration = new([
- GetSKTranslationAgent("French"),
- GetSKTranslationAgent("Spanish")])
- {
- StreamingResponseCallback = StreamingResultCallback,
- };
-
- InProcessRuntime runtime = new();
- await runtime.StartAsync();
-
- // Run the orchestration
- OrchestrationResult result = await orchestration.InvokeAsync("Hello, world!", runtime);
- string[] texts = await result.GetValueAsync(TimeSpan.FromSeconds(20));
-
- await runtime.RunUntilIdleAsync();
-}
-#pragma warning restore SKEXP0110 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
-
-ChatCompletionAgent GetSKTranslationAgent(string targetLanguage)
-{
- var kernel = Kernel.CreateBuilder().AddAzureOpenAIChatCompletion(deploymentName, endpoint, new AzureCliCredential()).Build();
- return new ChatCompletionAgent()
- {
- Kernel = kernel,
- Instructions = string.Format(agentInstructions, targetLanguage),
- Description = $"Agent that translates texts to {targetLanguage}",
- Name = $"SKTranslationAgent_{targetLanguage}"
- };
-}
-
-ValueTask StreamingResultCallback(StreamingChatMessageContent streamedResponse, bool isFinal)
-{
- Console.Write(streamedResponse.Content);
-
- if (isFinal)
- {
- Console.WriteLine();
- }
-
- return ValueTask.CompletedTask;
-}
-# endregion
-
-# region AFConcurrentAgentWorkflow
-async Task AFConcurrentAgentWorkflow()
-{
- var client = new AzureOpenAIClient(new Uri(endpoint), new AzureCliCredential()).GetChatClient(deploymentName).AsIChatClient();
- var frenchAgent = GetAFTranslationAgent("French", client);
- var spanishAgent = GetAFTranslationAgent("Spanish", client);
- var concurrentAgentWorkflow = AgentWorkflowBuilder.BuildConcurrent([frenchAgent, spanishAgent]);
-
- await using StreamingRun run = await InProcessExecution.StreamAsync(concurrentAgentWorkflow, "Hello, world!");
- await run.TrySendMessageAsync(new TurnToken(emitEvents: true));
-
- string? lastExecutorId = null;
- await foreach (WorkflowEvent evt in run.WatchStreamAsync().ConfigureAwait(false))
- {
- if (evt is AgentRunUpdateEvent e)
- {
- if (string.IsNullOrEmpty(e.Update.Text))
- {
- continue;
- }
-
- if (e.ExecutorId != lastExecutorId)
- {
- lastExecutorId = e.ExecutorId;
- Console.WriteLine();
- Console.Write($"{e.Update.AuthorName}: ");
- }
-
- Console.Write(e.Update.Text);
- }
- }
-}
-
-ChatClientAgent GetAFTranslationAgent(string targetLanguage, IChatClient chatClient) =>
- new(chatClient, string.Format(agentInstructions, targetLanguage), name: $"AFTranslationAgent_{targetLanguage}");
-# endregion
diff --git a/dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step02_Sequential/AgentOrchestrations_Step02_Sequential.csproj b/dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step02_Sequential/AgentOrchestrations_Step02_Sequential.csproj
deleted file mode 100644
index a548ac03d0..0000000000
--- a/dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step02_Sequential/AgentOrchestrations_Step02_Sequential.csproj
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
- Exe
- net9.0
- enable
- enable
- $(NoWarn);CA1812;RCS1102;CA1707;VSTHRD200
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step02_Sequential/Program.cs b/dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step02_Sequential/Program.cs
deleted file mode 100644
index e317ac0ff8..0000000000
--- a/dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step02_Sequential/Program.cs
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using Azure.AI.OpenAI;
-using Azure.Identity;
-using Microsoft.Agents.AI;
-using Microsoft.Agents.AI.Workflows;
-using Microsoft.Extensions.AI;
-using Microsoft.SemanticKernel;
-using Microsoft.SemanticKernel.Agents;
-using Microsoft.SemanticKernel.Agents.Orchestration;
-using Microsoft.SemanticKernel.Agents.Orchestration.Sequential;
-using Microsoft.SemanticKernel.Agents.Runtime.InProcess;
-
-var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
-var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-4o-mini";
-
-var agentInstructions = "You are a translation assistant who only responds in {0}. Respond to any input by outputting the name of the input language and then translating the input to {0}.";
-
-// This sample compares running sequential orchestrations using
-// Semantic Kernel and the Agent Framework.
-Console.WriteLine("=== Semantic Kernel Sequential Orchestration ===");
-await SKSequentialOrchestration();
-
-Console.WriteLine("\n=== Agent Framework Sequential Agent Workflow ===");
-await AFSequentialAgentWorkflow();
-
-# region SKSequentialOrchestration
-#pragma warning disable SKEXP0110 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
-async Task SKSequentialOrchestration()
-{
- SequentialOrchestration orchestration = new([
- GetSKTranslationAgent("French"),
- GetSKTranslationAgent("Spanish"),
- GetSKTranslationAgent("English")])
- {
- StreamingResponseCallback = StreamingResultCallback,
- };
-
- InProcessRuntime runtime = new();
- await runtime.StartAsync();
-
- // Run the orchestration
- OrchestrationResult result = await orchestration.InvokeAsync("Hello, world!", runtime);
- string text = await result.GetValueAsync(TimeSpan.FromSeconds(20));
-
- await runtime.RunUntilIdleAsync();
-}
-#pragma warning restore SKEXP0110 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
-
-ChatCompletionAgent GetSKTranslationAgent(string targetLanguage)
-{
- var kernel = Kernel.CreateBuilder().AddAzureOpenAIChatCompletion(deploymentName, endpoint, new AzureCliCredential()).Build();
- return new ChatCompletionAgent()
- {
- Kernel = kernel,
- Instructions = string.Format(agentInstructions, targetLanguage),
- Description = $"Agent that translates texts to {targetLanguage}",
- Name = $"SKTranslationAgent_{targetLanguage}"
- };
-}
-
-ValueTask StreamingResultCallback(StreamingChatMessageContent streamedResponse, bool isFinal)
-{
- Console.Write(streamedResponse.Content);
-
- if (isFinal)
- {
- Console.WriteLine();
- }
-
- return ValueTask.CompletedTask;
-}
-# endregion
-
-# region AFSequentialAgentWorkflow
-async Task AFSequentialAgentWorkflow()
-{
- var client = new AzureOpenAIClient(new Uri(endpoint), new AzureCliCredential()).GetChatClient(deploymentName).AsIChatClient();
- var frenchAgent = GetAFTranslationAgent("French", client);
- var spanishAgent = GetAFTranslationAgent("Spanish", client);
- var englishAgent = GetAFTranslationAgent("English", client);
- var sequentialAgentWorkflow = AgentWorkflowBuilder.BuildSequential(
- [frenchAgent, spanishAgent, englishAgent]);
-
- await using StreamingRun run = await InProcessExecution.StreamAsync(sequentialAgentWorkflow, "Hello, world!");
- await run.TrySendMessageAsync(new TurnToken(emitEvents: true));
-
- string? lastExecutorId = null;
- await foreach (WorkflowEvent evt in run.WatchStreamAsync().ConfigureAwait(false))
- {
- if (evt is AgentRunUpdateEvent e)
- {
- if (string.IsNullOrEmpty(e.Update.Text))
- {
- continue;
- }
-
- if (e.ExecutorId != lastExecutorId)
- {
- lastExecutorId = e.ExecutorId;
- Console.WriteLine();
- Console.Write($"{e.Update.AuthorName}: ");
- }
-
- Console.Write(e.Update.Text);
- }
- }
-}
-
-ChatClientAgent GetAFTranslationAgent(string targetLanguage, IChatClient chatClient) =>
- new(chatClient, string.Format(agentInstructions, targetLanguage), name: $"AFTranslationAgent_{targetLanguage}");
-# endregion
diff --git a/dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step03_Handoff/AgentOrchestrations_Step03_Handoff.csproj b/dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step03_Handoff/AgentOrchestrations_Step03_Handoff.csproj
deleted file mode 100644
index a548ac03d0..0000000000
--- a/dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step03_Handoff/AgentOrchestrations_Step03_Handoff.csproj
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
- Exe
- net9.0
- enable
- enable
- $(NoWarn);CA1812;RCS1102;CA1707;VSTHRD200
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step03_Handoff/Program.cs b/dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step03_Handoff/Program.cs
deleted file mode 100644
index f66fefe535..0000000000
--- a/dotnet/samples/SemanticKernelMigration/AgentOrchestrations/Step03_Handoff/Program.cs
+++ /dev/null
@@ -1,247 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using System.ComponentModel;
-using System.Text.Json;
-using Azure.AI.OpenAI;
-using Azure.Identity;
-using Microsoft.Agents.AI;
-using Microsoft.Agents.AI.Workflows;
-using Microsoft.Extensions.AI;
-using Microsoft.SemanticKernel;
-using Microsoft.SemanticKernel.Agents;
-using Microsoft.SemanticKernel.Agents.Orchestration;
-using Microsoft.SemanticKernel.Agents.Orchestration.Handoff;
-using Microsoft.SemanticKernel.Agents.Runtime.InProcess;
-using Microsoft.SemanticKernel.ChatCompletion;
-
-var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
-var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-4o-mini";
-
-// Queries to simulate user input during the interactive orchestration
-List Queries = [
- "I'd like to track the status of my first order 123.",
- "I want to return another order of mine whose ID is 456 because it arrived damaged.",
-];
-
-// This sample compares running handoff orchestrations using
-// Semantic Kernel and the Agent Framework.
-Console.WriteLine("=== Semantic Kernel Handoff Orchestration ===");
-// State to help format the streaming output
-bool newAgentTurn = true;
-string previousFunctionCallId = string.Empty;
-await SKHandoffOrchestration();
-
-Console.WriteLine("\n=== Agent Framework Handoff Agent Workflow ===");
-await AFHandoffAgentWorkflow();
-
-# region SKHandoffOrchestration
-[KernelFunction]
-string SKCheckOrderStatus(string orderId) => $"Order {orderId} is shipped and will arrive in 2-3 days.";
-
-[KernelFunction]
-string SKProcessReturn(string orderId, string reason) => $"Return for order {orderId} has been processed successfully.";
-
-[KernelFunction]
-string SKProcessRefund(string orderId, string reason) => $"Refund for order {orderId} has been processed successfully.";
-
-#pragma warning disable SKEXP0110 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
-async Task SKHandoffOrchestration()
-{
- // Create agents
- var triageAgent = GetSKAgent(
- instructions: "You are a customer support agent that triages issues.",
- name: "TriageAgent",
- description: "Handle customer requests.");
- var statusAgent = GetSKAgent(
- instructions: "You are a customer support agent that checks order status.",
- name: "OrderStatusAgent",
- description: "Handle order status requests.");
- statusAgent.Kernel.Plugins.AddFromFunctions("OrderStatusPlugin", [KernelFunctionFactory.CreateFromMethod(SKCheckOrderStatus)]);
- var returnAgent = GetSKAgent(
- instructions: "You are a customer support agent that handles order returns.",
- name: "OrderReturnAgent",
- description: "Handle order return requests.");
- returnAgent.Kernel.Plugins.AddFromFunctions("OrderReturnPlugin", [KernelFunctionFactory.CreateFromMethod(SKProcessReturn)]);
- var refundAgent = GetSKAgent(
- instructions: "You are a customer support agent that handles order refunds.",
- name: "OrderRefundAgent",
- description: "Handle order refund requests.");
- refundAgent.Kernel.Plugins.AddFromFunctions("OrderRefundPlugin", [KernelFunctionFactory.CreateFromMethod(SKProcessRefund)]);
-
- Queue queries = new(Queries);
-
- // Create orchestration with handoffs
- HandoffOrchestration orchestration =
- new(OrchestrationHandoffs
- .StartWith(triageAgent)
- .Add(triageAgent, statusAgent, returnAgent, refundAgent)
- .Add(statusAgent, triageAgent, "Transfer to this agent if the issue is not status related")
- .Add(returnAgent, triageAgent, "Transfer to this agent if the issue is not return related")
- .Add(refundAgent, triageAgent, "Transfer to this agent if the issue is not refund related"),
- triageAgent,
- statusAgent,
- returnAgent,
- refundAgent)
- {
- InteractiveCallback = () =>
- {
- string input = queries.Count > 0 ? queries.Dequeue() : "exit";
- Console.WriteLine($"\nUser: {input}");
- return ValueTask.FromResult(new ChatMessageContent(AuthorRole.User, input));
- },
- StreamingResponseCallback = StreamingResultCallback,
- };
-
- InProcessRuntime runtime = new();
- await runtime.StartAsync();
-
- // Run the orchestration
- OrchestrationResult result = await orchestration.InvokeAsync(
- "I am a customer that needs help with my two orders",
- runtime);
- string text = await result.GetValueAsync();
- Console.WriteLine($"\nFinal Result: {text}");
-
- await runtime.RunUntilIdleAsync();
-}
-#pragma warning restore SKEXP0110 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
-
-ChatCompletionAgent GetSKAgent(string instructions, string name, string description)
-{
- var kernel = Kernel.CreateBuilder().AddAzureOpenAIChatCompletion(deploymentName, endpoint, new AzureCliCredential()).Build();
- return new ChatCompletionAgent()
- {
- Kernel = kernel,
- Instructions = instructions,
- Description = description,
- Name = name
- };
-}
-
-ValueTask StreamingResultCallback(StreamingChatMessageContent streamedResponse, bool isFinal)
-{
- if (newAgentTurn)
- {
- Console.Write($"\n{streamedResponse.AuthorName}: ");
- newAgentTurn = false;
- }
- Console.Write(streamedResponse.Content);
-
- if (streamedResponse.Items.OfType().FirstOrDefault()
- is StreamingFunctionCallUpdateContent call)
- {
- if (call.CallId is not null && previousFunctionCallId != call.CallId)
- {
- Console.Write($"\nCalling function '{call.Name}' with arguments: ");
- previousFunctionCallId = call.CallId;
- }
- if (!string.IsNullOrEmpty(call.Arguments))
- {
- Console.Write($"{call.Arguments}");
- }
- }
-
- if (isFinal)
- {
- newAgentTurn = true;
- previousFunctionCallId = string.Empty;
- Console.WriteLine();
- }
-
- return ValueTask.CompletedTask;
-}
-# endregion
-
-# region AFHandoffAgentWorkflow
-[Description("Get the order status for a given order ID.")]
-static string AFCheckOrderStatus([Description("The order ID to check the status for.")] string orderId)
- => $"Order {orderId} is shipped and will arrive in 2-3 days.";
-
-[Description("Process a return for a given order ID.")]
-static string AFProcessReturn(
- [Description("The order ID to process the return for.")] string orderId,
- [Description("The reason for the return.")] string reason)
- => $"Return for order {orderId} has been processed successfully for the following reason: {reason}.";
-
-[Description("Process a refund for a given order ID.")]
-static string AFProcessRefund([Description("The order ID to process the refund for.")] string orderId)
- => $"Refund for order {orderId} has been processed successfully.";
-
-async Task AFHandoffAgentWorkflow()
-{
- // Create agents
- var client = new AzureOpenAIClient(new Uri(endpoint), new AzureCliCredential()).GetChatClient(deploymentName).AsIChatClient();
-
- ChatClientAgent triageAgent = new(client,
- instructions: "A customer support agent that triages issues.",
- name: "TriageAgent",
- description: "Handle customer requests.");
- ChatClientAgent statusAgent = new(client,
- name: "OrderStatusAgent",
- instructions: "Handle order status requests.",
- description: "A customer support agent that checks order status.",
- tools: [AIFunctionFactory.Create(AFCheckOrderStatus)]);
- ChatClientAgent returnAgent = new(client,
- name: "OrderReturnAgent",
- instructions: "Handle order return requests.",
- description: "A customer support agent that handles order returns.",
- tools: [AIFunctionFactory.Create(AFProcessReturn)]);
- ChatClientAgent refundAgent = new(client,
- name: "OrderRefundAgent",
- instructions: "Handle order refund requests.",
- description: "A customer support agent that handles order refund.",
- tools: [AIFunctionFactory.Create(AFProcessRefund)]);
-
- // Create workflow with handoffs
- var handoffAgentWorkflow = AgentWorkflowBuilder.CreateHandoffBuilderWith(triageAgent)
- .WithHandoffs(triageAgent, [statusAgent, returnAgent, refundAgent])
- .WithHandoff(statusAgent, triageAgent, "Transfer to this agent if the issue is not status related")
- .WithHandoff(returnAgent, triageAgent, "Transfer to this agent if the issue is not return related")
- .WithHandoff(refundAgent, triageAgent, "Transfer to this agent if the issue is not refund related")
- .Build();
-
- // Run the workflow
- List messages = [];
- foreach (var query in Queries)
- {
- Console.WriteLine($"User: {query}");
- messages.Add(new(ChatRole.User, query));
-
- await using var run = await InProcessExecution.StreamAsync(handoffAgentWorkflow, messages);
- await run.TrySendMessageAsync(new TurnToken(emitEvents: true));
-
- string? lastExecutorId = null;
- await foreach (WorkflowEvent evt in run.WatchStreamAsync().ConfigureAwait(false))
- {
- if (evt is AgentRunUpdateEvent e)
- {
- if (string.IsNullOrEmpty(e.Update.Text) && e.Update.Contents.Count == 0)
- {
- continue;
- }
-
- if (e.ExecutorId != lastExecutorId)
- {
- lastExecutorId = e.ExecutorId;
- Console.WriteLine();
- Console.Write($"{e.Update.AuthorName}: ");
- }
-
- Console.Write(e.Update.Text);
-
- if (e.Update.Contents.OfType().FirstOrDefault()
- is Microsoft.Extensions.AI.FunctionCallContent call)
- {
- Console.WriteLine();
- Console.WriteLine($"Calling function '{call.Name}' with arguments: {JsonSerializer.Serialize(call.Arguments)}");
- }
- }
- else if (evt is WorkflowOutputEvent output)
- {
- Console.WriteLine("\n");
- messages.AddRange(output.As>()!);
- }
- }
- }
-}
-# endregion
diff --git a/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step01_Basics/AzureAIFoundry_Step01_Basics.csproj b/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step01_Basics/AzureAIFoundry_Step01_Basics.csproj
deleted file mode 100644
index a0295bca1d..0000000000
--- a/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step01_Basics/AzureAIFoundry_Step01_Basics.csproj
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
- Exe
- net9.0
- enable
- enable
- $(NoWarn);CA1812;RCS1102
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step01_Basics/Program.cs b/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step01_Basics/Program.cs
deleted file mode 100644
index cc2769be3d..0000000000
--- a/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step01_Basics/Program.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using Azure.AI.Agents.Persistent;
-using Azure.Identity;
-using Microsoft.Agents.AI;
-using Microsoft.SemanticKernel;
-using Microsoft.SemanticKernel.Agents.AzureAI;
-
-var azureEndpoint = Environment.GetEnvironmentVariable("AZURE_FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_FOUNDRY_PROJECT_ENDPOINT is not set.");
-var deploymentName = System.Environment.GetEnvironmentVariable("AZURE_FOUNDRY_PROJECT_DEPLOYMENT_NAME") ?? "gpt-4o";
-var userInput = "Tell me a joke about a pirate.";
-
-Console.WriteLine($"User Input: {userInput}");
-
-await SKAgentAsync();
-await AFAgentAsync();
-
-async Task SKAgentAsync()
-{
- Console.WriteLine("\n=== SK Agent ===\n");
-
- var azureAgentClient = AzureAIAgent.CreateAgentsClient(azureEndpoint, new AzureCliCredential());
-
- PersistentAgent definition = await azureAgentClient.Administration.CreateAgentAsync(
- deploymentName,
- name: "GenerateStory",
- instructions: "You are good at telling jokes.");
-
- AzureAIAgent agent = new(definition, azureAgentClient);
-
- var thread = new AzureAIAgentThread(azureAgentClient);
-
- AzureAIAgentInvokeOptions options = new() { MaxPromptTokens = 1000 };
- var result = await agent.InvokeAsync(userInput, thread, options).FirstAsync();
- Console.WriteLine(result.Message);
-
- Console.WriteLine("---");
- await foreach (StreamingChatMessageContent update in agent.InvokeStreamingAsync(userInput, thread))
- {
- Console.Write(update);
- }
-
- // Clean up
- await thread.DeleteAsync();
- await azureAgentClient.Administration.DeleteAgentAsync(agent.Id);
-}
-
-async Task AFAgentAsync()
-{
- Console.WriteLine("\n=== AF Agent ===\n");
-
- var azureAgentClient = new PersistentAgentsClient(azureEndpoint, new AzureCliCredential());
-
- var agent = await azureAgentClient.CreateAIAgentAsync(
- deploymentName,
- name: "GenerateStory",
- instructions: "You are good at telling jokes.");
-
- var thread = agent.GetNewThread();
- var agentOptions = new ChatClientAgentRunOptions(new() { MaxOutputTokens = 1000 });
-
- var result = await agent.RunAsync(userInput, thread, agentOptions);
- Console.WriteLine(result);
-
- Console.WriteLine("---");
- await foreach (var update in agent.RunStreamingAsync(userInput, thread, agentOptions))
- {
- Console.Write(update);
- }
-
- // Clean up
- if (thread is ChatClientAgentThread chatThread)
- {
- await azureAgentClient.Threads.DeleteThreadAsync(chatThread.ConversationId);
- }
- await azureAgentClient.Administration.DeleteAgentAsync(agent.Id);
-}
diff --git a/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step02_ToolCall/AzureAIFoundry_Step02_ToolCall.csproj b/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step02_ToolCall/AzureAIFoundry_Step02_ToolCall.csproj
deleted file mode 100644
index 6c13bf9446..0000000000
--- a/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step02_ToolCall/AzureAIFoundry_Step02_ToolCall.csproj
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
- Exe
- net9.0
- enable
- enable
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step02_ToolCall/Program.cs b/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step02_ToolCall/Program.cs
deleted file mode 100644
index c8a5ba8dab..0000000000
--- a/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step02_ToolCall/Program.cs
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using System.ComponentModel;
-using Azure.AI.Agents.Persistent;
-using Azure.Identity;
-using Microsoft.Agents.AI;
-using Microsoft.Extensions.AI;
-using Microsoft.SemanticKernel;
-using Microsoft.SemanticKernel.Agents.AzureAI;
-
-var azureEndpoint = Environment.GetEnvironmentVariable("AZURE_FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_FOUNDRY_PROJECT_ENDPOINT is not set.");
-var deploymentName = System.Environment.GetEnvironmentVariable("AZURE_FOUNDRY_PROJECT_DEPLOYMENT_NAME") ?? "gpt-4o";
-var userInput = "What is the weather like in Amsterdam?";
-
-Console.WriteLine($"User Input: {userInput}");
-
-[KernelFunction]
-[Description("Get the weather for a given location.")]
-static string GetWeather([Description("The location to get the weather for.")] string location)
- => $"The weather in {location} is cloudy with a high of 15°C.";
-
-await SKAgentAsync();
-await AFAgentAsync();
-
-async Task SKAgentAsync()
-{
- Console.WriteLine("\n=== SK Agent ===\n");
-
- var azureAgentClient = AzureAIAgent.CreateAgentsClient(azureEndpoint, new AzureCliCredential());
-
- PersistentAgent definition = await azureAgentClient.Administration.CreateAgentAsync(deploymentName, instructions: "You are a helpful assistant");
-
- AzureAIAgent agent = new(definition, azureAgentClient)
- {
- Kernel = Kernel.CreateBuilder().Build(),
- Name = "Host",
- Instructions = "You are a helpful assistant",
- Arguments = new KernelArguments(new PromptExecutionSettings() { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto() }),
- };
-
- var thread = new AzureAIAgentThread(azureAgentClient);
-
- // Initialize plugin and add to the agent's Kernel (same as direct Kernel usage).
- agent.Kernel.Plugins.Add(KernelPluginFactory.CreateFromFunctions("KernelPluginName", [KernelFunctionFactory.CreateFromMethod(GetWeather)]));
-
- var result = await agent.InvokeAsync(userInput).FirstAsync();
- Console.WriteLine(result.Message);
-
- Console.WriteLine("---");
- await foreach (ChatMessageContent update in agent.InvokeAsync(userInput, thread))
- {
- Console.Write(update);
- }
-
- // Clean up
- await thread.DeleteAsync();
- await azureAgentClient.Administration.DeleteAgentAsync(agent.Id);
-}
-
-async Task AFAgentAsync()
-{
- Console.WriteLine("\n=== AF Agent ===\n");
-
- var azureAgentClient = new PersistentAgentsClient(azureEndpoint, new AzureCliCredential());
-
- var agent = await azureAgentClient.CreateAIAgentAsync(deploymentName, instructions: "Answer questions about the menu");
-
- var thread = agent.GetNewThread();
- var agentOptions = new ChatClientAgentRunOptions(new() { Tools = [AIFunctionFactory.Create(GetWeather)] });
-
- var result = await agent.RunAsync(userInput, thread, agentOptions);
- Console.WriteLine(result);
-
- Console.WriteLine("---");
- await foreach (var update in agent.RunStreamingAsync(userInput, thread, agentOptions))
- {
- Console.Write(update);
- }
-
- // Clean up
- if (thread is ChatClientAgentThread chatThread)
- {
- await azureAgentClient.Threads.DeleteThreadAsync(chatThread.ConversationId);
- }
- await azureAgentClient.Administration.DeleteAgentAsync(agent.Id);
-}
diff --git a/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step03_DependencyInjection/AzureAIFoundry_Step03_DependencyInjection.csproj b/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step03_DependencyInjection/AzureAIFoundry_Step03_DependencyInjection.csproj
deleted file mode 100644
index 6c13bf9446..0000000000
--- a/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step03_DependencyInjection/AzureAIFoundry_Step03_DependencyInjection.csproj
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
- Exe
- net9.0
- enable
- enable
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step03_DependencyInjection/Program.cs b/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step03_DependencyInjection/Program.cs
deleted file mode 100644
index 3930603e1f..0000000000
--- a/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step03_DependencyInjection/Program.cs
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using Azure.AI.Agents.Persistent;
-using Azure.Identity;
-using Microsoft.Agents.AI;
-using Microsoft.Extensions.AI;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.SemanticKernel;
-using Microsoft.SemanticKernel.Agents.AzureAI;
-
-var azureEndpoint = Environment.GetEnvironmentVariable("AZURE_FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_FOUNDRY_PROJECT_ENDPOINT is not set.");
-var deploymentName = System.Environment.GetEnvironmentVariable("AZURE_FOUNDRY_PROJECT_DEPLOYMENT_NAME") ?? "gpt-4o";
-var userInput = "Tell me a joke about a pirate.";
-
-Console.WriteLine($"User Input: {userInput}");
-
-await SKAgentAsync();
-await AFAgentAsync();
-
-async Task SKAgentAsync()
-{
- Console.WriteLine("\n=== SK Agent ===\n");
-
- var serviceCollection = new ServiceCollection();
- serviceCollection.AddSingleton((sp) => AzureAIAgent.CreateAgentsClient(azureEndpoint, new AzureCliCredential()));
- serviceCollection.AddTransient((sp) =>
- {
- var azureAgentClient = sp.GetRequiredService();
-
- Console.Write("Creating agent in the cloud...");
-
- PersistentAgent definition = azureAgentClient.Administration
- .CreateAgent(deploymentName,
- name: "GenerateStory",
- instructions: "You are good at telling jokes.");
-
- Console.Write("Done\n");
-
- return new(definition, azureAgentClient);
- });
- serviceCollection.AddKernel();
-
- await using ServiceProvider serviceProvider = serviceCollection.BuildServiceProvider();
- var agent = serviceProvider.GetRequiredService();
-
- var thread = new AzureAIAgentThread(agent.Client);
-
- var result = await agent.InvokeAsync(userInput).FirstAsync();
- Console.WriteLine(result.Message);
-
- Console.WriteLine("---");
- await foreach (ChatMessageContent update in agent.InvokeAsync(userInput, thread))
- {
- Console.Write(update);
- }
-
- // Clean up
- await thread.DeleteAsync();
- await agent.Client.Administration.DeleteAgentAsync(agent.Id);
-}
-
-async Task AFAgentAsync()
-{
- Console.WriteLine("\n=== AF Agent ===\n");
-
- var serviceCollection = new ServiceCollection();
- serviceCollection.AddSingleton((sp) => new PersistentAgentsClient(azureEndpoint, new AzureCliCredential()));
- serviceCollection.AddTransient((sp) =>
- {
- var azureAgentClient = sp.GetRequiredService();
-
- return azureAgentClient.CreateAIAgent(
- deploymentName,
- name: "GenerateStory",
- instructions: "You are good at telling jokes.");
- });
-
- await using ServiceProvider serviceProvider = serviceCollection.BuildServiceProvider();
- var agent = serviceProvider.GetRequiredService();
-
- var thread = agent.GetNewThread();
-
- var result = await agent.RunAsync(userInput, thread);
- Console.WriteLine(result);
-
- Console.WriteLine("---");
- await foreach (var update in agent.RunStreamingAsync(userInput, thread))
- {
- Console.Write(update);
- }
-
- // Clean up
- var azureAgentClient = serviceProvider.GetRequiredService();
- if (thread is ChatClientAgentThread chatThread)
- {
- await azureAgentClient.Threads.DeleteThreadAsync(chatThread.ConversationId);
- }
- await azureAgentClient.Administration.DeleteAgentAsync(agent.Id);
-}
diff --git a/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step04_CodeInterpreter/AzureAIFoundry_Step04_CodeInterpreter.csproj b/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step04_CodeInterpreter/AzureAIFoundry_Step04_CodeInterpreter.csproj
deleted file mode 100644
index e9bdf16aa8..0000000000
--- a/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step04_CodeInterpreter/AzureAIFoundry_Step04_CodeInterpreter.csproj
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
- Exe
- net9.0
- enable
- enable
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step04_CodeInterpreter/Program.cs b/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step04_CodeInterpreter/Program.cs
deleted file mode 100644
index 0dc994a9c3..0000000000
--- a/dotnet/samples/SemanticKernelMigration/AzureAIFoundry/Step04_CodeInterpreter/Program.cs
+++ /dev/null
@@ -1,123 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using System.Text;
-using Azure.AI.Agents.Persistent;
-using Azure.Identity;
-using Microsoft.Agents.AI;
-using Microsoft.Extensions.AI;
-using Microsoft.SemanticKernel;
-using Microsoft.SemanticKernel.Agents;
-using Microsoft.SemanticKernel.Agents.AzureAI;
-
-var azureEndpoint = Environment.GetEnvironmentVariable("AZURE_FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_FOUNDRY_PROJECT_ENDPOINT is not set.");
-var deploymentName = System.Environment.GetEnvironmentVariable("AZURE_FOUNDRY_PROJECT_DEPLOYMENT_NAME") ?? "gpt-4o";
-var userInput = "Create a python code file using the code interpreter tool with a code ready to determine the values in the Fibonacci sequence that are less then the value of 101";
-
-Console.WriteLine($"User Input: {userInput}");
-
-await SKAgentAsync();
-await AFAgentAsync();
-
-async Task SKAgentAsync()
-{
- Console.WriteLine("\n=== SK Agent ===\n");
-
- var azureAgentClient = AzureAIAgent.CreateAgentsClient(azureEndpoint, new AzureCliCredential());
-
- PersistentAgent definition = await azureAgentClient.Administration.CreateAgentAsync(deploymentName, tools: [new CodeInterpreterToolDefinition()]);
-
- AzureAIAgent agent = new(definition, azureAgentClient);
- var thread = new AzureAIAgentThread(azureAgentClient);
-
- // SK Azure AI Agent provides the code interpreter content and the assistant message as different contents in the call iteration.
- await foreach (var content in agent.InvokeAsync(userInput, thread))
- {
- if (!string.IsNullOrWhiteSpace(content.Message.Content))
- {
- bool isCode = content.Message.Metadata?.ContainsKey(AzureAIAgent.CodeInterpreterMetadataKey) ?? false;
- Console.WriteLine($"\n# {content.Message.Role}{(isCode ? "\n# Generated Code:\n" : ":")}{content.Message.Content}");
- }
-
- // Check for the citations
- foreach (var item in content.Message.Items)
- {
- // Process each item in the message
- if (item is AnnotationContent annotation)
- {
- if (annotation.Kind != AnnotationKind.UrlCitation)
- {
- Console.WriteLine($" [{item.GetType().Name}] {annotation.Label}: File #{annotation.ReferenceId}");
- }
- }
- else if (item is FileReferenceContent fileReference)
- {
- Console.WriteLine($" [{item.GetType().Name}] File #{fileReference.FileId}");
- }
- }
- }
-
- // Clean up
- await thread.DeleteAsync();
- await azureAgentClient.Administration.DeleteAgentAsync(agent.Id);
-}
-
-async Task AFAgentAsync()
-{
- Console.WriteLine("\n=== AF Agent ===\n");
-
- var azureAgentClient = new PersistentAgentsClient(azureEndpoint, new AzureCliCredential());
- var agent = await azureAgentClient.CreateAIAgentAsync(deploymentName, tools: [new CodeInterpreterToolDefinition()]);
- var thread = agent.GetNewThread();
-
- var result = await agent.RunAsync(userInput, thread);
- Console.WriteLine(result);
-
- // Extracts via breaking glass the code generated by code interpreter tool
- var chatResponse = result.RawRepresentation as ChatResponse;
- StringBuilder generatedCode = new();
- foreach (object? updateRawRepresentation in chatResponse?.RawRepresentation as IEnumerable