summaryrefslogtreecommitdiff
path: root/libpanto/src/conversation.zig
diff options
context:
space:
mode:
Diffstat (limited to 'libpanto/src/conversation.zig')
-rw-r--r--libpanto/src/conversation.zig26
1 files changed, 3 insertions, 23 deletions
diff --git a/libpanto/src/conversation.zig b/libpanto/src/conversation.zig
index 2c63f19..ea4309c 100644
--- a/libpanto/src/conversation.zig
+++ b/libpanto/src/conversation.zig
@@ -351,15 +351,7 @@ pub const Conversation = struct {
/// Blocks must use this conversation's allocator for any owned bytes,
/// since the conversation will free them with that allocator.
pub fn addUserMessage(self: *Conversation, blocks: []const ContentBlock) !void {
- var content: std.ArrayList(ContentBlock) = .empty;
- try content.ensureTotalCapacity(self.allocator, blocks.len);
- for (blocks) |block| {
- content.appendAssumeCapacity(block);
- }
- try self.messages.append(self.allocator, .{
- .role = .user,
- .content = content,
- });
+ return self.addMessage(.user, blocks, null);
}
/// Append a `user`-role message carrying a single `.CompactionSummary`
@@ -388,16 +380,7 @@ pub const Conversation = struct {
blocks: []const ContentBlock,
usage: ?Usage,
) !void {
- var content: std.ArrayList(ContentBlock) = .empty;
- try content.ensureTotalCapacity(self.allocator, blocks.len);
- for (blocks) |block| {
- content.appendAssumeCapacity(block);
- }
- try self.messages.append(self.allocator, .{
- .role = .assistant,
- .content = content,
- .usage = usage,
- });
+ return self.addMessage(.assistant, blocks, usage);
}
/// Append a message of any role from a slice of content blocks, with
@@ -497,10 +480,7 @@ pub fn effectiveSystemBlocks(
for (msg.content.items) |block| {
switch (block) {
.System => |sb| {
- switch (sb.mode) {
- .append => {},
- .replace => out.clearRetainingCapacity(),
- }
+ if (sb.mode == .replace) out.clearRetainingCapacity();
try out.append(alloc, sb.text.items);
},
// Be tolerant of plain `.Text` blocks on a system message