Introduce multiple agents, tools, and utilities for processing, extracting, and answering user-provided questions using LLMs and external data. Key features include knowledge processing, question splitting, search term generation, and contextual knowledge handling.
43 lines
1.0 KiB
Go
43 lines
1.0 KiB
Go
package shared
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"sync/atomic"
|
|
|
|
gollm "gitea.stevedudenhoeffer.com/steve/go-llm"
|
|
)
|
|
|
|
type ModelTracker struct {
|
|
parent gollm.ChatCompletion
|
|
maximum int64
|
|
calls int64
|
|
}
|
|
|
|
var _ gollm.ChatCompletion = &ModelTracker{}
|
|
|
|
// NewModelTracker creates a new model tracker that will limit the number of calls to the parent.
|
|
// Set to 0 to disable the limit.
|
|
func NewModelTracker(parent gollm.ChatCompletion, maximum int64) *ModelTracker {
|
|
return &ModelTracker{parent: parent, maximum: maximum}
|
|
}
|
|
|
|
var ErrModelCapacity = errors.New("maximum model capacity reached")
|
|
|
|
func (m *ModelTracker) ChatComplete(ctx context.Context, req gollm.Request) (gollm.Response, error) {
|
|
if m.maximum > 0 && atomic.AddInt64(&m.calls, 1) >= m.maximum {
|
|
return gollm.Response{}, ErrModelCapacity
|
|
}
|
|
|
|
return m.parent.ChatComplete(ctx, req)
|
|
}
|
|
|
|
// ResetCalls resets the number of calls made to the parent.
|
|
func (m *ModelTracker) ResetCalls() {
|
|
atomic.StoreInt64(&m.calls, 0)
|
|
}
|
|
|
|
func (m *ModelTracker) GetCalls() int64 {
|
|
return atomic.LoadInt64(&m.calls)
|
|
}
|