diff options
Diffstat (limited to 'libpanto/src/conversation.zig')
| -rw-r--r-- | libpanto/src/conversation.zig | 26 |
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 |
