Documentation
¶
Overview ¶
Package provider implements an abstraction layer for interacting with AI model providers (like OpenAI, Anthropic, etc.) in a consistent way. It defines interfaces and types for streaming AI completions while handling provider-specific implementation details.
Design decisions:
- Provider abstraction: Single interface that different AI providers can implement
- Streaming first: Built around streaming responses for real-time interaction
- Type-safe events: Generic types ensure compile-time correctness of response handling
- Structured metadata: Each event includes run/turn IDs and timestamps for tracking
- Error handling: Dedicated error type that preserves context and metadata
- Memory management: Integration with short-term memory for context preservation
Key concepts:
- Provider: Interface defining the contract for AI model providers
- StreamEvent: Base interface for all streaming events (chunks, responses, errors)
- CompletionParams: Configuration for chat completion requests
- Checkpoint: Captures conversation state for context management
The streaming architecture uses four main event types:
- Delim: Delimiter events marking stream boundaries
- Chunk: Incremental response fragments
- Response: Complete responses with checkpoints
- Error: Error events with preserved context
Example usage:
provider := openai.NewProvider(config) params := CompletionParams{ RunID: uuid.New(), Instructions: "You are a helpful assistant", Stream: true, Tools: []tool.Definition{...}, } events, err := provider.ChatCompletion(ctx, params) if err != nil { return err } for event := range events { switch e := event.(type) { case Chunk[messages.AssistantMessage]: // Handle incremental response case Response[messages.AssistantMessage]: // Handle complete response case Error: // Handle error with context } }
The package is designed to be extensible, allowing new providers to be added by implementing the Provider interface while maintaining consistent behavior and error handling across different AI model providers.
Index ¶
- func ChunkToMessage[T messages.Response, M messages.ModelMessage](dst *messages.Message[M], src Chunk[T])
- func ResponseToMessage[T messages.Response, M messages.ModelMessage](dst *messages.Message[M], src Response[T])
- type Chunk
- type CompletionParams
- type Delim
- type Error
- type Provider
- type Response
- type StreamEvent
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ChunkToMessage ¶ added in v0.0.10
func ResponseToMessage ¶ added in v0.0.10
Types ¶
type Chunk ¶ added in v0.0.10
type Chunk[T messages.Response] struct { RunID uuid.UUID `json:"run_id"` TurnID uuid.UUID `json:"turn_id"` Chunk T `json:"chunk"` Timestamp strfmt.DateTime `json:"timestamp,omitempty"` Meta gjson.Result `json:"meta,omitempty"` }
func (Chunk[T]) MarshalJSON ¶ added in v0.0.10
MarshalJSON implements custom JSON marshaling for Chunk[T]
func (*Chunk[T]) UnmarshalJSON ¶ added in v0.0.10
UnmarshalJSON implements custom JSON unmarshaling for Chunk[T]
type CompletionParams ¶ added in v0.0.10
type CompletionParams struct { RunID uuid.UUID Instructions string Thread *shorttermmemory.Aggregator Stream bool ResponseSchema *jsonschema.Schema Model interface { Name() string Provider() Provider } Tools []tool.Definition // contains filtered or unexported fields }
type Delim ¶ added in v0.0.10
type Delim struct { RunID uuid.UUID `json:"run_id"` TurnID uuid.UUID `json:"turn_id"` Delim string `json:"delim"` }
func (Delim) MarshalJSON ¶ added in v0.0.10
MarshalJSON implements custom JSON marshaling for Delim
func (*Delim) UnmarshalJSON ¶ added in v0.0.10
UnmarshalJSON implements custom JSON unmarshaling for Delim
type Error ¶ added in v0.0.10
type Error struct { RunID uuid.UUID `json:"run_id"` TurnID uuid.UUID `json:"turn_id"` Err error `json:"error"` Timestamp strfmt.DateTime `json:"timestamp,omitempty"` Meta gjson.Result `json:"meta,omitempty"` }
func (Error) MarshalJSON ¶ added in v0.0.10
MarshalJSON implements custom JSON marshaling for Error
func (*Error) UnmarshalJSON ¶ added in v0.0.10
UnmarshalJSON implements custom JSON unmarshaling for Error
type Provider ¶
type Provider interface {
ChatCompletion(context.Context, CompletionParams) (<-chan StreamEvent, error)
}
type Response ¶ added in v0.0.10
type Response[T messages.Response] struct { RunID uuid.UUID `json:"run_id"` TurnID uuid.UUID `json:"turn_id"` Checkpoint shorttermmemory.Checkpoint `json:"checkpoint"` Response T `json:"response"` Timestamp strfmt.DateTime `json:"timestamp,omitempty"` Meta gjson.Result `json:"meta,omitempty"` }
func (Response[T]) MarshalJSON ¶ added in v0.0.10
MarshalJSON implements custom JSON marshaling for Response[T]
func (*Response[T]) UnmarshalJSON ¶ added in v0.0.10
UnmarshalJSON implements custom JSON unmarshaling for Response[T]
type StreamEvent ¶ added in v0.0.10
type StreamEvent interface {
// contains filtered or unexported methods
}