Documentation
¶
Index ¶
- Variables
- func HashMessages(salt string, inputs []Message) string
- func SubstringAfter(split string) func(string) (string, error)
- func TransformByPrefix(prefix string) func(string) string
- type CachedModelOpt
- type ConcurrentLimiter
- type FakeReasoningModelOpt
- type FeedbackGenerator
- type GeminiModelOpt
- type ImageAttachment
- type MapFunc
- func NewFeedbackMapFunc[T, U any](enc MessageEncoder[T], pars ResponseDecoder[U], fed FeedbackGenerator, ...) MapFunc[T, U]
- func NewModelFallbackOneShotMapFunc[T, U any](enc MessageEncoder[T], dec ResponseDecoder[U], models ...Model) MapFunc[T, U]
- func NewOneShotMapFunc[T, U any](enc MessageEncoder[T], dec ResponseDecoder[U], model Model) MapFunc[T, U]
- type Message
- type MessageEncoder
- type Model
- func NewCachedModel(model Model, cache ModelResponseCache, opts ...CachedModelOpt) Model
- func NewConcurrentLimitedModel(model Model, limiter ConcurrentLimiter) Model
- func NewFakeReasoningModel(reasoner Model, answerer Model, opts ...FakeReasoningModelOpt) Model
- func NewGeminiModel(key, modelName string, opts ...GeminiModelOpt) Model
- func NewLoggingModel(model Model, logger ModelLogger) Model
- func NewOpenAIModel(key, modelName string, opts ...OpenAIModelOpt) Model
- func NewRetryChainModel(models []Model) Model
- func NewRetryModel(model Model, maxRetries int, opts ...RetryModelOpt) Model
- func NewUsageCountingModel(model Model, counter *UsageCounter) Model
- type ModelLogger
- type ModelLoggingInfo
- type ModelResponse
- type ModelResponseCache
- type OpenAIModelOpt
- type ReasoningEffort
- type ResponseDecoder
- func NewJsonResponseDecoder[T any]() ResponseDecoder[T]
- func NewRawStringResponseDecoder() ResponseDecoder[string]
- func NewSubstringResponseDecoder[T any](decoder ResponseDecoder[T], substring func(string) (string, error)) ResponseDecoder[T]
- func NewValidatingResponseDecoder[T any](decoder ResponseDecoder[T], validate func(T) error) ResponseDecoder[T]
- type RetryModelOpt
- type Role
- type Usage
- type UsageCounter
- type Verbosity
- type WithDelay
- type WithHTTPHeader
- type WithJsonSchema
- type WithMaxOutputTokens
- type WithMessagePrefix
- type WithPrediction
- type WithPresencePenalty
- type WithReasoningAs
- type WithReasoningEffort
- type WithReasoningPrompt
- type WithSalt
- type WithSystemAs
- type WithTemperature
- type WithTimeout
- type WithTopP
- type WithURL
- type WithVerbosity
Constants ¶
This section is empty.
Variables ¶
var (
ErrInvalidResponse = errors.New("llm produced an invalid response")
)
Functions ¶
func HashMessages ¶ added in v0.6.0
func SubstringAfter ¶ added in v0.8.0
Create a new substringer that returns the last block of text after `split`. It will never error.
func TransformByPrefix ¶ added in v0.8.0
Types ¶
type CachedModelOpt ¶ added in v0.8.2
type CachedModelOpt interface {
// contains filtered or unexported methods
}
type ConcurrentLimiter ¶ added in v0.7.0
type ConcurrentLimiter chan struct{}
func NewMaxConcurrentLimiter ¶ added in v0.7.0
func NewMaxConcurrentLimiter(n int) ConcurrentLimiter
NewMaxConcurrentLimiter creates a ConcurrentLimiter that allows up to n concurrent operations. The limiter is implemented as a buffered channel with capacity n.
func NewOneConcurrentLimiter ¶ added in v0.7.0
func NewOneConcurrentLimiter() ConcurrentLimiter
NewOneConcurrentLimiter creates a ConcurrentLimiter that allows only one operation at a time. This is a convenience function equivalent to NewMaxConcurrentLimiter(1).
type FakeReasoningModelOpt ¶ added in v0.8.0
type FakeReasoningModelOpt interface {
// contains filtered or unexported methods
}
type FeedbackGenerator ¶ added in v0.6.0
FeedbackGenerator takes an error and converts it to a piece of text feedback to send to the LLM.
func NewRawMessageFeedbackGenerator ¶ added in v0.6.0
func NewRawMessageFeedbackGenerator() FeedbackGenerator
NewRawMessageFeedbackGenerator creates a FeedbackGenerator that formats feedback by returning the error message as a string.
type GeminiModelOpt ¶ added in v0.8.0
type GeminiModelOpt interface {
// contains filtered or unexported methods
}
type ImageAttachment ¶ added in v0.7.0
func (*ImageAttachment) ToBase64Encoded ¶ added in v0.7.0
func (i *ImageAttachment) ToBase64Encoded(useCompression bool) (string, error)
type MapFunc ¶ added in v0.6.0
MapFunc transforms input of type T into output of type U using an LLM. It handles the encoding of input, interaction with the LLM, and decoding of output.
func NewFeedbackMapFunc ¶ added in v0.6.0
func NewFeedbackMapFunc[T, U any]( enc MessageEncoder[T], pars ResponseDecoder[U], fed FeedbackGenerator, model Model, feedbackRole Role, maxRetries int, ) MapFunc[T, U]
NewFeedbackMapFunc creates a MapFunc that first runs the encoder, then the model, finally parsing the response with the decoder. However, it adds feedback to the conversation when errors are detected. It will only add to the conversation if the error returned from the parser is an ErrInvalidResponse (using errors.Is).
func NewModelFallbackOneShotMapFunc ¶ added in v0.8.1
func NewModelFallbackOneShotMapFunc[T, U any]( enc MessageEncoder[T], dec ResponseDecoder[U], models ...Model, ) MapFunc[T, U]
Creates a map func that first tries to ask the first model, and if that produces an invalid format will try to ask the next models until a valid format is found. This is useful, for example, to try a second time with a model that overwrites the cache.
func NewOneShotMapFunc ¶ added in v0.6.0
func NewOneShotMapFunc[T, U any]( enc MessageEncoder[T], dec ResponseDecoder[U], model Model, ) MapFunc[T, U]
NewOneShotMapFunc creates a MapFunc that first runs the encoder, then the model, finally parsing the response with the decoder.
type Message ¶
type Message struct {
Role Role
Content string
Images []ImageAttachment
}
Message defines a text message to/from an LLM.
type MessageEncoder ¶ added in v0.6.0
MessageEncoder encodes a structured piece of data into a set of messages for an LLM.
func NewRawStringMessageEncoder ¶ added in v0.6.0
func NewRawStringMessageEncoder(systemPrompt string) MessageEncoder[string]
NewRawStringMessageEncoder creates a MessageEncoder that encodes a system prompt and user input as raw string messages.
func NewSequentialMessageEncoder ¶ added in v0.8.0
func NewSequentialMessageEncoder[T any](msgEncs ...MessageEncoder[T]) MessageEncoder[T]
Create a new message encoder that appends the results of running each message encoder sequentially. Useful, for example, to have a templating system / user message encoder, and a custom agent history message encoder after.
func NewTemplateMessageEncoder ¶ added in v0.7.0
func NewTemplateMessageEncoder[T any](systemTemplate, userTemplate string) MessageEncoder[T]
NewTemplateMessageEncoder creates a MessageEncoder that uses Go's text/template for formatting messages. It accepts templates for both system and user messages, allowing dynamic content insertion. The data parameter to BuildInputMessages should be a struct or map with fields accessible to the template. If either systemTemplate or userTemplate is an empty string, that message will be skipped.
type Model ¶
type Model interface {
// Responds to a set of input messages.
Respond([]Message) (ModelResponse, error)
}
Model defines an interface to an LLM.
func NewCachedModel ¶ added in v0.7.0
func NewCachedModel(model Model, cache ModelResponseCache, opts ...CachedModelOpt) Model
NewCachedModel wraps a Model with response caching functionality. It stores responses in the provided ModelResponseCache implementation, returning cached results for identical input messages and salts to avoid redundant model calls.
func NewConcurrentLimitedModel ¶ added in v0.7.0
func NewConcurrentLimitedModel(model Model, limiter ConcurrentLimiter) Model
NewConcurrentLimitedModel wraps a Model with concurrency control. It ensures that only a limited number of concurrent calls can be made to the underlying model, using the provided ConcurrentLimiter to manage access.
func NewFakeReasoningModel ¶
func NewFakeReasoningModel(reasoner Model, answerer Model, opts ...FakeReasoningModelOpt) Model
NewFakeReasoningModel creates a model that uses two underlying models to simulate reasoning. It first calls the reasoner model to generate reasoning about the input messages, then passes that reasoning along with the original messages to the answerer model. The reasoning is included as a ReasoningRole message in the auxiliary messages output. Optional parameters allow customization of the reasoning prompt.
func NewGeminiModel ¶ added in v0.8.0
func NewGeminiModel(key, modelName string, opts ...GeminiModelOpt) Model
NewGeminiModel creates a Model that uses the Google Gemini API. It requires an API key and model name, with optional configuration via variadic options.
func NewLoggingModel ¶ added in v0.7.0
func NewLoggingModel(model Model, logger ModelLogger) Model
NewLoggingModel wraps a Model with logging functionality. It logs all interactions with the model using the provided ModelLogger. Each model call is logged with input messages, output messages, usage statistics, and timing information.
func NewOpenAIModel ¶ added in v0.7.0
func NewOpenAIModel(key, modelName string, opts ...OpenAIModelOpt) Model
NewOpenAIModel creates a Model that uses the OpenAI API. It requires an API key and model name, with optional configuration via variadic options.
func NewRetryChainModel ¶ added in v0.8.2
NewRetryChainModel creates a Model that tries a list of models in order, returning the result from the first one that doesn't fail. If all models fail, it returns a joined error containing all the errors.
func NewRetryModel ¶
func NewRetryModel(model Model, maxRetries int, opts ...RetryModelOpt) Model
NewRetryModel wraps a Model with retry functionality. If the underlying model returns an error, this wrapper will retry the operation up to a configurable number of times with an optional delay between retries.
func NewUsageCountingModel ¶ added in v0.7.0
func NewUsageCountingModel(model Model, counter *UsageCounter) Model
NewUsageCountingModel wraps a Model with token usage tracking functionality. It aggregates token usage statistics in the provided UsageCounter, which allows monitoring total token consumption across multiple model calls.
type ModelLogger ¶ added in v0.7.0
type ModelLogger interface {
ModelLog(ModelLoggingInfo) error
}
ModelLogger specifies a method of logging a call to a model.
func NewJsonModelLogger ¶ added in v0.7.0
func NewJsonModelLogger(to io.Writer) ModelLogger
NewJsonModelLogger creates a ModelLogger that outputs logs in JSON format. The logs are written to the provided io.Writer, with each log entry being a JSON object containing the model interaction details.
func NewSlogModelLogger ¶ added in v0.8.0
func NewSlogModelLogger(logFunc func(string, ...any), logMessages bool) ModelLogger
Logs calls made to the model to a slog-style logging function. Can optionally log the model messages too (this is very spammy).
type ModelLoggingInfo ¶ added in v0.6.0
type ModelLoggingInfo struct {
Messages []Message
ResponseAuxMessages []Message
ResponseFinalMessage Message
Usage Usage
Err error
Duration time.Duration
}
ModelLoggingInfo contains all information about a model interaction to be logged. It includes input messages, output messages, usage statistics, and any error that occurred.
type ModelResponse ¶ added in v0.8.0
type ModelResponse struct {
// Extra messages that are not the final response,
// but were used to build up the final response.
// For example, reasoning messages.
AuxilliaryMessages []Message
// The primary repsponse to the users query.
// Usually the only response that matters.
PrimaryMessage Message
// The usage of making this call.
// This may be the sum of multiple LLM calls.
Usage Usage
}
func (ModelResponse) IncludingUsage ¶ added in v0.8.0
func (r ModelResponse) IncludingUsage(u Usage) ModelResponse
Utility to include another usage object in this response object
func (ModelResponse) OnlyUsage ¶ added in v0.8.0
func (r ModelResponse) OnlyUsage() ModelResponse
Utility to allow you to return the usage but 0 value messages when an error occurs.
type ModelResponseCache ¶ added in v0.6.0
type ModelResponseCache interface {
GetCachedResponse(salt string, inputs []Message) (bool, []Message, Message, error)
SetCachedResponse(salt string, inputs []Message, aux []Message, out Message) error
}
func NewInMemoryCache ¶ added in v0.6.0
func NewInMemoryCache() ModelResponseCache
NewInMemoryCache creates an in-memory implementation of ModelResponseCache. It stores model responses in memory using a hash of the input messages as a key.
func NewSQLCache ¶ added in v0.7.3
func NewSQLCache(db *sql.DB) (ModelResponseCache, error)
type OpenAIModelOpt ¶ added in v0.8.0
type OpenAIModelOpt interface {
// contains filtered or unexported methods
}
type ReasoningEffort ¶
type ReasoningEffort uint8
ReasoningEffort defines how hard a reasoning model should think.
const ( LowReasoning ReasoningEffort = iota MediumReasoning HighReasoning )
type ResponseDecoder ¶ added in v0.6.0
ResponseDecoder converts an LLM response into a structured piece of data. When the LLM response is invalid, it should return ErrInvalidResponse (or an error joined on that).
func NewJsonResponseDecoder ¶ added in v0.7.0
func NewJsonResponseDecoder[T any]() ResponseDecoder[T]
NewJsonResponseDecoder creates a ResponseDecoder that tries to parse a json object from the response. It can ONLY parse json objects with an OBJECT as top level (i.e. it cannot parse a list directly).
func NewRawStringResponseDecoder ¶ added in v0.6.0
func NewRawStringResponseDecoder() ResponseDecoder[string]
NewRawStringResponseDecoder creates a ResponseDecoder that returns the response as a raw string without modification.
func NewSubstringResponseDecoder ¶ added in v0.8.0
func NewSubstringResponseDecoder[T any](decoder ResponseDecoder[T], substring func(string) (string, error)) ResponseDecoder[T]
Wrap an existing response decoder with one that takes only the part of interest of the response into account. The part of interest is determined by the substring function. If an error is detected when getting the substring, ErrInvalidResponse is raised.
func NewValidatingResponseDecoder ¶ added in v0.8.0
func NewValidatingResponseDecoder[T any](decoder ResponseDecoder[T], validate func(T) error) ResponseDecoder[T]
Creates a response decoder that wraps the provided one, but then performs an extra validation step on the parsed response. If an error is found during validation, the error is wrapped with ErrInvalidResponse and returned.
type RetryModelOpt ¶ added in v0.8.0
type RetryModelOpt interface {
// contains filtered or unexported methods
}
type Role ¶
type Role uint8
Role is an enum specifying a role for a message. It is not 1:1 with openai roles (i.e. there is a reasoning role here).
type UsageCounter ¶ added in v0.6.0
type UsageCounter struct {
// contains filtered or unexported fields
}
Counts up the sum usage. Is completely concurrent-safe.
func NewUsageCounter ¶ added in v0.6.0
func NewUsageCounter() *UsageCounter
NewUsageCounter creates a new UsageCounter with zero initial usage. The counter is safe for concurrent use across multiple goroutines.
func (*UsageCounter) Add ¶ added in v0.6.0
func (u *UsageCounter) Add(usage Usage)
Add the given usage to the counter.
func (*UsageCounter) Get ¶ added in v0.6.0
func (u *UsageCounter) Get() Usage
Get the current usage in the counter.
type WithHTTPHeader ¶ added in v0.7.0
type WithJsonSchema ¶ added in v0.8.0
type WithMaxOutputTokens ¶ added in v0.8.0
type WithMaxOutputTokens struct{ X int }
type WithMessagePrefix ¶ added in v0.8.0
type WithMessagePrefix struct{ X string }
type WithPrediction ¶ added in v0.8.0
type WithPrediction struct{ X string }
type WithPresencePenalty ¶ added in v0.8.0
type WithPresencePenalty struct{ X float64 }
type WithReasoningAs ¶ added in v0.8.0
type WithReasoningEffort ¶ added in v0.7.0
type WithReasoningEffort struct{ X ReasoningEffort }
type WithReasoningPrompt ¶ added in v0.7.0
type WithReasoningPrompt struct{ X string }
type WithSystemAs ¶ added in v0.8.0
type WithTemperature ¶ added in v0.7.0
type WithTemperature struct{ X float64 }
type WithTimeout ¶ added in v0.8.2
type WithVerbosity ¶ added in v0.8.0
type WithVerbosity struct{ X Verbosity }
Source Files
¶
- cache.go
- cache_memory.go
- cache_sql.go
- feedgen.go
- feedgen_rawmessage.go
- logger.go
- logger_json.go
- logger_slog.go
- mapfunc.go
- mapfunc_feedback.go
- mapfunc_modelfallback.go
- mapfunc_oneshot.go
- messages.go
- model.go
- model_cached.go
- model_concurrent_limited.go
- model_fakereason.go
- model_gemini.go
- model_logging.go
- model_openai.go
- model_retry.go
- model_retrychain.go
- model_usage_counting.go
- msgenc.go
- msgenc_rawstring.go
- msgenc_sequential.go
- msgenc_template.go
- respdec.go
- respdec_json.go
- respdec_rawstring.go
- respdec_substring.go
- respdec_validate.go
- utils.go