mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
* fix: Add session support for Handoff-hosted Agents In order to better support using `Workflows` hosted as `AIAgents` inside of Handoff workflows, we need to make proper use of AgentSession. This causes potential issues around checkpointing and making sure that we properly compute only the new incoming messages for each agent invocation. * fix: AgentSession checkpointing using AIAgent's Serialize/Deserialize methods We cannot rely on implicit serialization through `HandoffHostState` because we are missing type information. * fix: Thread safety issue in `MultiPartyConversation.AllMessages` * fix: Enable unwrapping of FunctionResultContent when ExternalRequest was wrapped into FunctionCallContent
57 lines
1.4 KiB
C#
57 lines
1.4 KiB
C#
// Copyright (c) Microsoft. All rights reserved.
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Microsoft.Extensions.AI;
|
|
|
|
namespace Microsoft.Agents.AI.Workflows.Specialized;
|
|
|
|
internal sealed class MultiPartyConversation
|
|
{
|
|
private readonly List<ChatMessage> _history = [];
|
|
private readonly object _mutex = new();
|
|
|
|
public List<ChatMessage> CloneAllMessages()
|
|
{
|
|
lock (this._mutex)
|
|
{
|
|
return this._history.ToList();
|
|
}
|
|
}
|
|
|
|
public (ChatMessage[], int) CollectNewMessages(int bookmark)
|
|
{
|
|
lock (this._mutex)
|
|
{
|
|
int count = this._history.Count - bookmark;
|
|
if (count < 0)
|
|
{
|
|
throw new InvalidOperationException($"Bookmark value too large: {bookmark} vs count={count}");
|
|
}
|
|
|
|
return (this._history.Skip(bookmark).ToArray(), this.CurrentBookmark);
|
|
}
|
|
}
|
|
|
|
private int CurrentBookmark => this._history.Count;
|
|
|
|
public int AddMessages(IEnumerable<ChatMessage> messages)
|
|
{
|
|
lock (this._mutex)
|
|
{
|
|
this._history.AddRange(messages);
|
|
return this.CurrentBookmark;
|
|
}
|
|
}
|
|
|
|
public int AddMessage(ChatMessage message)
|
|
{
|
|
lock (this._mutex)
|
|
{
|
|
this._history.Add(message);
|
|
return this.CurrentBookmark;
|
|
}
|
|
}
|
|
}
|