diff options
Diffstat (limited to 'libpanto/src/agent.zig')
| -rw-r--r-- | libpanto/src/agent.zig | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/libpanto/src/agent.zig b/libpanto/src/agent.zig index 1da0261..0ff231a 100644 --- a/libpanto/src/agent.zig +++ b/libpanto/src/agent.zig @@ -78,7 +78,12 @@ fn cloneMessage(alloc: Allocator, msg: conversation.Message) !conversation.Messa for (msg.content.items) |block| { content.appendAssumeCapacity(try cloneBlock(alloc, block)); } - return .{ .role = msg.role, .content = content, .usage = msg.usage }; + return .{ + .role = msg.role, + .content = content, + .usage = msg.usage, + .metadata = if (msg.metadata) |m| try alloc.dupe(u8, m) else null, + }; } fn cloneBlock(alloc: Allocator, block: conversation.ContentBlock) !conversation.ContentBlock { @@ -91,7 +96,9 @@ fn cloneBlock(alloc: Allocator, block: conversation.ContentBlock) !conversation. mut.deinit(alloc); } const sig: ?[]const u8 = if (b.signature) |s| try alloc.dupe(u8, s) else null; - break :blk .{ .Thinking = .{ .text = tb, .signature = sig } }; + errdefer if (sig) |s| alloc.free(s); + const origin: ?conversation.SignatureOrigin = if (b.signature_origin) |o| try o.dupe(alloc) else null; + break :blk .{ .Thinking = .{ .text = tb, .signature = sig, .signature_origin = origin } }; }, .ToolUse => |b| blk: { const id = try alloc.dupe(u8, b.id); |
