provider

package
v0.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 4, 2025 License: MIT Imports: 12 Imported by: 0

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:

  1. Delim: Delimiter events marking stream boundaries
  2. Chunk: Incremental response fragments
  3. Response: Complete responses with checkpoints
  4. 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

Constants

This section is empty.

Variables

This section is empty.

Functions

func ChunkToMessage added in v0.0.10

func ChunkToMessage[T messages.Response, M messages.ModelMessage](dst *messages.Message[M], src Chunk[T])

func ResponseToMessage added in v0.0.10

func ResponseToMessage[T messages.Response, M messages.ModelMessage](dst *messages.Message[M], src Response[T])

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

func (c Chunk[T]) MarshalJSON() ([]byte, error)

MarshalJSON implements custom JSON marshaling for Chunk[T]

func (*Chunk[T]) UnmarshalJSON added in v0.0.10

func (c *Chunk[T]) UnmarshalJSON(data []byte) error

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

func (d Delim) MarshalJSON() ([]byte, error)

MarshalJSON implements custom JSON marshaling for Delim

func (*Delim) UnmarshalJSON added in v0.0.10

func (d *Delim) UnmarshalJSON(data []byte) error

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) Error added in v0.0.10

func (e Error) Error() string

func (Error) MarshalJSON added in v0.0.10

func (e Error) MarshalJSON() ([]byte, error)

MarshalJSON implements custom JSON marshaling for Error

func (*Error) UnmarshalJSON added in v0.0.10

func (e *Error) UnmarshalJSON(data []byte) error

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

func (r Response[T]) MarshalJSON() ([]byte, error)

MarshalJSON implements custom JSON marshaling for Response[T]

func (*Response[T]) UnmarshalJSON added in v0.0.10

func (r *Response[T]) UnmarshalJSON(data []byte) error

UnmarshalJSON implements custom JSON unmarshaling for Response[T]

type StreamEvent added in v0.0.10

type StreamEvent interface {
	// contains filtered or unexported methods
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL