Commit Graph

148 Commits

  • .NET: Improve structured output for chat client agent (#1172)
    * improve structured output for chat client agent
    
    * add comment to the result property
    
    * remove code duplication and add tests
    
    * refactor the CreateAIAgent extension methods to return specific types, so consumers can avoid unnecessary downcasting.
    
    * fix type and remove unused using.
    
    * add ChatClientAgentRunResponse and move AgentRunResponse to the abstractions package to reuse later.
    
    * seal ChatClientAgentRunResponse
    
    * update xml comment
    
    * remove funcitons from sample
    
    * rename agent for streaming
  • .NET: Add a CreateAIAgent extension method to IChatClient (#1223)
    * Add a CreateAIAgent extension method to IChatClient
    
    * Fix unit tests
    
    * Add tests with null chat clients to ensure appropriate failure
    
    * Switch to similar constructor
    
    * Add ChatClientBuilder BuildAgent extensions
    
    * Address code review comments.
  • .NET: Fix bug where ChatClientAgent throws when providing a ChatMessageStore with a service that requries service storage (#1229)
    * Fix bug where ChatClientAgent throws when providing a ChatMessageStore with a service that requries service storage
    
    * Update dotnet/tests/Microsoft.Agents.AI.UnitTests/ChatClient/ChatClientAgentTests.cs
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot <175728472+Copilot@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>
  • .NET Workflows - Fix code generation cases (#1242)
    * Updated
    
    * Passing
    
    * Ready
    
    * Update dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/Workflows/ConversationMessages.yaml
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * Comment
    
    * Code analysis
    
    * Unit-tests/provider signature
    
    * Comment
    
    * Consistent
    
    * Checkpoint
    
    * Fixed
    
    * Revert
    
    * Test display name
    
    * Enable tests
    
    ---------
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
  • .NET Workflows - Fix converation behaviors for declarative worfklows (#1237)
    * Updated
    
    * Passing
    
    * Ready
    
    * Update dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/Workflows/ConversationMessages.yaml
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * Comment
    
    * Code analysis
    
    * Unit-tests/provider signature
    
    * Comment
    
    * Consistent
    
    ---------
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
  • test: Make ChatClientAgent no-message test less flaky (#1196)
    Capitalize instruction and relax assertion to accept any non-empty response instead of requiring exact text match. Fixes flaky test failures with reasoning models.
  • .NET: Fix A2A conversion routines to ignore unknown content types instead of throwing exceptions (#1154)
    * Initial plan
    
    * Update A2A conversion routines to ignore unknown content types
    
    Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com>
    
    * Fix dotnet format
    
    ---------
    
    Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
    Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com>
    Co-authored-by: Stephen Toub <stoub@microsoft.com>
    Co-authored-by: SergeyMenshykh <68852919+SergeyMenshykh@users.noreply.github.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
  • .NET Workflows - Enable "human in the loop" case for declarative integration tests (#1171)
    * Enabled
    
    * Rollback visitor
    
    * Update dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/Framework/WorkflowTest.cs
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
  • .NET: NET Workflows - Skip conversation initialization when identifier is provided (#1087)
    * Fix
    
    * Code-gen case
    
    * Tests
    
    * Autosend logic
    
    * Build fix
    
    * Namespace
    
    * Validation enhancement
  • .NET: Move the AsAIAgent extension methods to the correct class (#1106)
    * Move the AsAIAgent extension methods to the correct class
    
    * Fix format issue
    
    * Disable unit test, see issue #1109
    
    ---------
    
    Co-authored-by: Mark Wallace <markwallace@microsoft.com>
  • Tweak AgentAbstractionsJsonUtilities to better match AIJsonUtilities (#1094)
    Functional change includes setting the encoder used by the options and employing JsonStringEnumConverter.
  • .NET Workflows - Re-enable Declarative Integration Tests (#1080)
    * Investigate
    
    * Next
    
    * Update initialization
    
    * Should be ok
    
    * Agent definition dx
    
    * Link agent definitions
    
    * Link agent definitions
    
    * Path resolution #2
    
    * Fix path resolution
    
    * Another pass
    
    * Another
    
    * Better
    
    * One more
    
    * Whoopsie
    
    * Update dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests/Framework/AgentFactory.cs
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * Namespace
    
    * Cleanup
    
    * Temp config for pipeline
    
    * Another temp workaround
    
    * Test config: Bing Grounding Tool
    
    * Update template
    
    * Next pass
    
    * Ok now
    
    * Cleanup
    
    * Test note
    
    ---------
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
  • .NET: Re-enable ImplicitUsings in samples and clean up NoWarns (#1060)
    * Re-enable ImplicitUsings in samples and clean up NoWarns
    
    * Fix dotnet format
    
    * More dotnet format
    
    * More dotnet format
    
    ---------
    
    Co-authored-by: Chris <66376200+crickman@users.noreply.github.com>
  • Remove System.Linq.Async dependency from src assemblies (#1069)
    We shouldn't be shipping any more dependencies on this package, as it's becoming legacy, replaced by System.Linq.AsyncEnumerable.
    
    We'll eventually want to replace it with System.Linq.AsyncEnumerable in all tests/samples, too, but that's hard to do until SK updates to use S.L.AsyncEnumerable once its 10.0.0 version is released. I did remove the package reference from tests/samples where it's not needed.
  • .NET Workflows -Fix Declarative Workflow Tests (#1065)
    * Fixed
    
    * Restore generated workflow
    
    * Project
    
    * Fine tune
    
    * Update baseline
    
    * Adjust test-case
  • .NET: Use copilot to improve XML docs for M.Agents.AI{.Abstractions} (#1042)
    * Use copilot to improve XML docs for M.Agents.AI{.Abstractions}
    
    Asked copilot to help improve some of the docs, then I reviewed them.
    
    I also cleaned up a few things along the way, like a couple of extension method types that should be combined.
    
    * Update dotnet/src/Microsoft.Agents.AI.Abstractions/InMemoryChatMessageStore.cs
    
    ---------
    
    Co-authored-by: Mark Wallace <127216156+markwallace-microsoft@users.noreply.github.com>
  • .Net: Bugfix FunctionInvocation Middleware not working when no ChatOptions provided (#1030)
    * Bugfix FunctionInvocation Middleware
    
    * Throw when specialized RunOptions are used for Function Invocation middleware + UT
  • .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 Workflows - Code Generation for Declarative Workflow (#655)
    * Notes
    
    * Readme typo
    
    * Update readme
    
    * Checkpoint
    
    * Namespace fix
    
    * Fix ID and namespace
    
    * Checkpoint
    
    * Verified
    
    * Comments
    
    * Isolate "Kit"
    
    * Address note: static
    
    * Checkpoint
    
    * Checkpoint "Executor<>"
    
    * Prefix and internal executors
    
    * Test passing
    
    * Cleanup
    
    * Rename "session" concept
    
    * Revert workflow debug
    
    * Fix template base / pragma
    
    * Tune system scope
    
    * Update dotnet/src/Microsoft.Agents.Workflows.Declarative/CodeGen/ResetVariableTemplate.tt
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * Fix empty template
    
    * Add validation for codegen ut
    
    * Fix test
    
    * Codegen baselines
    
    * Constant
    
    * Prep
    
    * Mark TODO
    
    * Fix
    
    * Namespace
    
    * One more
    
    * Update baselines
    
    * Checkpoint
    
    * Checkpoint
    
    * Checkpoint
    
    * fme
    
    * Checkpoint
    
    * Another step
    
    * Fixed up
    
    * Roslyn
    
    * Fix
    
    * More cleaning
    
    * Async
    
    * Fix
    
    * Enum checkpoint
    
    * Refine enum
    
    * Checkpoint
    
    * Sync templates
    
    * Checkpoint
    
    * Streamline
    
    * Pre-merge analyzer updates
    
    * Foreach
    
    * Placeholders
    
    * Checkpoint
    
    * Clean-up
    
    * Sample path resolution
    
    * Checkpoint
    
    * Checkpoint - Workflow Code Building
    
    * Validation
    
    * Test cleanup
    
    * Update test basline
    
    * Update test baseline
    
    * Fix DefaultTemplate usage
    
    * Validation checkpoint
    
    * Fix break/continue edges
    
    * Verify generated code builds
    
    * Fix merge
    
    * Fix build validation
    
    * Update template handling of literal string values.
    
    * Test for metadata case
    
    * Update baselines
    
    * Fix merge
    
    * Checkpoint
    
    * Checkpoint: Conditions
    
    * Invoke Agent Checkpoint
    
    * Namespace
    
    * Address code-analysis issues
    
    * Cross platform test support
    
    * Invoke agent checkpoint
    
    * Clean sample
    
    * Checkpoint: Agent Invoke Input Messages
    
    * Checkpoint - Passing
    
    * Checkpoint
    
    * Regenerate all template + port conversation fix
    
    * Checkpoint: Tests good
    
    * Fix test for unbuntu
    
    * Fix build command
    
    * Checkpoint - E2E
    
    * Test fix
    
    * Update integration tests
    
    * Fix merge
    
    * Update
    
    * Checkpoint !!!
    
    * Baby steps
    
    * Checkpoint
    
    * Checkpoint E2E !!!
    
    * So close...
    
    * Integrate test validation
    
    * Fix merge
    
    * Rebase tests
    
    * Namespace
    
    * Namespace
    
    * Test cleanup
    
    * Sample comment cleanup
    
    * Checkpoint: List conversion
    
    * Include these
    
    * CheckPoint: ParseValue
    
    * Namespace
    
    * Fix sampel
    
    * More namspace
    
    * Comments
    
    * Test updates
    
    * Test fix
    
    * Better build
    
    * Shared code
    
    * Sort solution
    
    * Fix build
    
    * Prune solution
    
    * One more
    
    * Conversion matrix
    
    * Final table conversion
    
    ---------
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
  • .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.
  • 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: Update OpenTelemetryAgent to latest spec (#967)
    * Update OpenTelemetryAgent to latest spec
    
    It was stale. Rather than try to keep it up-to-date manually, I've changed it to piggy back on OpenTelemetryChatClient, so that it inherits everything OpenTelemetryChatClient does and then augments it just with agent-specific tags.
    
    * Address feedback / merge
  • .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
  • Update M.E.AI and MCP versions (#992)
    But not yet M.E.AI.OpenAI, which depends on the latest OpenAI, which conflicts with the latest Azure.AI.OpenAI.
  • .NET: Rename workflows projects (#975)
    * Renaming Microsoft.Agent.Workflows to Microsoft.Agents.AI.Workflows
    
    * Removing local settings.
    
    * Removing remining old files from merge.
  • .NET: Add Agent Filtering Middleware (#478)
    * WIP
    
    * Wip
    
    * Updated ADR
    
    * Updated ADR
    
    * Update files
    
    * Address copilot comments
    
    * Update filters from Task<T> to Task only
    
    * Project endpoint
    
    * Add agent ctor filter
    
    * Other Agent Framework investigation
    
    * Remove SK Java, no support
    
    * Update LlamaIndex info
    
    * Removing unrelated files
    
    * Implementation with specialization
    
    * Remove the specialization option as extra unecessary complexity
    
    * Move middleware responsibility to a decorator
    
    * Update readme
    
    * Function invocation wip
    
    * Add Agent Builder
    
    * Adding comparison samples
    
    * Reorganize Samples and Processor vs Decorator
    
    * Remove merge files
    
    * Address formating warnigs
    
    * Update ADR
    
    * Step13 README's update
    
    * Address PR feedback
    
    * Address PR feedback
    
    * Remove configure await from ADR samples
    
    * Update variables
    
    * Address feedback
    
    * Address Agent level tool invocation with Options.ToolsTransformer strategy
    
    * Removing the Processor approach
    
    * Proposal design for Middleware in CreateAIAgent extensions
    
    * Examples clean up and consolitation
    
    * Update middlewares to work with ApprovalREquiredFunction
    
    * Clean-up sample
    
    * Update override function call sample
    
    * Drop configuration from the extensions, looks overkill
    
    * Builder interface ..
    
    * Revert IAIBuilder interface approach
    
    * Cleanup sample
    
    * Adding unit tests
    
    * Fix UT
    
    * Cleanup sample
    
    * Remove unneeded dependency
    
    * Address PR comment + Readme Samples
    
    * Add missing comments for Program.cs Middleware
    
    * Address mor PR comments + add client factory for OpenAI extensions
    
    * Add OpenAI UnitTests for extensions
    
    * Add AzureAI PersistentChatClient UT
    
    * Addess feedback
    
    * Add function invoking UT
    
    * Add builder extension UT
    
    * Address feedback + Rearange abstractions + UT fixes
    
    * Drop context based middleware for full decorating impl
    
    * Update unit tests
    
    * Update UT coverage
    
    * Removing Middelware namespace
    
    * Add missing UT
    
    * Remove internal ToolTransformation Property
    
    * Adjust xmldoc
    
    * Remove transient file
    
    * Address merge conflict
    
    * Add xmldoc remark for clarity
    
    * Address comment
    
    * Address feedback
    
    * Update UT
    
    ---------
    
    Co-authored-by: Chris <66376200+crickman@users.noreply.github.com>
  • .NET Workflows - Declarative Workflow Integration Tests (#956)
    * Checkpoint / 100% Pass
    
    * Checkpoint: ActionExecutorResult
    
    * Update dotnet/tests/Microsoft.Agents.Workflows.Declarative.IntegrationTests/Testcases/Marketing.json
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * Namespace
    
    * Sync updates
    
    ---------
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
  • .NET: Make serialize methods sync and rename one to match others. (#946)
    * Make serialize methods sync and rename one to match others.
    
    * Remove unnecessary async postfixes.
    
    * Remove nullability of ChatMessageStore.Serialize return type, since the default JsonElement already represents an undefined json element.
    
    * Fix unit test
  • .NET: Change Runtime namespaces to Microsoft.Agents.AI.Runtime (#957)
    * Rename MEAI.Runtime to MAAI.Runtime.
    
    * Missed.
  • .NET: Change Hosting namespaces to Microsoft.Agents.AI.Hosting (#953)
    * Rename MEAI.Hosting to MAAI.Hosting.
    
    * dotnet format.
  • .NET Workflows - Introduce support for Local variable scope (#944)
    * Prepare for update
    
    * Checkpoint
    
    * Comments
    
    * All fixed
    
    * Mixed casre test added
    
    * Rollback nuget
    
    * Remove redundant restorable
    
    * Namespace
  • feat: Solidify Concurrency Model for Inproc Workflows (#925)
    * Disallow execution of multiple workflows at once
    * Define notion of executor Reset() to allow reuse of workflows with shared executor instances
    * Switch to delivering all messages to a single executor sequentially, with executors running in parallel
  • Rename AI Agent packages to use Microsoft.Agents.AI (#913)
    * Rename AI Agent packages to use Microsoft.Agents.AI
    
    * Fix for build
    
    * Fix formatting
    
    * Fix formatting
    
    * Ignore in VSTHRD200 in migration samples
    
    * Ignore in VSTHRD200 in migration samples
    
    * Add some missing projects and run format
    
    * Fix build errors
    
    * Address code review feedback
    
    * Fix merge issues
    
    ---------
    
    Co-authored-by: Mark Wallace <markwallace@microsoft.com>
  • .NET Workflows - Declarative update for AzureAgentProvider usage (#907)
    * Updated
    
    * Update dotnet/src/Microsoft.Agents.Workflows.Declarative/Extensions/IWorkflowContextExtensions.cs
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * Constant / override
    
    * Namespace
    
    * Protect against race
    
    * Simplify collection usage
    
    * Rollback name resolution
    
    * One more rollback
    
    ---------
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
  • .NET: Update Workflow Input/Output Redesign (#881)
    * feat: Make Executor id field mandatory
    
    When checkpointing is involved, it is critical to keep executor ids consistent between runs, even when recreating a new object tree for the workflow.
    
    The default id-setting mechanism generated a guid for part of the id, making it not work when restoring from a checkpoint.
    
    This change prevents this situation from arising.
    
    * feat: Enable running untyped Workflows
    
    With the change to enable delay-instantiation of executors and support for async Executor factory methods, we must instantiate the starting executor to know what are the valid input types for the workflow.
    
    To avoid forcing instantiation every time, and to better support workflows with multiple input types, we enable support for build and interacting with the base Workflow type without type annotations, and remove the requirement to know a valid input type when initiating a run.
    
    * feat: Support Output from any executor and multiple outputs.
  • .NET: Add AgentWorkflowBuilder group chat (#861)
    * Add AgentWorkflowBuilder group chat
    
    And fix a variety of issues along the way:
    - Use DateTime{Offset}.UtcNow rather than Now
    - AIAgentHostExecutor shouldn't be publishing empty messages
    - Sequential workflows should be flowing all history and not just the output from the previous agent as the input into the next agent
    - Renamed some of the new agent workflow methods... still not super happy with the shape, though
    - Simplified handoffs builder, e.g. using a hashset with a custom comparer instead of a dictionary
    - Improved multi-service use by trying to change assistant->user role for messages created by other agents
    - Changed MessageMerger to rely on M.E.AI's coalescing more and to avoid empty contents / text
    - Ensured that messages from ChatClientAgent include MessageId and CreatedAt timestamps
    - Avoided including instructions for agents in a handoff workflow that don't have any handoffs
    - Removed the unnecessary end function in handoffs
    - Improved naming of executors to include agent name for debuggability
    - Use "N" formatting with Guid.ToString everywhere, to avoid the unnecessary extra dash character which is also not valid in various places (like function tool names)
    - Replace `params T[]` with `params IEnumerable<T>` to make public APIs more flexible in what they consume
    
    * Address feedback
    
    - Fix unintentional provider change in sample