Documentation
¶
Overview ¶
Package costtracker предоставляет обёртку LLMProvider с подсчётом токенов и стоимости.
Index ¶
- Variables
- type CostTracker
- func (ct *CostTracker) Checkpoint() domain.CostSnapshot
- func (ct *CostTracker) Generate(ctx context.Context, systemPrompt, userMessage string) (string, error)
- func (ct *CostTracker) GenerateStream(ctx context.Context, systemPrompt, userMessage string) (<-chan string, error)
- func (ct *CostTracker) Health(ctx context.Context) error
- func (ct *CostTracker) Reset()
- func (ct *CostTracker) SetDefaultModel(model string)
- func (ct *CostTracker) Snapshot() domain.CostSnapshot
Constants ¶
This section is empty.
Variables ¶
var ErrStreamingNotSupported = errors.New("LLM provider does not support streaming")
ErrStreamingNotSupported возвращается при попытке streaming, если провайдер его не поддерживает.
Functions ¶
This section is empty.
Types ¶
type CostTracker ¶
type CostTracker struct {
// contains filtered or unexported fields
}
CostTracker — прозрачная обёртка над LLMProvider, накапливающая статистику токенов и стоимости LLM-вызовов.
Потокобезопасность: sync.Mutex на запись и чтение счётчиков.
func NewCostTracker ¶
func NewCostTracker(llm domain.LLMProvider, pricing map[string]domain.ModelPricing) *CostTracker
NewCostTracker создаёт CostTracker, оборачивающий llm. Если pricing == nil, расчёт стоимости не производится (TotalCost всегда 0).
func (*CostTracker) Checkpoint ¶
func (ct *CostTracker) Checkpoint() domain.CostSnapshot
@sk-task cost-tracking: Checkpoint — алиас Snapshot (AC-007, RQ-007) Checkpoint фиксирует текущий absolute срез для последующего расчёта дельты через domain.Diff.
func (*CostTracker) Generate ¶
func (ct *CostTracker) Generate(ctx context.Context, systemPrompt, userMessage string) (string, error)
@sk-task cost-tracking: Generate — прозрачная обёртка с подсчётом (AC-001, AC-006, RQ-001, RQ-005) Generate генерирует ответ, подсчитывая токены и стоимость.
Если underlying provider реализует UsageAwareLLMProvider, используется GenerateWithUsage для извлечения token usage. Иначе — только инкремент callsCount.
func (*CostTracker) GenerateStream ¶
func (ct *CostTracker) GenerateStream(ctx context.Context, systemPrompt, userMessage string) (<-chan string, error)
@sk-task cost-tracking: GenerateStream — обёртка для streaming (AC-005, RQ-006, T3.4) GenerateStream делегирует вызов underlying StreamingLLMProvider и извлекает token usage из финального chunk, если провайдер реализует UsageAwareStreamingLLMProvider. Иначе — только инкремент callsCount.
func (*CostTracker) Health ¶
func (ct *CostTracker) Health(ctx context.Context) error
@sk-task cost-tracking: Health — делегирует underlying provider (RQ-001)
func (*CostTracker) Reset ¶
func (ct *CostTracker) Reset()
@sk-task cost-tracking: Reset — обнуление статистики (AC-004, RQ-004) Reset сбрасывает все счётчики в ноль. Конкурентно завершённые вызовы между вызовом Reset и Snapshot могут быть учтены (snapshot до/после).
func (*CostTracker) SetDefaultModel ¶
func (ct *CostTracker) SetDefaultModel(model string)
SetDefaultModel устанавливает имя модели по умолчанию для расчёта стоимости, используется если UsageAwareLLMProvider.ModelName() не найден в pricing.
func (*CostTracker) Snapshot ¶
func (ct *CostTracker) Snapshot() domain.CostSnapshot
@sk-task cost-tracking: Snapshot — атомарный срез статистики (AC-003, RQ-003) Snapshot возвращает текущую накопленную статистику с момента создания CostTracker или последнего Reset.