summaryrefslogtreecommitdiff
path: root/libpanto-c/include
diff options
context:
space:
mode:
authort <t@tjp.lol>2026-06-10 20:02:07 -0600
committert <t@tjp.lol>2026-06-10 20:38:57 -0600
commit813ebd014a7614fdcdf4df5570b50944f2626076 (patch)
treef261b18f62ee03b36814fcb93c3e0f3482a15fcd /libpanto-c/include
parent824a2a8efc978a6bbd8a26e076624550ab3ea46b (diff)
libpanto-c
Diffstat (limited to 'libpanto-c/include')
-rw-r--r--libpanto-c/include/panto.h104
1 files changed, 104 insertions, 0 deletions
diff --git a/libpanto-c/include/panto.h b/libpanto-c/include/panto.h
new file mode 100644
index 0000000..4430810
--- /dev/null
+++ b/libpanto-c/include/panto.h
@@ -0,0 +1,104 @@
+#ifndef PANTO_H
+#define PANTO_H
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(_WIN32)
+#define PANTO_EXPORT __declspec(dllexport)
+#else
+#define PANTO_EXPORT __attribute__((visibility("default")))
+#endif
+
+typedef struct PantoAgent PantoAgent;
+typedef struct PantoStream PantoStream;
+typedef struct PantoConversation PantoConversation;
+typedef struct PantoSession PantoSession;
+typedef struct PantoSessionStore PantoSessionStore;
+
+typedef struct { const uint8_t *ptr; size_t len; } PantoSlice;
+
+typedef enum { PANTO_OK = 0, PANTO_ERROR = 1 } PantoStatus;
+typedef enum { PANTO_NEXT_EVENT = 0, PANTO_NEXT_DONE = 1, PANTO_NEXT_ERROR = 2 } PantoNextStatus;
+typedef enum { PANTO_OPENAI_CHAT = 0, PANTO_ANTHROPIC_MESSAGES = 1 } PantoAPIStyle;
+typedef enum { PANTO_REASONING_DEFAULT = 0, PANTO_REASONING_OFF, PANTO_REASONING_MINIMAL, PANTO_REASONING_LOW, PANTO_REASONING_MEDIUM, PANTO_REASONING_HIGH } PantoReasoningEffort;
+typedef enum { PANTO_THINKING_DISABLED = 0, PANTO_THINKING_ENABLED, PANTO_THINKING_ADAPTIVE } PantoThinking;
+typedef enum { PANTO_EFFORT_LOW = 0, PANTO_EFFORT_MEDIUM, PANTO_EFFORT_HIGH, PANTO_EFFORT_XHIGH, PANTO_EFFORT_MAX } PantoEffort;
+typedef enum { PANTO_ROLE_SYSTEM = 0, PANTO_ROLE_USER, PANTO_ROLE_ASSISTANT } PantoMessageRole;
+typedef enum { PANTO_BLOCK_TEXT = 0, PANTO_BLOCK_THINKING, PANTO_BLOCK_TOOL_USE, PANTO_BLOCK_TOOL_RESULT, PANTO_BLOCK_SYSTEM, PANTO_BLOCK_COMPACTION_SUMMARY } PantoContentBlockTag;
+typedef enum { PANTO_SYSTEM_APPEND = 0, PANTO_SYSTEM_REPLACE } PantoSystemMode;
+typedef enum { PANTO_EVENT_MESSAGE_START = 0, PANTO_EVENT_BLOCK_START, PANTO_EVENT_TOOL_DETAILS, PANTO_EVENT_CONTENT_DELTA, PANTO_EVENT_BLOCK_COMPLETE, PANTO_EVENT_MESSAGE_COMPLETE, PANTO_EVENT_PROVIDER_RETRY, PANTO_EVENT_TOOL_DISPATCH_START, PANTO_EVENT_TOOL_DISPATCH_COMPLETE, PANTO_EVENT_TURN_COMPLETE } PantoEventTag;
+
+typedef struct { uint64_t input, output, cache_read, cache_write, reasoning; } PantoUsage;
+typedef struct { PantoAPIStyle api_style; PantoSlice base_url; PantoSlice model; PantoReasoningEffort reasoning; PantoThinking thinking; PantoEffort effort; bool has_thinking_budget_tokens; uint32_t thinking_budget_tokens; bool thinking_interleaved; } PantoWireIdentity;
+typedef struct { PantoSlice id, created, modified, last_user_message, base_url, model; size_t message_count; PantoAPIStyle api_style; PantoReasoningEffort reasoning; } PantoSessionInfo;
+typedef struct { PantoSessionInfo *ptr; size_t len; } PantoSessionInfoList;
+typedef struct { bool found; PantoSession *session; } PantoSessionResult;
+typedef struct { PantoSlice api_key, base_url, model; PantoReasoningEffort reasoning; uint32_t max_tokens; } PantoOpenAIChatConfig;
+typedef struct { PantoSlice api_key, base_url, model, api_version; uint32_t max_tokens; PantoThinking thinking; PantoEffort effort; bool has_thinking_budget_tokens; uint32_t thinking_budget_tokens; bool thinking_interleaved; } PantoAnthropicMessagesConfig;
+typedef struct { PantoAPIStyle tag; union { PantoOpenAIChatConfig openai_chat; PantoAnthropicMessagesConfig anthropic_messages; } data; } PantoProviderConfig;
+typedef struct { uint32_t keep_verbatim; bool has_model; PantoProviderConfig model; bool has_compaction_prompt; PantoSlice compaction_prompt; } PantoCompactionConfig;
+typedef struct { size_t max_attempts; uint64_t initial_delay_ms, max_delay_ms; double multiplier; bool jitter; } PantoRetryConfig;
+typedef struct { PantoProviderConfig provider; PantoCompactionConfig compaction; PantoRetryConfig retry; } PantoConfig;
+
+typedef struct { PantoContentBlockTag block_type; size_t index; } PantoBlockStart;
+typedef struct { size_t index; PantoSlice id, name; } PantoToolDetails;
+typedef struct { size_t index; PantoSlice delta; } PantoContentDelta;
+typedef struct { size_t index; PantoContentBlockTag block_type; } PantoBlockComplete;
+typedef struct { bool has_usage; PantoUsage usage; } PantoMessageComplete;
+typedef struct { size_t attempt, max_attempts; uint64_t delay_ms; PantoSlice error_name; bool has_status_code; uint16_t status_code; bool has_retry_after_ms; uint64_t retry_after_ms; PantoSlice message; bool compaction; } PantoProviderRetry;
+typedef struct { size_t count; } PantoToolDispatchStart;
+typedef struct { size_t message_index; } PantoToolDispatchComplete;
+
+typedef struct { PantoEventTag tag; union { PantoMessageRole message_start; PantoBlockStart block_start; PantoToolDetails tool_details; PantoContentDelta content_delta; PantoBlockComplete block_complete; PantoMessageComplete message_complete; PantoProviderRetry provider_retry; PantoToolDispatchStart tool_dispatch_start; PantoToolDispatchComplete tool_dispatch_complete; } data; } PantoEvent;
+
+typedef struct { PantoMessageRole role; bool has_usage; PantoUsage usage; bool has_metadata; PantoSlice metadata; } PantoPersistentMessage;
+
+typedef struct {
+ PantoStatus (*create)(void *ctx, PantoSession **out);
+ PantoStatus (*list)(void *ctx, PantoSessionInfoList *out);
+ void (*free_session_infos)(void *ctx, PantoSessionInfoList infos);
+ PantoStatus (*resolve)(void *ctx, PantoSlice id, PantoSessionResult *out);
+ PantoStatus (*latest)(void *ctx, PantoSessionResult *out);
+ PantoStatus (*load)(void *ctx, PantoSlice id, PantoConversation **out);
+ PantoStatus (*append_messages)(void *ctx, PantoSlice session_id, const PantoPersistentMessage *messages, size_t len);
+ void (*destroy)(void *ctx);
+} PantoSessionStoreVTable;
+
+PANTO_EXPORT void panto_init(void);
+PANTO_EXPORT void panto_deinit(void);
+PANTO_EXPORT PantoSlice panto_last_error(void);
+PANTO_EXPORT void panto_error_free(PantoSlice s);
+PANTO_EXPORT PantoStatus panto_conversation_create(PantoConversation **out);
+PANTO_EXPORT void panto_conversation_destroy(PantoConversation *conversation);
+PANTO_EXPORT PantoStatus panto_session_create_null(PantoSession **out);
+PANTO_EXPORT PantoStatus panto_session_create(PantoSessionStore *store, PantoSessionInfo info, PantoSession **out);
+PANTO_EXPORT void panto_session_destroy(PantoSession *session);
+PANTO_EXPORT PantoStatus panto_session_store_create(void *ctx, const PantoSessionStoreVTable *vtable, PantoSessionStore **out);
+PANTO_EXPORT void panto_session_store_destroy(PantoSessionStore *store);
+PANTO_EXPORT PantoStatus panto_session_store_create_session(PantoSessionStore *store, PantoSession **out);
+PANTO_EXPORT PantoStatus panto_session_store_list(PantoSessionStore *store, PantoSessionInfoList *out);
+PANTO_EXPORT void panto_session_info_list_destroy(PantoSessionInfoList infos);
+PANTO_EXPORT PantoStatus panto_session_store_resolve(PantoSessionStore *store, PantoSlice id, PantoSessionResult *out);
+PANTO_EXPORT PantoStatus panto_session_store_latest(PantoSessionStore *store, PantoSessionResult *out);
+PANTO_EXPORT PantoStatus panto_session_load(PantoSession *session, PantoConversation **out);
+PANTO_EXPORT PantoStatus panto_agent_create(const PantoConfig *config, PantoSession *session, PantoConversation *conversation, PantoAgent **out);
+PANTO_EXPORT void panto_agent_destroy(PantoAgent *agent);
+PANTO_EXPORT PantoSlice panto_agent_session_id(PantoAgent *agent);
+PANTO_EXPORT PantoStatus panto_agent_set_config(PantoAgent *agent, const PantoConfig *config);
+PANTO_EXPORT PantoStatus panto_agent_add_system_message(PantoAgent *agent, PantoSlice text);
+PANTO_EXPORT PantoStatus panto_agent_set_system_prompt(PantoAgent *agent, PantoSlice text);
+PANTO_EXPORT PantoStatus panto_agent_run(PantoAgent *agent, PantoSlice user_text, PantoStream **out);
+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);
+
+#ifdef __cplusplus
+}
+#endif
+#endif