From a417727810cc6722b3c82e3c9e9b46982ef40a08 Mon Sep 17 00:00:00 2001 From: t Date: Sat, 20 Jun 2026 10:21:13 -0600 Subject: change up libpanto enums go: explicitly wrap C.PANTO_* constants rather than using `iota` and trying to get the order exactly right. --- libpanto-go/panto.go | 88 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 51 insertions(+), 37 deletions(-) (limited to 'libpanto-go/panto.go') 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)} -- cgit v1.3