tokenusage

package
v0.1.7 Latest Latest
Warning

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

Go to latest
Published: May 6, 2026 License: MIT Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ApproximateRequestTokens

func ApproximateRequestTokens(messages []llm.Message) int64

ApproximateRequestTokens estimates the current request token size.

func ApproximateTokens

func ApproximateTokens(text string) int64

ApproximateTokens uses a conservative fallback estimator (~4 chars/token).

func ResolveTurnUsage

func ResolveTurnUsage(request llm.ChatRequest, reply *llm.Message) llm.Usage

ResolveTurnUsage returns provider usage when present, otherwise falls back to approximation from request/reply payloads.

Types

type Agent

type Agent struct {
	// contains filtered or unexported fields
}

Agent 示例:将token记录接入业务调用链。

func (*Agent) ProcessMessage

func (a *Agent) ProcessMessage(ctx context.Context, msg *Message) (*Response, error)

type Alert

type Alert struct {
	Type    string    `json:"type"`  // usage_quota/error_rate/latency
	Level   string    `json:"level"` // warning/critical
	Message string    `json:"message"`
	Value   float64   `json:"value"`
	Time    time.Time `json:"time"`
}

type AlertResult

type AlertResult struct {
	Alerts []*Alert `json:"alerts"`
}

AlertResult 告警结果。

type Config

type Config struct {
	StorageType     string        `json:"storage_type"` // memory/file/database
	StoragePath     string        `json:"storage_path"`
	BackupInterval  time.Duration `json:"backup_interval"`
	MaxSessions     int           `json:"max_sessions"`
	AlertThreshold  int64         `json:"alert_threshold"`
	EnableRealtime  bool          `json:"enable_realtime"`
	RetentionDays   int           `json:"retention_days"`
	MonitorInterval time.Duration `json:"monitor_interval,omitempty"`
	BatchSize       int           `json:"batch_size,omitempty"`
	DatabaseDriver  string        `json:"database_driver,omitempty"`
}

Config 配置结构。

func DefaultConfig

func DefaultConfig() Config

DefaultConfig returns a pragmatic production-safe default.

type DailyStats

type DailyStats struct {
	Date         string           `json:"date"`
	InputTokens  int64            `json:"input_tokens"`
	OutputTokens int64            `json:"output_tokens"`
	TotalTokens  int64            `json:"total_tokens"`
	RequestCount int64            `json:"request_count"`
	SuccessCount int64            `json:"success_count"`
	ErrorCount   int64            `json:"error_count"`
	AvgLatencyMs float64          `json:"avg_latency_ms"`
	ModelTokens  map[string]int64 `json:"model_tokens,omitempty"`
}

type DatabaseStorage

type DatabaseStorage struct {
	// contains filtered or unexported fields
}

DatabaseStorage 数据库存储实现。 该实现依赖外部注册的 database/sql driver。

func NewDatabaseStorage

func NewDatabaseStorage(driverName, dsn string) (*DatabaseStorage, error)

func (*DatabaseStorage) Cleanup

func (s *DatabaseStorage) Cleanup() error

func (*DatabaseStorage) Close

func (s *DatabaseStorage) Close() error

func (*DatabaseStorage) DeleteSession

func (s *DatabaseStorage) DeleteSession(sessionID string) error

func (*DatabaseStorage) ListSessions

func (s *DatabaseStorage) ListSessions(start, end time.Time) ([]*SessionStats, error)

func (*DatabaseStorage) LoadHistorical

func (s *DatabaseStorage) LoadHistorical() (*HistoricalData, error)

func (*DatabaseStorage) LoadSession

func (s *DatabaseStorage) LoadSession(sessionID string) (*SessionStats, error)

func (*DatabaseStorage) SaveHistorical

func (s *DatabaseStorage) SaveHistorical(data *HistoricalData) error

func (*DatabaseStorage) SaveSession

func (s *DatabaseStorage) SaveSession(sessionID string, stats *SessionStats) error

type ErrorCode

type ErrorCode string
const (
	ErrCodeInvalidConfig ErrorCode = "invalid_config"
	ErrCodeInvalidInput  ErrorCode = "invalid_input"
	ErrCodeStorage       ErrorCode = "storage_error"
	ErrCodeTimeout       ErrorCode = "timeout"
	ErrCodeNotFound      ErrorCode = "not_found"
	ErrCodeInternal      ErrorCode = "internal_error"
)

type ExportRequest

type ExportRequest struct {
	Format string         `json:"format"` // json/csv/excel
	Report *ReportRequest `json:"report"`
}

type FileStorage

type FileStorage struct {
	// contains filtered or unexported fields
}

FileStorage JSON文件存储实现。

func NewFileStorage

func NewFileStorage(path string) (*FileStorage, error)

func (*FileStorage) Cleanup

func (s *FileStorage) Cleanup() error

func (*FileStorage) DeleteSession

func (s *FileStorage) DeleteSession(sessionID string) error

func (*FileStorage) ListSessions

func (s *FileStorage) ListSessions(start, end time.Time) ([]*SessionStats, error)

func (*FileStorage) LoadHistorical

func (s *FileStorage) LoadHistorical() (*HistoricalData, error)

func (*FileStorage) LoadSession

func (s *FileStorage) LoadSession(sessionID string) (*SessionStats, error)

func (*FileStorage) SaveHistorical

func (s *FileStorage) SaveHistorical(data *HistoricalData) error

func (*FileStorage) SaveSession

func (s *FileStorage) SaveSession(sessionID string, stats *SessionStats) error

type HistoricalData

type HistoricalData struct {
	DailyStats   map[string]*DailyStats   `json:"daily_stats"`   // 按日期
	WeeklyStats  map[string]*WeeklyStats  `json:"weekly_stats"`  // 按周
	MonthlyStats map[string]*MonthlyStats `json:"monthly_stats"` // 按月
	ModelStats   map[string]*ModelStats   `json:"model_stats"`   // 按模型
	Records      []*UsageRecord           `json:"records,omitempty"`
}

HistoricalData 历史数据。

type LLMProvider

type LLMProvider interface {
	Complete(ctx context.Context, content string) (*Response, error)
	ModelName() string
}

LLMProvider 示例接口,演示如何集成TokenUsageManager。

type MemoryStorage

type MemoryStorage struct {
	// contains filtered or unexported fields
}

MemoryStorage 内存存储实现。

func NewMemoryStorage

func NewMemoryStorage() *MemoryStorage

func (*MemoryStorage) Cleanup

func (s *MemoryStorage) Cleanup() error

func (*MemoryStorage) DeleteSession

func (s *MemoryStorage) DeleteSession(sessionID string) error

func (*MemoryStorage) ListSessions

func (s *MemoryStorage) ListSessions(start, end time.Time) ([]*SessionStats, error)

func (*MemoryStorage) LoadHistorical

func (s *MemoryStorage) LoadHistorical() (*HistoricalData, error)

func (*MemoryStorage) LoadSession

func (s *MemoryStorage) LoadSession(sessionID string) (*SessionStats, error)

func (*MemoryStorage) SaveHistorical

func (s *MemoryStorage) SaveHistorical(data *HistoricalData) error

func (*MemoryStorage) SaveSession

func (s *MemoryStorage) SaveSession(sessionID string, stats *SessionStats) error

type Message

type Message struct {
	Content string
}

type Metrics

type Metrics struct {
	CurrentTPS     float64       `json:"current_tps"` // 每秒token数
	PeakTPS        float64       `json:"peak_tps"`
	ActiveSessions int           `json:"active_sessions"`
	ErrorRate      float64       `json:"error_rate"`
	Latency        time.Duration `json:"avg_latency"`
}

Metrics 实时指标。

type ModelStats

type ModelStats struct {
	ModelName    string    `json:"model_name"`
	InputTokens  int64     `json:"input_tokens"`
	OutputTokens int64     `json:"output_tokens"`
	TotalTokens  int64     `json:"total_tokens"`
	RequestCount int64     `json:"request_count"`
	SuccessCount int64     `json:"success_count"`
	ErrorCount   int64     `json:"error_count"`
	AvgLatencyMs float64   `json:"avg_latency_ms"`
	LastUpdated  time.Time `json:"last_updated"`
}

type ModelUsageReport

type ModelUsageReport struct {
	ModelName         string        `json:"model_name"`
	Period            string        `json:"period"`
	TotalInputTokens  int64         `json:"total_input_tokens"`
	TotalOutputTokens int64         `json:"total_output_tokens"`
	TotalTokens       int64         `json:"total_tokens"`
	RequestCount      int64         `json:"request_count"`
	SuccessRate       float64       `json:"success_rate"`
	AverageTokens     float64       `json:"average_tokens"`
	AvgLatency        time.Duration `json:"avg_latency"`
	StartDate         time.Time     `json:"start_date"`
	EndDate           time.Time     `json:"end_date"`
}

type MonthlyStats

type MonthlyStats struct {
	Month        string           `json:"month"`
	InputTokens  int64            `json:"input_tokens"`
	OutputTokens int64            `json:"output_tokens"`
	TotalTokens  int64            `json:"total_tokens"`
	RequestCount int64            `json:"request_count"`
	SuccessCount int64            `json:"success_count"`
	ErrorCount   int64            `json:"error_count"`
	AvgLatencyMs float64          `json:"avg_latency_ms"`
	ModelTokens  map[string]int64 `json:"model_tokens,omitempty"`
}

type Notifier

type Notifier interface {
	Notify(ctx context.Context, alert *Alert) error
}

type RealtimeStats

type RealtimeStats struct {
	Metrics     Metrics         `json:"metrics"`
	Sessions    []*SessionStats `json:"sessions"`
	GeneratedAt time.Time       `json:"generated_at"`
	TotalTokens int64           `json:"total_tokens"`
}

type ReportRequest

type ReportRequest struct {
	Type      string       `json:"type"` // daily/weekly/monthly/custom
	StartDate time.Time    `json:"start_date"`
	EndDate   time.Time    `json:"end_date"`
	Format    string       `json:"format"` // json/csv/excel
	Filters   *UsageFilter `json:"filters"`
}

ReportRequest 报表请求。

type Response

type Response struct {
	Content string
}

type SessionStats

type SessionStats struct {
	SessionID     string            `json:"session_id"`
	StartTime     time.Time         `json:"start_time"`
	LastUpdate    time.Time         `json:"last_update"`
	InputTokens   int64             `json:"input_tokens"`
	OutputTokens  int64             `json:"output_tokens"`
	TotalTokens   int64             `json:"total_tokens"`
	RequestCount  int               `json:"request_count"`
	AverageTokens float64           `json:"average_tokens"`
	Metadata      map[string]string `json:"metadata"`
}

SessionStats 会话统计。

type Storage

type Storage interface {
	SaveSession(sessionID string, stats *SessionStats) error
	LoadSession(sessionID string) (*SessionStats, error)
	SaveHistorical(data *HistoricalData) error
	LoadHistorical() (*HistoricalData, error)
	ListSessions(start, end time.Time) ([]*SessionStats, error)
	DeleteSession(sessionID string) error
	Cleanup() error
}

Storage 存储接口。

type TokenRecordRequest

type TokenRecordRequest struct {
	SessionID    string            `json:"session_id"`
	ModelName    string            `json:"model_name"`
	InputTokens  int64             `json:"input_tokens"`
	OutputTokens int64             `json:"output_tokens"`
	RequestID    string            `json:"request_id"`
	Latency      time.Duration     `json:"latency"`
	Success      bool              `json:"success"`
	Metadata     map[string]string `json:"metadata"`
}

TokenRecordRequest token记录请求。

type TokenUsageManager

type TokenUsageManager struct {
	// contains filtered or unexported fields
}

TokenUsageManager token使用量管理器。

func NewTokenUsageManager

func NewTokenUsageManager(cfg *Config) (*TokenUsageManager, error)

NewTokenUsageManager 创建Token使用量管理器。

func (*TokenUsageManager) CheckThresholds

func (tm *TokenUsageManager) CheckThresholds() (*AlertResult, error)

CheckThresholds 检查阈值。

func (*TokenUsageManager) Close

func (tm *TokenUsageManager) Close() error

Close 停止后台任务并落盘。

func (*TokenUsageManager) ExportData

func (tm *TokenUsageManager) ExportData(req *ExportRequest) ([]byte, error)

ExportData 导出数据。

func (*TokenUsageManager) GenerateReport

func (tm *TokenUsageManager) GenerateReport(req *ReportRequest) (*UsageReport, error)

GenerateReport 生成使用报告。

func (*TokenUsageManager) GetModelUsage

func (tm *TokenUsageManager) GetModelUsage(modelName string, period string) (*ModelUsageReport, error)

GetModelUsage 获取模型使用统计。

func (*TokenUsageManager) GetRealtimeStats

func (tm *TokenUsageManager) GetRealtimeStats() (*RealtimeStats, error)

GetRealtimeStats 获取实时统计。

func (*TokenUsageManager) GetSessionStats

func (tm *TokenUsageManager) GetSessionStats(sessionID string) (*SessionStats, error)

GetSessionStats 获取会话统计。

func (*TokenUsageManager) GetUsageByPeriod

func (tm *TokenUsageManager) GetUsageByPeriod(start, end time.Time, filter *UsageFilter) (*UsageReport, error)

GetUsageByPeriod 获取时间段使用量。

func (*TokenUsageManager) RecordTokenUsage

func (tm *TokenUsageManager) RecordTokenUsage(ctx context.Context, req *TokenRecordRequest) error

RecordTokenUsage 记录token使用。

func (*TokenUsageManager) SetNotifier

func (tm *TokenUsageManager) SetNotifier(notifier Notifier)

func (*TokenUsageManager) StartMonitoring

func (tm *TokenUsageManager) StartMonitoring(ctx context.Context) error

StartMonitoring 启动监控。

type UsageError

type UsageError struct {
	Code    ErrorCode
	Message string
	Err     error
}

func (*UsageError) Error

func (e *UsageError) Error() string

func (*UsageError) Unwrap

func (e *UsageError) Unwrap() error

type UsageFilter

type UsageFilter struct {
	SessionIDs []string          `json:"session_ids,omitempty"`
	ModelNames []string          `json:"model_names,omitempty"`
	Success    *bool             `json:"success,omitempty"`
	Metadata   map[string]string `json:"metadata,omitempty"`
}

type UsageRecord

type UsageRecord struct {
	Time         time.Time         `json:"time"`
	SessionID    string            `json:"session_id"`
	ModelName    string            `json:"model_name"`
	InputTokens  int64             `json:"input_tokens"`
	OutputTokens int64             `json:"output_tokens"`
	TotalTokens  int64             `json:"total_tokens"`
	RequestID    string            `json:"request_id"`
	Latency      time.Duration     `json:"latency"`
	Success      bool              `json:"success"`
	Metadata     map[string]string `json:"metadata,omitempty"`
}

type UsageReport

type UsageReport struct {
	Type              string                  `json:"type"`
	StartDate         time.Time               `json:"start_date"`
	EndDate           time.Time               `json:"end_date"`
	TotalInputTokens  int64                   `json:"total_input_tokens"`
	TotalOutputTokens int64                   `json:"total_output_tokens"`
	TotalTokens       int64                   `json:"total_tokens"`
	RequestCount      int64                   `json:"request_count"`
	SuccessCount      int64                   `json:"success_count"`
	ErrorCount        int64                   `json:"error_count"`
	AvgLatency        time.Duration           `json:"avg_latency"`
	SessionStats      map[string]SessionStats `json:"session_stats,omitempty"`
	ModelStats        map[string]ModelStats   `json:"model_stats,omitempty"`
	DailyStats        map[string]DailyStats   `json:"daily_stats,omitempty"`
	GeneratedAt       time.Time               `json:"generated_at"`
}

type WeeklyStats

type WeeklyStats struct {
	Week         string           `json:"week"`
	InputTokens  int64            `json:"input_tokens"`
	OutputTokens int64            `json:"output_tokens"`
	TotalTokens  int64            `json:"total_tokens"`
	RequestCount int64            `json:"request_count"`
	SuccessCount int64            `json:"success_count"`
	ErrorCount   int64            `json:"error_count"`
	AvgLatencyMs float64          `json:"avg_latency_ms"`
	ModelTokens  map[string]int64 `json:"model_tokens,omitempty"`
}

Jump to

Keyboard shortcuts

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