mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
* Refactor ChatMessageStore methods to be similar to AIContextProvider * Fix file encoding * Ensure that AIContextProvider messages area also persisted. * Update formatting and seal context classes * Improve formatting * Remove optional messages from constructor and add unit test * Add ChatMessageStore filtering via a decorator * Update sample and cosmos message store to store AIContextProvider messages in right order. Fix unit tests. * Update Workflowmessage store to use aicontext provider messages. * Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: SergeyMenshykh <68852919+SergeyMenshykh@users.noreply.github.com> * Improve xml docs messaging * Address code review comments. * Also notify message store on failure --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: SergeyMenshykh <68852919+SergeyMenshykh@users.noreply.github.com>
51 lines
2.3 KiB
C#
51 lines
2.3 KiB
C#
// Copyright (c) Microsoft. All rights reserved.
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using Microsoft.Extensions.AI;
|
|
|
|
namespace Microsoft.Agents.AI;
|
|
|
|
/// <summary>
|
|
/// Contains extension methods for the <see cref="ChatMessageStore"/> class.
|
|
/// </summary>
|
|
public static class ChatMessageStoreExtensions
|
|
{
|
|
/// <summary>
|
|
/// Adds message filtering to an existing store, so that messages passed to the store and messages produced by the store
|
|
/// can be filtered, updated or replaced.
|
|
/// </summary>
|
|
/// <param name="store">The store to add the message filter to.</param>
|
|
/// <param name="invokingMessagesFilter">An optional filter function to apply to messages produced by the store. If null, no filter is applied at this
|
|
/// stage.</param>
|
|
/// <param name="invokedMessagesFilter">An optional filter function to apply to the invoked context messages before they are passed to the store. If null, no
|
|
/// filter is applied at this stage.</param>
|
|
/// <returns>The <see cref="ChatMessageStore"/> with filtering applied.</returns>
|
|
public static ChatMessageStore WithMessageFilters(
|
|
this ChatMessageStore store,
|
|
Func<IEnumerable<ChatMessage>, IEnumerable<ChatMessage>>? invokingMessagesFilter = null,
|
|
Func<ChatMessageStore.InvokedContext, ChatMessageStore.InvokedContext>? invokedMessagesFilter = null)
|
|
{
|
|
return new ChatMessageStoreMessageFilter(
|
|
innerChatMessageStore: store,
|
|
invokingMessagesFilter: invokingMessagesFilter,
|
|
invokedMessagesFilter: invokedMessagesFilter);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Decorates the provided chat message store so that it does not store messages produced by any <see cref="AIContextProvider"/>.
|
|
/// </summary>
|
|
/// <param name="store">The store to add the message filter to.</param>
|
|
/// <returns>A new <see cref="ChatMessageStore"/> instance that filters out <see cref="AIContextProvider"/> messages so they do not get stored.</returns>
|
|
public static ChatMessageStore WithAIContextProviderMessageRemoval(this ChatMessageStore store)
|
|
{
|
|
return new ChatMessageStoreMessageFilter(
|
|
innerChatMessageStore: store,
|
|
invokedMessagesFilter: (ctx) =>
|
|
{
|
|
ctx.AIContextProviderMessages = null;
|
|
return ctx;
|
|
});
|
|
}
|
|
}
|