mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
2b869c2396
* WIP * Fixed build errors (#1638) Comment and nullable type alignment * Sync to SDK update * Checkpoint * Checkpoint: Tests passing * Checkpoint: EndWorkflow * Add trace * .NET: Azure.AI.Agents Package Split + Initial Extensions (#1657) * Move packages * Update nuget.config * Address Xmldoc * Remove format from branches checks * Address Xmldocs * Add more details to the implementation * Moving Agent logic to ChatClient * Adding Name and Id overrides to AzureAIAgent * Updating extensions * Add GetAiAgent extensions * Adding support for version as name can conflict 409 using the Agents API with same name * Addressing more updates to the extensions * More improvements * Remove debugging code from sample * Address copilot feedback * Apply suggestions from co-pilot code review * Checkpoint * Update Directory.Packages.props Fix package version rollback: Azure.AI.Agents.Persistent (beta-6 => beta-7) * Add project reference * .NET: Add comprehensive unit tests for Microsoft.Agents.AI.AzureAIAgents extension methods (#1786) * Initial plan * Add comprehensive unit test project for Microsoft.Agents.AI.AzureAIAgents Co-authored-by: rogerbarreto <19890735+rogerbarreto@users.noreply.github.com> * Add README documenting test project and package dependency requirements Co-authored-by: rogerbarreto <19890735+rogerbarreto@users.noreply.github.com> * Fix documentation URL to use learn.microsoft.com Co-authored-by: rogerbarreto <19890735+rogerbarreto@users.noreply.github.com> * Bump back AAAP 1.2.0-beta.7 * Address AI generated UT's * Remove UT Readme * Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: rogerbarreto <19890735+rogerbarreto@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * .NET: Change model to be required just for prompt agent definition specific extensions (#1812) * Remove unneeded model from extensions * Add noop justification * Update Package Nameing: V1 -> AzureAI.Persistent / V2 -> AzureAI (#1829) * Checkpoint for merge * No build errors * .NET: Update Extensions for Strict Agent Definitions + Improvements (#1892) * Update Package Nameing: V1 -> AzureAI.Persistent / V2 -> AzureAI * Update agents and extensions to comply with strict agent definitions * More static updates * Address UT, and ResponseTool support * Improving reusability extensions * Addressing ResponseTools Unit Tests and extension setup * Adapted workaround on breaking AAA with OpenAI 2.6.0 * Small updates * Remove strictness when retrieving agents, improved XmlDocs * Improve sample comments * Update dotnet/tests/Microsoft.Agents.AI.AzureAI.UnitTests/AgentsClientExtensionsTests.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Address PR comments * Address UT failing * Address Copilot feedback * Address Copilot feedback * Address comment typo * Address PR feedback * Address typo * Add missing Extensions with ChatClientAgentOptions * Address comments --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Updated package version (#1897) * Version update (#1901) * Checkpoint * Updated package version (#1906) * Checkpoint * Checkpoint * Checkpoint * Align with azure ai agent * Update dotnet/samples/GettingStarted/Workflows/Declarative/StudentTeacher/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update dotnet/samples/GettingStarted/Workflows/Declarative/MCPToolApproval/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update dotnet/samples/GettingStarted/Workflows/Declarative/DeepResearch/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Refactored external input * Update dotnet/samples/GettingStarted/Workflows/Declarative/MCPToolApproval/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Agent tools patch * Demos validated * Checkpoint * Hygiene * Checkpoint - Samples * Update dotnet/samples/GettingStarted/Workflows/Declarative/StudentTeacher/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update dotnet/samples/GettingStarted/Workflows/Declarative/StudentTeacher/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Checkpoint * Checkpoint - Deep Research * Update baseline * Update * Typo * Checkpoint * Typos * Sample cleanup * Update dotnet/src/Microsoft.Agents.AI.Workflows.Declarative/AzureAgentProvider.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update dotnet/src/Microsoft.Agents.AI.AzureAI/AgentsClientExtensions.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update dotnet/samples/GettingStarted/Workflows/Declarative/FunctionTools/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update dotnet/samples/GettingStarted/Workflows/Declarative/StudentTeacher/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update dotnet/samples/GettingStarted/Workflows/Declarative/ToolApproval/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update dotnet/samples/GettingStarted/Workflows/Declarative/DeepResearch/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Typo * Typo * Fix input loop * Sample - Function Calling / External Input * Typo * Finessed * Checkpoint * Fix feed * Checkpoint - so close * Ding dong! * "there" *** * Fixup comments * Fix sample * Code analysis * Header * Typo (variableName) * Remove dead code * Skip test (agent api ratchet) * Comment * Update dotnet/samples/GettingStarted/Workflows/Declarative/StudentTeacher/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Typo --------- Co-authored-by: Roger Barreto <19890735+rogerbarreto@users.noreply.github.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Dmytro Struk <13853051+dmytrostruk@users.noreply.github.com>
142 lines
4.1 KiB
C#
142 lines
4.1 KiB
C#
// Copyright (c) Microsoft. All rights reserved.
|
|
|
|
// Uncomment this to enable JSON checkpointing to the local file system.
|
|
//#define CHECKPOINT_JSON
|
|
|
|
using System.Reflection;
|
|
using Azure.Identity;
|
|
using Microsoft.Agents.AI.Workflows;
|
|
using Microsoft.Agents.AI.Workflows.Declarative;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Shared.Workflows;
|
|
|
|
namespace Demo.DeclarativeCode;
|
|
|
|
/// <summary>
|
|
/// HOW TO: Execute a declarative workflow that has been converted to code.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// <b>Configuration</b>
|
|
/// Define FOUNDRY_PROJECT_ENDPOINT as a user-secret or environment variable that
|
|
/// points to your Foundry project endpoint.
|
|
/// </remarks>
|
|
internal sealed class Program
|
|
{
|
|
public static async Task Main(string[] args)
|
|
{
|
|
string? workflowInput = ParseWorkflowInput(args);
|
|
|
|
Program program = new(workflowInput);
|
|
await program.ExecuteAsync();
|
|
}
|
|
|
|
private async Task ExecuteAsync()
|
|
{
|
|
Notify("\nWORKFLOW: Starting...");
|
|
|
|
string input = this.GetWorkflowInput();
|
|
|
|
// Execute the workflow: The WorkflowRunner demonstrates how to execute
|
|
// a workflow, handle the workflow events, and providing external input.
|
|
// This also includes the ability to checkpoint workflow state and how to
|
|
// resume execution.
|
|
await this.Runner.ExecuteAsync(this.CreateWorkflow, input);
|
|
|
|
Notify("\nWORKFLOW: Done!\n");
|
|
}
|
|
|
|
private Workflow CreateWorkflow()
|
|
{
|
|
// Use DeclarativeWorkflowBuilder to build a workflow based on a YAML file.
|
|
DeclarativeWorkflowOptions options =
|
|
new(new AzureAgentProvider(new Uri(this.FoundryEndpoint), new AzureCliCredential()))
|
|
{
|
|
Configuration = this.Configuration
|
|
};
|
|
|
|
// Use the generated provider to create a workflow instance.
|
|
return SampleWorkflowProvider.CreateWorkflow<string>(options);
|
|
}
|
|
|
|
private string? WorkflowInput { get; }
|
|
private string FoundryEndpoint { get; }
|
|
private IConfiguration Configuration { get; }
|
|
private WorkflowRunner Runner { get; }
|
|
|
|
private Program(string? workflowInput)
|
|
{
|
|
this.WorkflowInput = workflowInput;
|
|
|
|
this.Configuration = InitializeConfig();
|
|
|
|
this.FoundryEndpoint = this.Configuration[Application.Settings.FoundryEndpoint] ?? throw new InvalidOperationException($"Undefined configuration setting: {Application.Settings.FoundryEndpoint}");
|
|
|
|
this.Runner =
|
|
new()
|
|
{
|
|
#if CHECKPOINT_JSON
|
|
// Use an json file checkpoint store that will persist checkpoints to the local file system.
|
|
UseJsonCheckpoints = true
|
|
#else
|
|
// Use an in-memory checkpoint store that will not persist checkpoints beyond the lifetime of the process.
|
|
UseJsonCheckpoints = false
|
|
#endif
|
|
};
|
|
}
|
|
|
|
private string GetWorkflowInput()
|
|
{
|
|
string? input = this.WorkflowInput;
|
|
|
|
try
|
|
{
|
|
Console.ForegroundColor = ConsoleColor.DarkGreen;
|
|
|
|
Console.Write("\nINPUT: ");
|
|
|
|
Console.ForegroundColor = ConsoleColor.White;
|
|
|
|
if (!string.IsNullOrWhiteSpace(input))
|
|
{
|
|
Console.WriteLine(input);
|
|
return input;
|
|
}
|
|
while (string.IsNullOrWhiteSpace(input))
|
|
{
|
|
input = Console.ReadLine();
|
|
}
|
|
|
|
return input.Trim();
|
|
}
|
|
finally
|
|
{
|
|
Console.ResetColor();
|
|
}
|
|
}
|
|
|
|
private static string? ParseWorkflowInput(string[] args)
|
|
{
|
|
return args?.FirstOrDefault();
|
|
}
|
|
|
|
// Load configuration from user-secrets
|
|
private static IConfigurationRoot InitializeConfig() =>
|
|
new ConfigurationBuilder()
|
|
.AddUserSecrets(Assembly.GetExecutingAssembly())
|
|
.AddEnvironmentVariables()
|
|
.Build();
|
|
|
|
private static void Notify(string message)
|
|
{
|
|
Console.ForegroundColor = ConsoleColor.Cyan;
|
|
try
|
|
{
|
|
Console.WriteLine(message);
|
|
}
|
|
finally
|
|
{
|
|
Console.ResetColor();
|
|
}
|
|
}
|
|
}
|