summaryrefslogtreecommitdiff
path: root/libpanto/src/turn_persist.zig
diff options
context:
space:
mode:
Diffstat (limited to 'libpanto/src/turn_persist.zig')
-rw-r--r--libpanto/src/turn_persist.zig18
1 files changed, 17 insertions, 1 deletions
diff --git a/libpanto/src/turn_persist.zig b/libpanto/src/turn_persist.zig
index 1dacfec..6d260c8 100644
--- a/libpanto/src/turn_persist.zig
+++ b/libpanto/src/turn_persist.zig
@@ -46,12 +46,28 @@ pub fn persistTurn(
identity: WireIdentity,
tools: []const ToolDecl,
) !void {
+ return persistRange(alloc, session, conv, start_index, conv.messages.items.len, identity, tools);
+}
+
+/// Persist conversation messages in `[start_index, end_index)`. Like
+/// `persistTurn` but with an explicit upper bound, so an incremental flush can
+/// exclude a trailing not-yet-coherent message (a dangling tool call awaiting
+/// its results) while still committing everything before it.
+pub fn persistRange(
+ alloc: Allocator,
+ session: *Session,
+ conv: *conversation.Conversation,
+ start_index: usize,
+ end_index: usize,
+ identity: WireIdentity,
+ tools: []const ToolDecl,
+) !void {
var batch: std.ArrayList(PersistentMessage) = .empty;
defer batch.deinit(alloc);
const all_messages = conv.messages.items;
var i = start_index;
- while (i < all_messages.len) : (i += 1) {
+ while (i < end_index) : (i += 1) {
const msg = &all_messages[i];
if (msg.role == .assistant and hasToolUseWithoutFollowingResults(conv, i)) {
continue;