diff --git a/src/Infrastructure/BotSharp.Abstraction/Conversations/Models/Conversation.cs b/src/Infrastructure/BotSharp.Abstraction/Conversations/Models/Conversation.cs
index c99a819b1..5613c088f 100644
--- a/src/Infrastructure/BotSharp.Abstraction/Conversations/Models/Conversation.cs
+++ b/src/Infrastructure/BotSharp.Abstraction/Conversations/Models/Conversation.cs
@@ -37,6 +37,7 @@ public class DialogElement
public string? SecondaryContent { get; set; }
public string? RichContent { get; set; }
public string? SecondaryRichContent { get; set; }
+ public string? Payload { get; set; }
public DialogElement()
{
@@ -44,13 +45,14 @@ public DialogElement()
}
public DialogElement(DialogMetaData meta, string content, string? richContent = null,
- string? secondaryContent = null, string? secondaryRichContent = null)
+ string? secondaryContent = null, string? secondaryRichContent = null, string? payload = null)
{
MetaData = meta;
Content = content;
RichContent = richContent;
SecondaryContent = secondaryContent;
SecondaryRichContent = secondaryRichContent;
+ Payload = payload;
}
public override string ToString()
diff --git a/src/Infrastructure/BotSharp.Abstraction/Conversations/Models/RoleDialogModel.cs b/src/Infrastructure/BotSharp.Abstraction/Conversations/Models/RoleDialogModel.cs
index c3a6403af..e019eae44 100644
--- a/src/Infrastructure/BotSharp.Abstraction/Conversations/Models/RoleDialogModel.cs
+++ b/src/Infrastructure/BotSharp.Abstraction/Conversations/Models/RoleDialogModel.cs
@@ -28,6 +28,10 @@ public class RoleDialogModel : ITrackableMessage
public string? SecondaryContent { get; set; }
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ [JsonPropertyName("payload")]
+ public string? Payload { get; set; }
+
///
/// Indicator message used to provide UI feedback for function execution
///
diff --git a/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationStorage.cs b/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationStorage.cs
index 4ab447b8b..9bb8f103f 100644
--- a/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationStorage.cs
+++ b/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationStorage.cs
@@ -50,7 +50,13 @@ public void Append(string conversationId, RoleDialogModel dialog)
{
return;
}
- dialogElements.Add(new DialogElement(meta, content, dialog.SecondaryContent));
+ dialogElements.Add(new DialogElement
+ {
+ MetaData = meta,
+ Content = dialog.Content,
+ SecondaryContent = dialog.SecondaryContent,
+ Payload = dialog.Payload
+ });
}
else
{
@@ -72,7 +78,15 @@ public void Append(string conversationId, RoleDialogModel dialog)
var richContent = dialog.RichContent != null ? JsonSerializer.Serialize(dialog.RichContent, _options.JsonSerializerOptions) : null;
var secondaryRichContent = dialog.SecondaryRichContent != null ? JsonSerializer.Serialize(dialog.SecondaryRichContent, _options.JsonSerializerOptions) : null;
- dialogElements.Add(new DialogElement(meta, content, richContent, dialog.SecondaryContent, secondaryRichContent));
+ dialogElements.Add(new DialogElement
+ {
+ MetaData = meta,
+ Content = dialog.Content,
+ SecondaryContent = dialog.SecondaryContent,
+ RichContent = richContent,
+ SecondaryRichContent = secondaryRichContent,
+ Payload = dialog.Payload
+ });
}
db.AppendConversationDialogs(conversationId, dialogElements);
@@ -90,6 +104,7 @@ public List GetDialogs(string conversationId)
var meta = dialog.MetaData;
var content = dialog.Content;
var secondaryContent = dialog.SecondaryContent;
+ var payload = dialog.Payload;
var role = meta.Role;
var currentAgentId = meta.AgentId;
var messageId = meta.MessageId;
@@ -111,6 +126,7 @@ public List GetDialogs(string conversationId)
RichContent = richContent,
SecondaryContent = secondaryContent,
SecondaryRichContent = secondaryRichContent,
+ Payload = payload
};
results.Add(record);
diff --git a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs
index d9400e478..6708f49a8 100644
--- a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs
+++ b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs
@@ -529,6 +529,7 @@ private List CollectDialogElements(string dialogDir)
var trimmedContent = content.Substring(4);
var secondaryContent = rawDialogs[i + 4];
var trimmedSecondaryContent = string.IsNullOrEmpty(secondaryContent) ? null : secondaryContent.Substring(4);
+ var payload = blocks.Count() > 6 ? blocks[6] : null;
var meta = new DialogMetaData
{
@@ -540,9 +541,17 @@ private List CollectDialogElements(string dialogDir)
CreateTime = DateTime.Parse(blocks[0])
};
- var richContent = DecodeRichContent(rawDialogs[i + 1]);
- var secondaryRichContent = DecodeRichContent(rawDialogs[i + 3]);
- dialogs.Add(new DialogElement(meta, trimmedContent, richContent, trimmedSecondaryContent, secondaryRichContent));
+ var richContent = DecodeText(rawDialogs[i + 1]);
+ var secondaryRichContent = DecodeText(rawDialogs[i + 3]);
+ dialogs.Add(new DialogElement
+ {
+ MetaData = meta,
+ Content = trimmedContent,
+ SecondaryContent = trimmedSecondaryContent,
+ RichContent = richContent,
+ SecondaryRichContent = secondaryRichContent,
+ Payload = payload
+ });
}
}
return dialogs;
@@ -557,9 +566,10 @@ private List ParseDialogElements(List dialogs)
{
var meta = element.MetaData;
var createTime = meta.CreateTime.ToString("MM/dd/yyyy hh:mm:ss.ffffff tt", CultureInfo.InvariantCulture);
- var encodedRichContent = EncodeRichContent(element.RichContent);
- var encodedSecondaryRichContent = EncodeRichContent(element.SecondaryRichContent);
- var metaStr = $"{createTime}|{meta.Role}|{meta.AgentId}|{meta.MessageId}|{meta.SenderId}|{meta.FunctionName}";
+ var encodedRichContent = EncodeText(element.RichContent);
+ var encodedSecondaryRichContent = EncodeText(element.SecondaryRichContent);
+ var payload = element.Payload;
+ var metaStr = $"{createTime}|{meta.Role}|{meta.AgentId}|{meta.MessageId}|{meta.SenderId}|{meta.FunctionName}|{payload}";
dialogTexts.Add(metaStr);
dialogTexts.Add(encodedRichContent);
@@ -715,20 +725,20 @@ private bool SaveTruncatedBreakpoints(string breakpointDir, List> GetDialogs([FromRoute] string
CreatedAt = message.CreatedAt,
Text = !string.IsNullOrEmpty(message.SecondaryContent) ? message.SecondaryContent : message.Content,
Data = message.Data,
- Sender = UserViewModel.FromUser(user)
+ Sender = UserViewModel.FromUser(user),
+ Payload = message.Payload
});
}
else if (message.Role == AgentRole.Assistant)
diff --git a/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Conversations/ChatResponseModel.cs b/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Conversations/ChatResponseModel.cs
index cf71b8f93..a03f1211d 100644
--- a/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Conversations/ChatResponseModel.cs
+++ b/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Conversations/ChatResponseModel.cs
@@ -28,6 +28,10 @@ public class ChatResponseModel : InstructResult
[JsonPropertyName("rich_content")]
public RichContent? RichContent { get; set; }
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ [JsonPropertyName("payload")]
+ public string? Payload { get; set; }
+
[JsonPropertyName("created_at")]
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
}
diff --git a/src/Plugins/BotSharp.Plugin.MongoStorage/Models/DialogMongoElement.cs b/src/Plugins/BotSharp.Plugin.MongoStorage/Models/DialogMongoElement.cs
index 6ebc16ff4..5c2a1698e 100644
--- a/src/Plugins/BotSharp.Plugin.MongoStorage/Models/DialogMongoElement.cs
+++ b/src/Plugins/BotSharp.Plugin.MongoStorage/Models/DialogMongoElement.cs
@@ -9,6 +9,7 @@ public class DialogMongoElement
public string? SecondaryContent { get; set; }
public string? RichContent { get; set; }
public string? SecondaryRichContent { get; set; }
+ public string? Payload { get; set; }
public DialogMongoElement()
{
@@ -23,7 +24,8 @@ public static DialogMongoElement ToMongoElement(DialogElement dialog)
Content = dialog.Content,
SecondaryContent = dialog.SecondaryContent,
RichContent = dialog.RichContent,
- SecondaryRichContent = dialog.SecondaryRichContent
+ SecondaryRichContent = dialog.SecondaryRichContent,
+ Payload = dialog.Payload
};
}
@@ -35,7 +37,8 @@ public static DialogElement ToDomainElement(DialogMongoElement dialog)
Content = dialog.Content,
SecondaryContent = dialog.SecondaryContent,
RichContent = dialog.RichContent,
- SecondaryRichContent = dialog.SecondaryRichContent
+ SecondaryRichContent = dialog.SecondaryRichContent,
+ Payload = dialog.Payload
};
}
}