summaryrefslogtreecommitdiff
path: root/libpanto-go
diff options
context:
space:
mode:
authort <t@tjp.lol>2026-06-20 10:21:13 -0600
committert <t@tjp.lol>2026-06-22 18:17:44 -0600
commita417727810cc6722b3c82e3c9e9b46982ef40a08 (patch)
tree162e9bbc69b504fc55616c19922bf22c11b2e73b /libpanto-go
parent81ddb61dcfcc9bc85585f262bf303e1a9da507b0 (diff)
change up libpanto enums
go: explicitly wrap C.PANTO_* constants rather than using `iota` and trying to get the order exactly right.
Diffstat (limited to 'libpanto-go')
-rw-r--r--libpanto-go/panto.go88
1 files changed, 51 insertions, 37 deletions
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)}