Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,8 @@ output, err := resp.Get(0)

A few utilities are available to run multiple requests at the same time:

- `llmberjack.All[T](context.Context, *llmberjack.Llmberjack, reqs ...Request[T])` can be used to fire several requests at once, wait for all of them to return and get a slice of results.
- `llmberjack.Race[T](context.Context, *llmberjack.Llmberjack, reqs ...Request[T])` can be used to fire several requests at once, return the first successful response, and cancel the others.
- `llmberjack.All[T](context.Context, *llmberjack.LlmAdapter, reqs ...Request[T])` can be used to fire several requests at once, wait for all of them to return and get a slice of results.
- `llmberjack.Race[T](context.Context, *llmberjack.LlmAdapter, reqs ...Request[T])` can be used to fire several requests at once, return the first successful response, and cancel the others.

Note that cancelled requests will still incur cost on most providers.

Expand Down
20 changes: 10 additions & 10 deletions adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,17 +37,17 @@ type Llm interface {
RequestOptionsType() reflect.Type
}

// Llmberjack is the main entrypoint for interacting with different LLM providers.
// LlmAdapter is the main entrypoint for interacting with different LLM providers.
// It provides a unified interface to send requests and receive responses.
type Llmberjack struct {
type LlmAdapter struct {
providers map[string]Llm
defaultProvider Llm

httpClient *http.Client
defaultModel string
}

// New creates a new Llmberjack with the given options.
// New creates a new LlmAdapter with the given options.
// It initializes the specified LLM provider and returns a configured adapter.
//
// Example usage:
Expand All @@ -57,8 +57,8 @@ type Llmberjack struct {
// llmberjack.WithDefaultModel("gpt-4"),
// llmberjack.WithApiKey("...")
// )
func New(opts ...llmOption) (*Llmberjack, error) {
llm := Llmberjack{
func New(opts ...llmOption) (*LlmAdapter, error) {
llm := LlmAdapter{
providers: make(map[string]Llm),
}

Expand All @@ -80,7 +80,7 @@ func New(opts ...llmOption) (*Llmberjack, error) {
// new adapter instance. This also clears the systems instructions.
// If called without arguments, will clear the history of the default provider,
// otherwise, it accepts variadic provider names for which to clear the history.
// func (llm *Llmberjack) ResetThreads(threadIds ...*ThreadId) {
// func (llm *LlmAdapter) ResetThreads(threadIds ...*ThreadId) {
// for _, thread := range threadIds {
// thread.provider.ResetThread(thread)
// }
Expand All @@ -90,7 +90,7 @@ func New(opts ...llmOption) (*Llmberjack, error) {
// It accepts the provider requested in a specific request, which will override
// the default provider. If the provider argument is nil, it will return the
// configured default provider.
func (llm *Llmberjack) GetProvider(requestProvider *string) (Llm, error) {
func (llm *LlmAdapter) GetProvider(requestProvider *string) (Llm, error) {
if llm.defaultProvider == nil {
return nil, errors.New("no provider was configured")
}
Expand All @@ -109,12 +109,12 @@ func (llm *Llmberjack) GetProvider(requestProvider *string) (Llm, error) {
return provider, nil
}

// Llmberjack implementation of Adapter
// LlmAdapter implementation of Adapter

func (llm Llmberjack) DefaultModel() string {
func (llm LlmAdapter) DefaultModel() string {
return llm.defaultModel
}

func (llm Llmberjack) HttpClient() *http.Client {
func (llm LlmAdapter) HttpClient() *http.Client {
return llm.httpClient
}
10 changes: 5 additions & 5 deletions options.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ package llmberjack

import "net/http"

type llmOption func(*Llmberjack)
type llmOption func(*LlmAdapter)

// WithDefaultProvider sets what LLM provider to use for communication.
func WithDefaultProvider(provider Llm) llmOption {
return func(llm *Llmberjack) {
return func(llm *LlmAdapter) {
llm.providers[defaultProvider] = provider
llm.defaultProvider = llm.providers[defaultProvider]
}
Expand All @@ -17,7 +17,7 @@ func WithDefaultProvider(provider Llm) llmOption {
// The first one to be registered will become the default, unless a default was
// already or is defined later with `SetDefaultProvider`.
func WithProvider(name string, provider Llm) llmOption {
return func(llm *Llmberjack) {
return func(llm *LlmAdapter) {
llm.providers[name] = provider

if llm.defaultProvider == nil {
Expand All @@ -31,7 +31,7 @@ func WithProvider(name string, provider Llm) llmOption {
// request. It is the caller's responsibility to ensure the requested model is
// available on the configured provider.
func WithDefaultModel(model string) llmOption {
return func(llm *Llmberjack) {
return func(llm *LlmAdapter) {
llm.defaultModel = model
}
}
Expand All @@ -41,7 +41,7 @@ func WithDefaultModel(model string) llmOption {
// If a provider does not support overriding the HTTP client, this will be
// ignored.
func WithHttpClient(client *http.Client) llmOption {
return func(llm *Llmberjack) {
return func(llm *LlmAdapter) {
llm.httpClient = client
}
}
2 changes: 1 addition & 1 deletion request.go
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ func NewRequest[T any]() Request[T] {
//
// It will return a response generic over the configured typed on the Request,
// or an error.
func (r Request[T]) Do(ctx context.Context, llm *Llmberjack) (*Response[T], error) {
func (r Request[T]) Do(ctx context.Context, llm *LlmAdapter) (*Response[T], error) {
if r.err != nil {
return nil, r.err
}
Expand Down
4 changes: 2 additions & 2 deletions sync.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ type AsyncResponse[T any] struct {
Error error
}

func All[T any](ctx context.Context, llm *Llmberjack, reqs ...Request[T]) []AsyncResponse[T] {
func All[T any](ctx context.Context, llm *LlmAdapter, reqs ...Request[T]) []AsyncResponse[T] {
var wg sync.WaitGroup

responses := make([]AsyncResponse[T], len(reqs))
Expand All @@ -38,7 +38,7 @@ func All[T any](ctx context.Context, llm *Llmberjack, reqs ...Request[T]) []Asyn
return responses
}

func Race[T any](ctx context.Context, llm *Llmberjack, reqs ...Request[T]) (*Response[T], error) {
func Race[T any](ctx context.Context, llm *LlmAdapter, reqs ...Request[T]) (*Response[T], error) {
ctx, cancel := context.WithCancel(ctx)
defer cancel()

Expand Down