2023-10-27 20:36:26 +00:00
|
|
|
using BotSharp.Abstraction.Functions.Models;
|
2023-11-24 23:26:33 +00:00
|
|
|
using BotSharp.Abstraction.Messaging;
|
2023-11-08 22:27:42 +00:00
|
|
|
using BotSharp.Abstraction.Messaging.Models.RichContent;
|
2023-10-27 15:18:48 +00:00
|
|
|
|
2023-06-27 18:31:13 +00:00
|
|
|
namespace BotSharp.Abstraction.Conversations.Models;
|
|
|
|
|
|
2023-10-27 15:18:48 +00:00
|
|
|
public class RoleDialogModel : ITrackableMessage
|
2023-06-27 18:31:13 +00:00
|
|
|
{
|
2023-10-30 16:48:18 +00:00
|
|
|
/// <summary>
|
|
|
|
|
/// If Role is Assistant, it is same as user's message id.
|
|
|
|
|
/// </summary>
|
2023-10-27 15:18:48 +00:00
|
|
|
public string MessageId { get; set; }
|
|
|
|
|
|
2023-06-27 18:31:13 +00:00
|
|
|
/// <summary>
|
2023-07-27 15:07:39 +00:00
|
|
|
/// user, system, assistant, function
|
2023-06-27 18:31:13 +00:00
|
|
|
/// </summary>
|
|
|
|
|
public string Role { get; set; }
|
2023-11-14 14:13:54 +00:00
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// User id when Role is User
|
|
|
|
|
/// </summary>
|
|
|
|
|
public string SenderId { get; set; }
|
|
|
|
|
|
|
|
|
|
[JsonPropertyName("created_at")]
|
2023-08-07 20:17:54 +00:00
|
|
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
2023-11-14 14:13:54 +00:00
|
|
|
|
2023-07-21 20:15:09 +00:00
|
|
|
public string Content { get; set; }
|
2023-10-18 11:58:36 +00:00
|
|
|
|
2024-04-18 21:34:18 +00:00
|
|
|
public string? SecondaryContent { get; set; }
|
|
|
|
|
|
2024-04-30 21:25:58 +00:00
|
|
|
/// <summary>
|
|
|
|
|
/// Indicator message used to provide UI feedback for function execution
|
|
|
|
|
/// </summary>
|
|
|
|
|
public string? Indication { get; set; }
|
|
|
|
|
|
2023-10-18 11:58:36 +00:00
|
|
|
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
|
2023-08-17 04:04:23 +00:00
|
|
|
public string CurrentAgentId { get; set; }
|
2023-06-27 18:31:13 +00:00
|
|
|
|
2023-07-27 15:07:39 +00:00
|
|
|
/// <summary>
|
|
|
|
|
/// Function name if LLM response function call
|
|
|
|
|
/// </summary>
|
2023-10-18 11:58:36 +00:00
|
|
|
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
|
2023-07-28 04:27:12 +00:00
|
|
|
public string? FunctionName { get; set; }
|
2023-07-27 21:56:57 +00:00
|
|
|
|
2024-04-06 23:33:49 +00:00
|
|
|
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
|
|
|
|
|
public string? PostbackFunctionName { get; set; }
|
|
|
|
|
|
2023-10-18 11:58:36 +00:00
|
|
|
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
|
2023-08-17 04:04:23 +00:00
|
|
|
public string? FunctionArgs { get; set; }
|
|
|
|
|
|
2023-08-20 20:20:16 +00:00
|
|
|
/// <summary>
|
|
|
|
|
/// Function execution structured data, this data won't pass to LLM.
|
|
|
|
|
/// It's ideal to render in rich content in UI.
|
|
|
|
|
/// </summary>
|
2023-10-18 11:58:36 +00:00
|
|
|
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
|
2023-10-23 00:31:49 +00:00
|
|
|
public object Data { get; set; }
|
2024-03-08 13:19:13 +00:00
|
|
|
|
|
|
|
|
[JsonIgnore(Condition = JsonIgnoreCondition.Always)]
|
|
|
|
|
public string ImageUrl { get; set; }
|
|
|
|
|
|
2024-03-27 16:19:13 +00:00
|
|
|
/// <summary>
|
|
|
|
|
/// Remember to set Message.Content as well
|
|
|
|
|
/// </summary>
|
2023-10-27 19:05:18 +00:00
|
|
|
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
|
2023-11-24 23:26:33 +00:00
|
|
|
public RichContent<IRichMessage>? RichContent { get; set; }
|
2023-08-20 20:20:16 +00:00
|
|
|
|
2024-04-18 21:34:18 +00:00
|
|
|
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
|
|
|
|
|
public RichContent<IRichMessage>? SecondaryRichContent { get; set; }
|
|
|
|
|
|
2023-08-31 02:09:38 +00:00
|
|
|
/// <summary>
|
|
|
|
|
/// Stop conversation completion
|
|
|
|
|
/// </summary>
|
2023-10-18 11:58:36 +00:00
|
|
|
[JsonIgnore(Condition = JsonIgnoreCondition.Always)]
|
2023-08-31 02:09:38 +00:00
|
|
|
public bool StopCompletion { get; set; }
|
|
|
|
|
|
2023-10-27 20:36:26 +00:00
|
|
|
public FunctionCallFromLlm Instruction { get; set; }
|
|
|
|
|
|
2024-05-03 19:57:44 +00:00
|
|
|
public List<BotSharpFile> Files { get; set; } = new List<BotSharpFile>();
|
|
|
|
|
|
2023-10-27 15:18:48 +00:00
|
|
|
private RoleDialogModel()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2023-07-21 01:55:40 +00:00
|
|
|
public RoleDialogModel(string role, string text)
|
|
|
|
|
{
|
|
|
|
|
Role = role;
|
2023-07-21 20:15:09 +00:00
|
|
|
Content = text;
|
2023-10-27 15:18:48 +00:00
|
|
|
MessageId = Guid.NewGuid().ToString();
|
2023-07-21 01:55:40 +00:00
|
|
|
}
|
|
|
|
|
|
2023-06-27 18:31:13 +00:00
|
|
|
public override string ToString()
|
|
|
|
|
{
|
2023-08-18 04:27:07 +00:00
|
|
|
if (Role == AgentRole.Function)
|
|
|
|
|
{
|
2023-10-23 00:31:49 +00:00
|
|
|
return $"{Role}: {FunctionName}({FunctionArgs}) => {Content}";
|
2023-08-18 04:27:07 +00:00
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return $"{Role}: {Content}";
|
|
|
|
|
}
|
2023-06-27 18:31:13 +00:00
|
|
|
}
|
2023-10-30 20:06:45 +00:00
|
|
|
|
|
|
|
|
public static RoleDialogModel From(RoleDialogModel source,
|
|
|
|
|
string? role = null,
|
|
|
|
|
string? content = null)
|
|
|
|
|
{
|
|
|
|
|
return new RoleDialogModel(role ?? source.Role, content ?? source.Content)
|
|
|
|
|
{
|
|
|
|
|
CurrentAgentId = source.CurrentAgentId,
|
|
|
|
|
MessageId = source.MessageId,
|
|
|
|
|
FunctionArgs = source.FunctionArgs,
|
|
|
|
|
FunctionName = source.FunctionName,
|
2024-04-06 23:33:49 +00:00
|
|
|
PostbackFunctionName = source.PostbackFunctionName,
|
2023-10-30 20:06:45 +00:00
|
|
|
RichContent = source.RichContent,
|
|
|
|
|
StopCompletion = source.StopCompletion,
|
|
|
|
|
Instruction = source.Instruction,
|
|
|
|
|
Data = source.Data
|
|
|
|
|
};
|
|
|
|
|
}
|
2023-06-27 18:31:13 +00:00
|
|
|
}
|