usage

package
v0.0.82 Latest Latest
Warning

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

Go to latest
Published: Feb 18, 2026 License: MIT Imports: 11 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ProviderClaudeCode = "claude-code"
	ProviderGeminiCLI  = "gemini-cli"
	ProviderTermLLM    = "term-llm"
)

Provider constants for identifying data sources

Variables

This section is empty.

Functions

func CountProviders

func CountProviders(entries []UsageEntry) int

CountProviders returns the number of unique providers in the entries

func DefaultDateRange

func DefaultDateRange() (since, until time.Time)

DefaultDateRange returns the default date range (last 7 days)

func GetTrackedExternallyBy

func GetTrackedExternallyBy(providerName string) string

GetTrackedExternallyBy returns the external tracking provider for a given term-llm provider name

func ParseDateYYYYMMDD

func ParseDateYYYYMMDD(s string) (time.Time, error)

ParseDateYYYYMMDD parses a date in YYYYMMDD format

Types

type DailyUsage

type DailyUsage struct {
	Date             string // YYYY-MM-DD format
	InputTokens      int
	OutputTokens     int
	CacheWriteTokens int
	CacheReadTokens  int
	ReasoningTokens  int
	TotalCost        float64
	ModelsUsed       []string
	Entries          []UsageEntry // Raw entries for this day (used for breakdown)
}

DailyUsage represents aggregated usage for a single day

func AggregateDaily

func AggregateDaily(entries []UsageEntry) []DailyUsage

AggregateDaily aggregates usage entries by day

func CalculateTotals

func CalculateTotals(daily []DailyUsage) DailyUsage

CalculateTotals calculates total usage across all daily entries

func (DailyUsage) TotalTokens

func (d DailyUsage) TotalTokens() int

TotalTokens returns the sum of all token types for the day

type FilterOptions

type FilterOptions struct {
	Since           time.Time // Include entries on or after this time
	Until           time.Time // Include entries on or before this time
	Provider        string    // Filter to specific provider, or empty for all
	IncludeExternal bool      // Include term-llm entries with TrackedExternallyBy set (opt-in)
}

FilterOptions contains options for filtering usage data

type LoadResult

type LoadResult struct {
	Entries            []UsageEntry
	MissingDirectories []string
	Errors             []error
}

LoadResult contains the result of loading usage data from a provider

func LoadAllUsage

func LoadAllUsage() LoadResult

LoadAllUsage loads usage data from all providers

func LoadClaudeUsage

func LoadClaudeUsage() LoadResult

LoadClaudeUsage loads usage data from Claude Code JSONL files

func LoadGeminiUsage

func LoadGeminiUsage() LoadResult

LoadGeminiUsage loads usage data from Gemini CLI session files

func LoadTermLLMUsage

func LoadTermLLMUsage() LoadResult

LoadTermLLMUsage loads usage data from term-llm's own log files

func LoadTermLLMUsageForDateRange

func LoadTermLLMUsageForDateRange(since, until time.Time) LoadResult

LoadTermLLMUsageForDateRange loads term-llm usage data for a specific date range This is more efficient than loading all data and filtering, as it only reads files within the date range.

func (LoadResult) Filter

func (r LoadResult) Filter(opts FilterOptions) []UsageEntry

Filter returns entries matching the filter options

func (*LoadResult) Merge

func (r *LoadResult) Merge(other LoadResult)

Merge combines another LoadResult into this one

type LogEntry

type LogEntry struct {
	Timestamp           time.Time `json:"timestamp"`
	SessionID           string    `json:"session_id,omitempty"`
	Model               string    `json:"model"`
	Provider            string    `json:"provider"`
	InputTokens         int       `json:"input_tokens"`
	OutputTokens        int       `json:"output_tokens"`
	CacheWriteTokens    int       `json:"cache_write_tokens,omitempty"`
	CacheReadTokens     int       `json:"cache_read_tokens,omitempty"`
	CostUSD             float64   `json:"cost_usd,omitempty"`
	TrackedExternallyBy string    `json:"tracked_externally_by,omitempty"`
}

LogEntry represents a single usage log entry written by term-llm

type Logger

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

Logger writes usage entries to daily JSONL files

func DefaultLogger

func DefaultLogger() *Logger

DefaultLogger returns the singleton logger instance

func NewLogger

func NewLogger() *Logger

NewLogger creates a new Logger with the default XDG data directory

func (*Logger) Log

func (l *Logger) Log(entry LogEntry) error

Log writes a usage entry to the appropriate daily file

type ModelBreakdown

type ModelBreakdown struct {
	Model            string
	InputTokens      int
	OutputTokens     int
	CacheWriteTokens int
	CacheReadTokens  int
	ReasoningTokens  int
	Cost             float64
}

ModelBreakdown represents usage breakdown by model

func GetModelBreakdown

func GetModelBreakdown(entries []UsageEntry) []ModelBreakdown

GetModelBreakdown returns token usage broken down by model for a set of entries

type ModelPricing

type ModelPricing struct {
	InputCostPerToken           float64 `json:"input_cost_per_token"`
	OutputCostPerToken          float64 `json:"output_cost_per_token"`
	CacheCreationInputTokenCost float64 `json:"cache_creation_input_token_cost"`
	CacheReadInputTokenCost     float64 `json:"cache_read_input_token_cost"`
	InputCostPerTokenAbove200k  float64 `json:"input_cost_per_token_above_200k_tokens"`
	OutputCostPerTokenAbove200k float64 `json:"output_cost_per_token_above_200k_tokens"`
	CacheCreationCostAbove200k  float64 `json:"cache_creation_input_token_cost_above_200k_tokens"`
	CacheReadCostAbove200k      float64 `json:"cache_read_input_token_cost_above_200k_tokens"`
}

ModelPricing contains pricing information for a model

type PricingFetcher

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

PricingFetcher fetches and caches model pricing from LiteLLM

func NewPricingFetcher

func NewPricingFetcher() *PricingFetcher

NewPricingFetcher creates a new pricing fetcher

func (*PricingFetcher) CalculateCost

func (p *PricingFetcher) CalculateCost(entry UsageEntry) (float64, error)

CalculateCost calculates the cost for a usage entry

func (*PricingFetcher) GetPricing

func (p *PricingFetcher) GetPricing(modelName string) (ModelPricing, error)

GetPricing returns pricing for a model, fetching if necessary

type ProviderBreakdown

type ProviderBreakdown struct {
	Provider         string
	InputTokens      int
	OutputTokens     int
	CacheWriteTokens int
	CacheReadTokens  int
	ReasoningTokens  int
	Cost             float64
}

ProviderBreakdown represents usage breakdown by provider

func GetProviderBreakdown

func GetProviderBreakdown(entries []UsageEntry) []ProviderBreakdown

GetProviderBreakdown returns token usage broken down by provider for a set of entries

type UsageEntry

type UsageEntry struct {
	Timestamp           time.Time
	SessionID           string
	Model               string
	InputTokens         int
	OutputTokens        int
	CacheWriteTokens    int     // cache_creation for Claude
	CacheReadTokens     int     // cache_read for Claude, cached for Gemini
	ReasoningTokens     int     // Codex reasoning_output, Gemini thoughts
	CostUSD             float64 // Pre-calculated cost if available
	Provider            string  // ProviderClaudeCode, ProviderCodex, ProviderGeminiCLI, or ProviderTermLLM
	TrackedExternallyBy string  // For term-llm entries: "claude-code", "codex", "gemini-cli", or "" for direct API
}

UsageEntry represents a single usage event from any provider

func CalculateCosts

func CalculateCosts(entries []UsageEntry, fetcher *PricingFetcher) []UsageEntry

CalculateCosts uses the pricing fetcher to calculate costs for entries without pre-calculated costs

func (UsageEntry) TotalTokens

func (e UsageEntry) TotalTokens() int

TotalTokens returns the sum of all token types

Jump to

Keyboard shortcuts

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