Commit Graph

30 Commits

  • .NET: Fix handoff function naming (#1370)
    * Fix handoff function naming
    
    We don't need the agent's name or a guid in the handoff name... we can just use simple numbering. There's a possibility that someone built an agent with a built-in function tool named "handoff_to_x"; if that turns out to be an issue, we could add back some longer bit of randomness.
    
    * Update dotnet/src/Microsoft.Agents.AI.Workflows/Specialized/HandoffAgentExecutor.cs
    
    ---------
    
    Co-authored-by: Chris <66376200+crickman@users.noreply.github.com>
  • refactor: [BREAKING] Remove generic Workflow<T> (#1551)
    Remove input type checking in favour of explicit `.DescribeProtocolAsync()` flow. Also removes `.AsAgentAsync()` as the validation happens at workflow run time. This makes it easier to use Workflows with DI without resorting to async-over-sync.
  • .NET: AIAgentHostExecutor to use ToAgentRunResponse (#1439)
    * AIAgentHostExecutor to use ToAgentRunResponse
    
    * Only run agent in stream mode when emit event is true
  • .NET: [BREAKING] Enable sharing of workflow instances across concurrently executing runs (#1464)
    * refactor: remove unused internals
    
    * feat: Execution Mode for sharing a workflow among concurrent runs
    
    * feat: Update WorkflowHostAgent to support concurrent execution
    
    * Also update AsAgent APIs to support injecting a CheckpointManager and an IWorkflowExecutionEnvironment
    
    * fix: Make Read logic consistent in DeclarativeWorkflowContext
  • fix: Update WorkflowHostAgent post Checkpointing implementation (#1498)
    WorkflowHostAgent was initially implemented before Checkpointing was available. This meant that in order to support resuming, the WorkflowHostAgent needed to keep the runs around, which broke it when stricter rules about concurrent sharing of workflows during execution were introduced.
    
    This change updates the hosting logic to release the underlying StreamingRun when the RunStreamingAsync or RunAsync are invoked, in favour of keeping the checkpointing information in the WorkflowThread to enable resumption.
  • .NET [WIP]: introduce Hosting extensions for Workflows (#1359)
    * skeleton
    
    * wip
    
    * rename + fix tests
    
    * implement workflow tests
    
    * fix comments
    
    * Update dotnet/src/Microsoft.Agents.AI.Hosting/HostApplicationBuilderWorkflowExtensions.cs
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * fixes
    
    * fix worfklow build logic
    
    * rollback + new overload on workflow builder
    
    * address PR comments
    
    * :)
    
    ---------
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
  • .NET: Mitigation for issue 1315 (#1432)
    * Adding mitigation for issue 1315, will follow up with long-term plan.
    
    * Apply suggestion from @lokitoth
    
    Co-authored-by: Jacob Alber <jaalber@microsoft.com>
    
    * Apply suggestion from @Copilot
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * Extracting common updates to a helper method.
    
    * Fixing spelling mistake.
    
    * Update per PR feedback.
    
    ---------
    
    Co-authored-by: Jacob Alber <jaalber@microsoft.com>
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
  • .NET Workflows - Update State Serialization for JSON Checkpointing (#1388)
    * Checkpoint
    
    * Checkpoint
    
    * Namespace
    
    * All ready
    
    * Namespace
    
    * Clean
    
    * Fix
  • .NET: fix: Make State Persistence APIs work better with PortableValue (#1367)
    * fix: Make State Persistence APIs work better with PortableValue
    
    * test: Temporarily disable checking for T=object in ReadStateAsync
  • Fix: Add missing ChatMessage[] handler to ChatProtocolExecutor (#1337)
    - Added ChatMessage[] handler to ConfigureRoutes to support array dispatch
    - Workflow runtime can dispatch messages as either List<ChatMessage> or ChatMessage[]
    - Added 10 comprehensive unit tests validating message routing behavior
    - Tests ensure functionality and protect against future refactoring (issue #782)
    - Updated code comments to reflect exact-type-matching requirement
    
    Fixes issue where raw WorkflowBuilder with AIAgent nodes failed to receive
    initial messages due to missing array type handler.
  • .NET: Add missing workflow properties to the workflow.definition tag (#1261)
    * add workflow edge data properties to the workflow.definition tag.
    
    * use workflow info classes for workflow.definition tag value
    
    * add unit test
    
    * fix test
    
    * fix formatting issue
    
    * remove flaky unit test
    
    * remove unused package dependency
  • .NET: [BREAKING] Propagate CancellationToken into Workflow Executors and message handlers (#1280)
    * feat: Propagate CancellationToken to Executors
    
    * Also adds cancellation propagation to `Executor`-accessible APIs
    * Adds registrators for cancellable handlers to `RouteBuilder`
    * [BREAKING]: Adds `CancellationToken` to `IMessageHandler.HandleAsync`
    
    * test: Re-enable Concurrent Orchestration test
    
    * refactor: Delete unused IInputCoordinator
    
    * refactor: Remove superfluous argument qualifications
  • .NET: Enable access to hosted AIAgents via OpenAI Responses (#947)
    * init
    
    * wip
    
    * wip wip wip
    
    * wip wip
    
    * open up API
    
    * enable for multiple agents
    
    * more wip
    
    * make frontend respond.
    
    * wip
    
    * not sure if proper setup
    
    * define type
    
    * cleanup
    
    * frontend streaming wip
    
    * use System.Net.ServerSentEvents
    
    * usings
    
    * reformat via ichatclient
    
    * merge main renaming + refactor
    
    * fix main merge + fix sample (a2a change)
    
    * fix sample
    
    * some rebase (not working yet)
    
    * make it at least build somehow
    
    * make non-stream work without internal types
    
    * Input without custom models
    
    * implement streaming
    
    * test frontend
    
    * enable alerts and fix
    
    * build fixes & rereview
    
    * Update dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI.Responses/Microsoft.Agents.AI.Hosting.OpenAI.Responses.csproj
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * Update dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI.Responses/Utils/ResponseItemJsonConverter.cs
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * fix agent discovery
    
    * rename
    
    * rename project into Microsoft.Agents.AI.Hosting.OpenAI (no responses in name)
    
    * PR address comments x1
    
    * address PR comments x2
    
    * correctly instantiate OpenAIResponse
    
    * address PR comments x3
    
    * reconfigure JSON serialization & handle AOT warnings
    
    * fix build
    
    * proper ref
    
    * check update differently
    
    * correct check
    
    * exclude dotnet format diagnostics for IL2026 and IL3050
    
    * space  :)
    
    * re-review
    
    * add comments
    
    * remove unnecessary using
    
    * always take last openai response item
    
    * set responseItem Id explicitly
    
    * add agent.name validation for uri
    
    * cleanup
    
    ---------
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    Co-authored-by: SergeyMenshykh <68852919+SergeyMenshykh@users.noreply.github.com>
  • [BREAKING] .NET: Workflow Off-Thread Execution Mode (#1233)
    * Updates to async run loop.
    
    * fix: Workflow Onwership can be release by nonowner
    
    * fix: Incorrect handling of blockOnPending in StreamingRun
    
    Depending on whether we are running in streaming on non-streaming mode, we may be using the StreamingRun in different ways. Unfortunately, the only place we can really know what is the actual state of execution is in the RunEventStream implementations.
    
    This resulted in blocking where blocking was unneeded and occasionally not-blocking when blocking was needed.
    
    The fix is to move the logic of handling this blocking into RunEventStream implementations.
    
    * fix: Fix cleanup on error and end run
    
    This ensures we clean up the background resources correctly.
    
    * fix: Ensure we let the run loop proceed when shutting down
    
    * fix: Add timeout for Input Waiting
    
    * fix: Make the samples properly clean up `Run`s and `StreamingRun`s
    
    * fix: Simplify Declarative Workflow Run disposal pattern
    
    * Also fixes missing .Disposal() in Integration tests
    
    ---------
    
    Co-authored-by: Ben Thomas <ben.thomas@microsoft.com>
  • feat: Add name and description support to workflows (#1183)
    Add optional name and description fields to workflows in both Python and .NET implementations, matching the existing agent API pattern.
    
    Python changes:
    - Add name/description parameters to WorkflowBuilder.__init__
    - Add name/description attributes to Workflow class
    - Include name/description in to_dict() serialization
    - Add WORKFLOW_NAME and WORKFLOW_DESCRIPTION OTEL attributes
    - Add tests in test_serialization.py and test_workflow_observability.py
    
    .NET changes:
    - Add Name and Description properties to Workflow and Workflow<T>
    - Add WithName() and WithDescription() fluent methods to WorkflowBuilder
    - Add WorkflowName and WorkflowDescription OTEL tags
    - Add test in WorkflowBuilderSmokeTests.cs
    
    This enables applications like DevUI to display human-readable workflow names (e.g., 'Data Processing Pipeline') instead of auto-generated UUIDs (e.g., 'Workflow 50fdd917').
    
    Fixes: #1181
  • .NET: Add support for Subworkflows and many threading fixes (#1066)
    * feat: Add support for Workflow-as-Executor
    
    * Fixes routing of 'object' compile-typed variables to properly take in type information
    * Fixes a concurrency issue in StepTracer
    
    * fix: Make Subworkflow ExternalRequests work properly
    
    * fix: Threading and Concurrency fixes; prep for OffThread Mode
    
    * refactor: Remove dead code around OffStreamRunEventStream
    
    Currently not used, and will be replaced with a rewrite when brought back, so having it in the change is not valuable.
    
    * ci: Work around issues with dotnet-format not properly analyzing the source
    
    * fix: Fix the logic of AsyncCoordinator and AsyncBarrier
    
    * Prevent individual wait cancellations from canceling the entire barrier
    * Propagate information about whether the wait was completed or cancelled, and whether any waiters were present when released
    
    * fix: Remove superfluous acces to .Keys in InProcStepTracer
    
    * refactor: Clean up AsyncCoordinator's use of AsyncBarrier
  • fix: Make CheckpointInfo constructor public (#1156)
    In order to be able to restore checkpoints (and even implement ICheckpointStore)
  • .NET: Workflow observability (#959)
    * Add basic Workflow telemetry
    
    * Add sample
    
    * Add source propagation for executor spans
    
    * Fix tests and address comments
    
    * Fix formatting
    
    * Fix declarative unit tests
    
    * Address comments
    
    * Remove Microsoft.Extensions.AI.Agents.EnableTelemetry
    
    * Formatting
    
    * Formatting
    
    * Formatting
    
    * fix solution
    
    * Address comments
    
    * Add workflow json definition for serialization
    
    * Formmating
    
    * Address comments
  • .NET: Fix some more static analysis diagnostics (#1025)
    * S1006
    
    * S2219
    
    * S3236
    
    * S3260
    
    * S1125
    
    * IDE0063
    
    * IDE0062
    
    * IDE0028
  • .NET: Update M.A.AI.OpenAI implementations (#1018)
    * Update M.A.AI.OpenAI implementations
    
    - There was only a ChatClient-based agent. Add a Responses one, too.
    - Fix the public extension methods to create OpenAI types even when not backed by the right OpenAI client.
    - Add reusable AgentRunResponse{Update} to ChatResponse{Update} conversion routines that are then used by the OpenAI agents and elsewhere
    
    * Address feedback
  • .Net: Visualizing dotnet workflows (#882)
    * Adding more test for workflow vizualization.
    
    * Improving README for sample.
    
    * More cleanup.
    
    * Removing rendering of workflow visualization and adding basic support for mermaid format.
    
    * Adding basic mermaid tests.
    
    * Improving sample. Switching to another branch.
    
    * About to merge from main.
    
    * Formatting.
    
    * More fromatting.
    
    * Removng uneeded call to ToUpper.
    
    * Adding README.
    
    * Moving samples under workflow to workflows.
    
    * Removing uneeded README for map-reduce sample.
  • .NET: Align or add NuGet package settings for all packages (#1013)
    * Align or add NuGet package settings for all packages
    
    * Update dotnet/src/Microsoft.Agents.AI.AzureAI/Microsoft.Agents.AI.AzureAI.csproj
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * Address code review feedback
    
    ---------
    
    Co-authored-by: Mark Wallace <markwallace@microsoft.com>
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
  • Python: .NET: [BREAKING] Remove Actor-based runtime (#977)
    * Remove Actor-based runtime
    
    * Fix formatting
    
    * Remove cosmos db vestigials
    
    ---------
    
    Co-authored-by: Eric Zhu <ekzhu@users.noreply.github.com>
    Co-authored-by: Stephen Toub <stoub@microsoft.com>
  • .NET: Clean up some CancellationToken usage (#996)
    * Clean up some CancellationToken usage
    
    * Unused usings
  • .NET: Clean up stale mentions of M.E.AI.Agents (#997)
    * Clean up stale mentions of M.E.AI.Agents
    
    * Unused usings
  • .NET: Rename workflows projects (#975)
    * Renaming Microsoft.Agent.Workflows to Microsoft.Agents.AI.Workflows
    
    * Removing local settings.
    
    * Removing remining old files from merge.