summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libpanto-c/include/panto.h4
-rw-r--r--libpanto-go/panto.go88
2 files changed, 53 insertions, 39 deletions
diff --git a/libpanto-c/include/panto.h b/libpanto-c/include/panto.h
index c79e77c..5457715 100644
--- a/libpanto-c/include/panto.h
+++ b/libpanto-c/include/panto.h
@@ -32,7 +32,7 @@ typedef enum { PANTO_EFFORT_LOW = 0, PANTO_EFFORT_MEDIUM, PANTO_EFFORT_HIGH, PAN
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 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_RESULT, 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;
@@ -60,7 +60,7 @@ typedef struct { size_t attempt, max_attempts; uint64_t delay_ms; PantoSlice err
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 { 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_result; PantoToolDispatchComplete tool_dispatch_complete; } data; } PantoEvent;
/* One content block of a message being appended. A flattened, borrow-only
* view: every slice points into the in-memory message and is valid only for
diff --git a/libpanto-go/panto.go b/libpanto-go/panto.go
index f692b6f..89e4317 100644
--- a/libpanto-go/panto.go
+++ b/libpanto-go/panto.go
@@ -53,65 +53,70 @@ type (
SystemMode int
)
+// These enums mirror libpanto-c's C enums. Each constant wraps its C value
+// (rather than a hand-kept iota sequence) so the Go side can never silently
+// drift from the ABI: if a variant is inserted in panto.h, the values shift
+// with it instead of desyncing. Keep one Go constant per C value.
const (
- OpenAIChat APIStyle = iota
- AnthropicMessages
+ OpenAIChat APIStyle = APIStyle(C.PANTO_OPENAI_CHAT)
+ AnthropicMessages APIStyle = APIStyle(C.PANTO_ANTHROPIC_MESSAGES)
)
const (
- ReasoningDefault ReasoningEffort = iota
- ReasoningOff
- ReasoningMinimal
- ReasoningLow
- ReasoningMedium
- ReasoningHigh
+ ReasoningDefault ReasoningEffort = ReasoningEffort(C.PANTO_REASONING_DEFAULT)
+ ReasoningOff ReasoningEffort = ReasoningEffort(C.PANTO_REASONING_OFF)
+ ReasoningMinimal ReasoningEffort = ReasoningEffort(C.PANTO_REASONING_MINIMAL)
+ ReasoningLow ReasoningEffort = ReasoningEffort(C.PANTO_REASONING_LOW)
+ ReasoningMedium ReasoningEffort = ReasoningEffort(C.PANTO_REASONING_MEDIUM)
+ ReasoningHigh ReasoningEffort = ReasoningEffort(C.PANTO_REASONING_HIGH)
)
const (
- ThinkingDisabled Thinking = iota
- ThinkingEnabled
- ThinkingAdaptive
+ ThinkingDisabled Thinking = Thinking(C.PANTO_THINKING_DISABLED)
+ ThinkingEnabled Thinking = Thinking(C.PANTO_THINKING_ENABLED)
+ ThinkingAdaptive Thinking = Thinking(C.PANTO_THINKING_ADAPTIVE)
)
const (
- EffortLow Effort = iota
- EffortMedium
- EffortHigh
- EffortXHigh
- EffortMax
+ EffortLow Effort = Effort(C.PANTO_EFFORT_LOW)
+ EffortMedium Effort = Effort(C.PANTO_EFFORT_MEDIUM)
+ EffortHigh Effort = Effort(C.PANTO_EFFORT_HIGH)
+ EffortXHigh Effort = Effort(C.PANTO_EFFORT_XHIGH)
+ EffortMax Effort = Effort(C.PANTO_EFFORT_MAX)
)
const (
- RoleSystem MessageRole = iota
- RoleUser
- RoleAssistant
+ RoleSystem MessageRole = MessageRole(C.PANTO_ROLE_SYSTEM)
+ RoleUser MessageRole = MessageRole(C.PANTO_ROLE_USER)
+ RoleAssistant MessageRole = MessageRole(C.PANTO_ROLE_ASSISTANT)
)
const (
- BlockText ContentBlockTag = iota
- BlockThinking
- BlockToolUse
- BlockToolResult
- BlockSystem
- BlockCompactionSummary
+ BlockText ContentBlockTag = ContentBlockTag(C.PANTO_BLOCK_TEXT)
+ BlockThinking ContentBlockTag = ContentBlockTag(C.PANTO_BLOCK_THINKING)
+ BlockToolUse ContentBlockTag = ContentBlockTag(C.PANTO_BLOCK_TOOL_USE)
+ BlockToolResult ContentBlockTag = ContentBlockTag(C.PANTO_BLOCK_TOOL_RESULT)
+ BlockSystem ContentBlockTag = ContentBlockTag(C.PANTO_BLOCK_SYSTEM)
+ BlockCompactionSummary ContentBlockTag = ContentBlockTag(C.PANTO_BLOCK_COMPACTION_SUMMARY)
)
const (
- SystemAppend SystemMode = iota
- SystemReplace
+ SystemAppend SystemMode = SystemMode(C.PANTO_SYSTEM_APPEND)
+ SystemReplace SystemMode = SystemMode(C.PANTO_SYSTEM_REPLACE)
)
const (
- EventMessageStart EventTag = iota
- EventBlockStart
- EventToolDetails
- EventContentDelta
- EventBlockComplete
- EventMessageComplete
- EventProviderRetry
- EventToolDispatchStart
- EventToolDispatchComplete
- EventTurnComplete
+ EventMessageStart EventTag = EventTag(C.PANTO_EVENT_MESSAGE_START)
+ EventBlockStart EventTag = EventTag(C.PANTO_EVENT_BLOCK_START)
+ EventToolDetails EventTag = EventTag(C.PANTO_EVENT_TOOL_DETAILS)
+ EventContentDelta EventTag = EventTag(C.PANTO_EVENT_CONTENT_DELTA)
+ EventBlockComplete EventTag = EventTag(C.PANTO_EVENT_BLOCK_COMPLETE)
+ EventMessageComplete EventTag = EventTag(C.PANTO_EVENT_MESSAGE_COMPLETE)
+ EventProviderRetry EventTag = EventTag(C.PANTO_EVENT_PROVIDER_RETRY)
+ EventToolDispatchStart EventTag = EventTag(C.PANTO_EVENT_TOOL_DISPATCH_START)
+ EventToolDispatchResult EventTag = EventTag(C.PANTO_EVENT_TOOL_DISPATCH_RESULT)
+ EventToolDispatchComplete EventTag = EventTag(C.PANTO_EVENT_TOOL_DISPATCH_COMPLETE)
+ EventTurnComplete EventTag = EventTag(C.PANTO_EVENT_TURN_COMPLETE)
)
type Config struct {
@@ -220,6 +225,11 @@ type ProviderRetryEvent struct {
// message's tool calls.
type ToolDispatchStartEvent struct{ Count uint }
+// ToolDispatchResultEvent: a single tool's result became available, before the
+// aggregate ToolDispatchCompleteEvent. MessageIndex is the index of the
+// ToolResult-carrying message in the conversation.
+type ToolDispatchResultEvent struct{ MessageIndex uint }
+
// ToolDispatchCompleteEvent: the agent appended a user(ToolResult) message.
type ToolDispatchCompleteEvent struct{ MessageIndex uint }
@@ -235,6 +245,7 @@ func (BlockCompleteEvent) EventType() EventTag { return EventBlockComplet
func (MessageCompleteEvent) EventType() EventTag { return EventMessageComplete }
func (ProviderRetryEvent) EventType() EventTag { return EventProviderRetry }
func (ToolDispatchStartEvent) EventType() EventTag { return EventToolDispatchStart }
+func (ToolDispatchResultEvent) EventType() EventTag { return EventToolDispatchResult }
func (ToolDispatchCompleteEvent) EventType() EventTag { return EventToolDispatchComplete }
func (TurnCompleteEvent) EventType() EventTag { return EventTurnComplete }
@@ -1188,6 +1199,9 @@ func marshalEvent(cev *C.PantoEvent) Event {
case C.PANTO_EVENT_TOOL_DISPATCH_START:
t := (*C.PantoToolDispatchStart)(unsafe.Pointer(&cev.data[0]))
return ToolDispatchStartEvent{Count: uint(t.count)}
+ case C.PANTO_EVENT_TOOL_DISPATCH_RESULT:
+ t := (*C.PantoToolDispatchComplete)(unsafe.Pointer(&cev.data[0]))
+ return ToolDispatchResultEvent{MessageIndex: uint(t.message_index)}
case C.PANTO_EVENT_TOOL_DISPATCH_COMPLETE:
t := (*C.PantoToolDispatchComplete)(unsafe.Pointer(&cev.data[0]))
return ToolDispatchCompleteEvent{MessageIndex: uint(t.message_index)}