diff options
Diffstat (limited to 'libpanto-c')
| -rw-r--r-- | libpanto-c/include/panto.h | 6 | ||||
| -rw-r--r-- | libpanto-c/src/lib.zig | 5 |
2 files changed, 11 insertions, 0 deletions
diff --git a/libpanto-c/include/panto.h b/libpanto-c/include/panto.h index 94ddcb9..d0c272f 100644 --- a/libpanto-c/include/panto.h +++ b/libpanto-c/include/panto.h @@ -115,6 +115,12 @@ PANTO_EXPORT PantoStatus panto_agent_add_system_message(PantoAgent *agent, const PANTO_EXPORT PantoStatus panto_agent_set_system_prompt(PantoAgent *agent, const char *text); PANTO_EXPORT PantoStatus panto_agent_compact(PantoAgent *agent, const char *override_system_prompt, const char *extra_instructions, PantoCompactionResult *out); PANTO_EXPORT PantoStatus panto_agent_run(PantoAgent *agent, const char *user_text, PantoStream **out); +/* Reset a failed stream back to its turn-open boundary so the caller can + * resume panto_stream_next() after changing the agent config (e.g. catch a + * terminal bad-request, swap the provider config, and retry the SAME turn + * without re-appending the user message). Errors if the stream has not + * failed. */ +PANTO_EXPORT PantoStatus panto_stream_reopen(PantoStream *stream); PANTO_EXPORT void panto_stream_destroy(PantoStream *stream); PANTO_EXPORT PantoNextStatus panto_stream_next(PantoStream *stream, PantoEvent *out); PANTO_EXPORT void panto_event_free(PantoEvent *event); diff --git a/libpanto-c/src/lib.zig b/libpanto-c/src/lib.zig index 9b55bee..78202fb 100644 --- a/libpanto-c/src/lib.zig +++ b/libpanto-c/src/lib.zig @@ -591,6 +591,11 @@ export fn panto_agent_run(a: *PantoAgent, text: ?[*:0]const u8, out: **PantoStre out.* = @ptrCast(st); return .ok; } +export fn panto_stream_reopen(s: *PantoStream) PantoStatus { + const st: *panto.Stream = @ptrCast(@alignCast(s)); + st.reopen() catch |e| return setErr("{t}", .{e}); + return .ok; +} export fn panto_stream_destroy(s: ?*PantoStream) void { if (s) |ptr| { const st: *panto.Stream = @ptrCast(@alignCast(ptr)); |
