Files
gnoma/internal/stream/event.go
vikingowl 85c643fdca feat: add foundation types, streaming, and provider interface
internal/message/ — Content discriminated union, Message, Usage,
StopReason, Response. 22 tests.

internal/stream/ — Stream pull-based iterator interface, Event types,
Accumulator (assembles Response from events). 8 tests.

internal/provider/ — Provider interface, Request, ToolDefinition,
Registry with factory pattern, ProviderError with HTTP status
classification. errors.AsType[E] for Go 1.26. 13 tests.

43 tests total, all passing.
2026-04-03 10:57:54 +02:00

71 lines
1.3 KiB
Go

package stream
import (
"encoding/json"
"fmt"
"somegit.dev/Owlibou/gnoma/internal/message"
)
// EventType discriminates streaming events.
type EventType int
const (
EventTextDelta EventType = iota + 1
EventThinkingDelta
EventToolCallStart
EventToolCallDelta
EventToolCallDone
EventUsage
EventError
)
func (et EventType) String() string {
switch et {
case EventTextDelta:
return "text_delta"
case EventThinkingDelta:
return "thinking_delta"
case EventToolCallStart:
return "tool_call_start"
case EventToolCallDelta:
return "tool_call_delta"
case EventToolCallDone:
return "tool_call_done"
case EventUsage:
return "usage"
case EventError:
return "error"
default:
return fmt.Sprintf("unknown(%d)", et)
}
}
// Event is a single streaming event from a provider.
type Event struct {
Type EventType
// TextDelta, ThinkingDelta
Text string
// ToolCallStart: ID + Name set
// ToolCallDelta: ID + ArgDelta set
// ToolCallDone: ID + Args set (complete JSON)
ToolCallID string
ToolCallName string
ArgDelta string // partial JSON fragment
Args json.RawMessage // complete arguments (on Done)
// Usage
Usage *message.Usage
// Error
Err error
// StopReason — set on the final event of a stream
StopReason message.StopReason
// Model — set on first event if available
Model string
}