You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kev/Drawer/AI/Models/Store/ConversationEntry.cs

61 lines
1.9 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Microsoft.SemanticKernel.ChatCompletion;
namespace AI.Models.Store
{
/// <summary>
/// 会话存储条目的抽象基类。每条为 TextEntry角色+文本)或 SpecialEntry类型+YAML 载荷)。
/// 存储由 ChatSession 持有,作为 UI 与 Prompt 构建的唯一事实来源。
/// </summary>
public abstract class ConversationEntry
{
/// <summary>
/// 条目种类Text 或 Special用于序列化/反序列化与类型判别。
/// </summary>
public abstract string Kind { get; }
}
/// <summary>
/// 纯文本消息条目角色User/Assistant/System+ 文本内容。
/// </summary>
public sealed class TextConversationEntry : ConversationEntry
{
public override string Kind => "Text";
/// <summary>角色</summary>
public AuthorRole Role { get; set; }
/// <summary>文本内容</summary>
public string Content { get; set; } = string.Empty;
public TextConversationEntry() { }
public TextConversationEntry(AuthorRole role, string content)
{
Role = role;
Content = content ?? string.Empty;
}
}
/// <summary>
/// 特殊消息条目类型Form/ParameterSet/Table/ColumnMatch/WorkflowStatus+ YAML 载荷。
/// </summary>
public sealed class SpecialConversationEntry : ConversationEntry
{
public override string Kind => "Special";
/// <summary>特殊消息类型名</summary>
public string Type { get; set; } = string.Empty;
/// <summary>YAML 载荷(与 ISpecialMessage 可序列化/反序列化对应)</summary>
public string Payload { get; set; } = string.Empty;
public SpecialConversationEntry() { }
public SpecialConversationEntry(string type, string payload)
{
Type = type ?? string.Empty;
Payload = payload ?? string.Empty;
}
}
}