Documentation
¶
Index ¶
- Constants
- Variables
- func AppendModelUsageRecord(snap *UsageSnapshot, rec ModelUsageRecord)
- func Float64Ptr(v float64) *float64
- func IsModelCostMetricKey(key string) bool
- func IsPerModelTokenMetricKey(key string) bool
- func MetricUsedPercent(key string, m Metric) float64
- type AccountConfig
- type DashboardColorRole
- type DashboardCompactRow
- type DashboardDisplayStyle
- type DashboardMetricGroupOverride
- type DashboardMetricMatcher
- type DashboardRawGroup
- type DashboardResetStyle
- type DashboardStandardSection
- type DashboardWidget
- type DetailSection
- type DetailSectionStyle
- type DetailWidget
- type Metric
- type MetricGroup
- type ModelNormalizationConfig
- type ModelNormalizationOverride
- type ModelUsageRecord
- type ProviderAuthSpec
- type ProviderAuthType
- type ProviderInfo
- type ProviderSetupSpec
- type ProviderSpec
- type Status
- type TimePoint
- type TimeWindow
- type UsageProvider
- type UsageSnapshot
- func (s *UsageSnapshot) AppendModelUsage(rec ModelUsageRecord)
- func (s *UsageSnapshot) EnsureMaps()
- func (s UsageSnapshot) MetaValue(key string) (string, bool)
- func (s *UsageSnapshot) SetAttribute(key, value string)
- func (s *UsageSnapshot) SetDiagnostic(key, value string)
- func (s UsageSnapshot) WorstPercent() float64
- type WidgetDataSpec
Constants ¶
const ( ModelNormalizationGroupLineage = "lineage" ModelNormalizationGroupRelease = "release" )
Variables ¶
var ValidTimeWindows = []TimeWindow{ TimeWindow1d, TimeWindow3d, TimeWindow7d, TimeWindow30d, }
Functions ¶
func AppendModelUsageRecord ¶ added in v0.4.0
func AppendModelUsageRecord(snap *UsageSnapshot, rec ModelUsageRecord)
func Float64Ptr ¶ added in v0.4.0
func IsModelCostMetricKey ¶ added in v0.4.0
func IsPerModelTokenMetricKey ¶ added in v0.4.0
func MetricUsedPercent ¶ added in v0.4.0
Types ¶
type AccountConfig ¶
type AccountConfig struct {
ID string `json:"id"`
Provider string `json:"provider"`
Auth string `json:"auth,omitempty"` // "api_key", "oauth", "cli", "local", "token"
APIKeyEnv string `json:"api_key_env,omitempty"` // env var name holding the API key
ProbeModel string `json:"probe_model,omitempty"` // model to use for probe requests
Binary string `json:"binary,omitempty"` // path to CLI binary
BaseURL string `json:"base_url,omitempty"` // custom API base URL (e.g. for OpenRouter)
Token string `json:"-"` // runtime-only: access token (never persisted)
ExtraData map[string]string `json:"-"` // runtime-only: extra detection data
}
func MergeAccounts ¶ added in v0.5.0
func MergeAccounts(manual, autoDetected []AccountConfig) []AccountConfig
func (AccountConfig) ResolveAPIKey ¶
func (c AccountConfig) ResolveAPIKey() string
type DashboardColorRole ¶ added in v0.2.0
type DashboardColorRole string
const ( DashboardColorRoleAuto DashboardColorRole = "auto" DashboardColorRoleGreen DashboardColorRole = "green" DashboardColorRolePeach DashboardColorRole = "peach" DashboardColorRoleLavender DashboardColorRole = "lavender" DashboardColorRoleBlue DashboardColorRole = "blue" DashboardColorRoleTeal DashboardColorRole = "teal" DashboardColorRoleYellow DashboardColorRole = "yellow" DashboardColorRoleSky DashboardColorRole = "sky" DashboardColorRoleSapphire DashboardColorRole = "sapphire" DashboardColorRoleMaroon DashboardColorRole = "maroon" DashboardColorRoleFlamingo DashboardColorRole = "flamingo" DashboardColorRoleRosewater DashboardColorRole = "rosewater" )
type DashboardCompactRow ¶ added in v0.2.0
type DashboardCompactRow struct {
Label string
Keys []string
Matcher DashboardMetricMatcher
MaxSegments int
}
type DashboardDisplayStyle ¶ added in v0.2.0
type DashboardDisplayStyle string
const ( DashboardDisplayStyleDefault DashboardDisplayStyle = "default" // Detailed credits mode shows richer "remaining/today/week/models" messaging // when credit-like metrics are present. DashboardDisplayStyleDetailedCredits DashboardDisplayStyle = "detailed_credits" )
type DashboardMetricGroupOverride ¶ added in v0.2.0
type DashboardMetricMatcher ¶ added in v0.2.0
type DashboardRawGroup ¶ added in v0.2.0
type DashboardResetStyle ¶ added in v0.2.0
type DashboardResetStyle string
const ( DashboardResetStyleDefault DashboardResetStyle = "default" // Compact model resets mode groups many reset rows into model-oriented pills. DashboardResetStyleCompactModelResets DashboardResetStyle = "compact_model_resets" )
type DashboardStandardSection ¶ added in v0.4.0
type DashboardStandardSection string
DashboardStandardSection identifies a normalized tile section.
const ( DashboardSectionHeader DashboardStandardSection = "header" DashboardSectionTopUsageProgress DashboardStandardSection = "top_usage_progress" DashboardSectionModelBurn DashboardStandardSection = "model_burn" DashboardSectionClientBurn DashboardStandardSection = "client_burn" DashboardSectionToolUsage DashboardStandardSection = "tool_usage" DashboardSectionDailyUsage DashboardStandardSection = "daily_usage" DashboardSectionProviderBurn DashboardStandardSection = "provider_burn" DashboardSectionOtherData DashboardStandardSection = "other_data" )
type DashboardWidget ¶ added in v0.2.0
type DashboardWidget struct {
DisplayStyle DashboardDisplayStyle
ResetStyle DashboardResetStyle
ColorRole DashboardColorRole
// Opt-in client composition panel (client share + trend) in tile view.
ShowClientComposition bool
// Opt-in tool composition panel (tool share) in tile view.
ShowToolComposition bool
// API key provider metadata. APIKeyEnv marks a provider as configurable in API Keys tab.
APIKeyEnv string
DefaultAccountID string
// When ResetStyle is DashboardResetStyleCompactModelResets and the number of active
// reset entries meets/exceeds this value, reset pills are grouped.
ResetCompactThreshold int
GaugePriority []string
GaugeMaxLines int
CompactRows []DashboardCompactRow
RawGroups []DashboardRawGroup
MetricLabelOverrides map[string]string
MetricGroupOverrides map[string]DashboardMetricGroupOverride
CompactMetricLabelOverrides map[string]string
HideMetricKeys []string
HideMetricPrefixes []string
// Hide key-level "credits" row when richer account-level balance metric is present.
HideCreditsWhenBalancePresent bool
// Hide noisy metrics that are often zero-value for this provider.
SuppressZeroMetricKeys []string
// Hide all zero-valued non-quota metrics.
SuppressZeroNonUsageMetrics bool
// StandardSectionOrder controls normalized tile section ordering and visibility.
// Unknown values are ignored; omitted sections are hidden.
StandardSectionOrder []DashboardStandardSection
DataSpec WidgetDataSpec
}
func DefaultDashboardWidget ¶ added in v0.2.0
func DefaultDashboardWidget() DashboardWidget
func (DashboardWidget) EffectiveStandardSectionOrder ¶ added in v0.4.0
func (w DashboardWidget) EffectiveStandardSectionOrder() []DashboardStandardSection
func (DashboardWidget) MissingMetrics ¶ added in v0.4.0
func (w DashboardWidget) MissingMetrics(snap UsageSnapshot) []string
type DetailSection ¶ added in v0.3.0
type DetailSection struct {
Name string
Order int
Style DetailSectionStyle
}
type DetailSectionStyle ¶ added in v0.3.0
type DetailSectionStyle string
const ( DetailSectionStyleUsage DetailSectionStyle = "usage" DetailSectionStyleSpending DetailSectionStyle = "spending" DetailSectionStyleTokens DetailSectionStyle = "tokens" DetailSectionStyleActivity DetailSectionStyle = "activity" DetailSectionStyleList DetailSectionStyle = "list" DetailSectionStyleModels DetailSectionStyle = "models" DetailSectionStyleTrends DetailSectionStyle = "trends" )
type DetailWidget ¶ added in v0.3.0
type DetailWidget struct {
Sections []DetailSection
}
func DefaultDetailWidget ¶ added in v0.3.0
func DefaultDetailWidget() DetailWidget
func (DetailWidget) SectionOrder ¶ added in v0.3.0
func (w DetailWidget) SectionOrder(name string) int
func (DetailWidget) SectionStyle ¶ added in v0.3.0
func (w DetailWidget) SectionStyle(name string) DetailSectionStyle
type Metric ¶
type MetricGroup ¶ added in v0.4.0
type MetricGroup string
const ( MetricGroupUsage MetricGroup = "Usage" MetricGroupSpending MetricGroup = "Spending" MetricGroupTokens MetricGroup = "Tokens" MetricGroupActivity MetricGroup = "Activity" )
func InferMetricGroup ¶ added in v0.4.0
func InferMetricGroup(key string, m Metric) MetricGroup
type ModelNormalizationConfig ¶ added in v0.4.0
type ModelNormalizationConfig struct {
Enabled bool `json:"enabled"`
GroupBy string `json:"group_by,omitempty"` // lineage | release
MinConfidence float64 `json:"min_confidence,omitempty"` // 0..1
Overrides []ModelNormalizationOverride `json:"overrides,omitempty"`
}
func DefaultModelNormalizationConfig ¶ added in v0.4.0
func DefaultModelNormalizationConfig() ModelNormalizationConfig
func NormalizeModelNormalizationConfig ¶ added in v0.4.0
func NormalizeModelNormalizationConfig(cfg ModelNormalizationConfig) ModelNormalizationConfig
type ModelNormalizationOverride ¶ added in v0.4.0
type ModelNormalizationOverride struct {
Provider string `json:"provider,omitempty"`
RawModelID string `json:"raw_model_id"`
CanonicalLineage string `json:"canonical_lineage_id"`
CanonicalRelease string `json:"canonical_release_id,omitempty"`
CanonicalModel string `json:"canonical_model,omitempty"`
}
type ModelUsageRecord ¶ added in v0.4.0
type ModelUsageRecord struct {
RawModelID string `json:"raw_model_id"`
RawSource string `json:"raw_source,omitempty"` // api | jsonl | sqlite | metrics_fallback
CanonicalLineageID string `json:"canonical_lineage_id,omitempty"`
CanonicalReleaseID string `json:"canonical_release_id,omitempty"`
CanonicalVendor string `json:"canonical_vendor,omitempty"`
CanonicalFamily string `json:"canonical_family,omitempty"`
CanonicalVariant string `json:"canonical_variant,omitempty"`
Canonical string `json:"canonical,omitempty"` // Canonical model name for consistent identification
Confidence float64 `json:"confidence,omitempty"` // 0..1
Reason string `json:"reason,omitempty"`
Window string `json:"window,omitempty"`
Dimensions map[string]string `json:"dimensions,omitempty"` // provider/account/client/endpoint
InputTokens *float64 `json:"input_tokens,omitempty"`
OutputTokens *float64 `json:"output_tokens,omitempty"`
CachedTokens *float64 `json:"cached_tokens,omitempty"`
ReasoningTokens *float64 `json:"reasoning_tokens,omitempty"`
TotalTokens *float64 `json:"total_tokens,omitempty"`
CostUSD *float64 `json:"cost_usd,omitempty"`
Requests *float64 `json:"requests,omitempty"`
}
func BuildModelUsageFromSnapshotMetrics ¶ added in v0.4.0
func BuildModelUsageFromSnapshotMetrics(s UsageSnapshot) []ModelUsageRecord
func (*ModelUsageRecord) EnsureDimensions ¶ added in v0.4.0
func (r *ModelUsageRecord) EnsureDimensions()
func (*ModelUsageRecord) SetDimension ¶ added in v0.4.0
func (r *ModelUsageRecord) SetDimension(key, value string)
type ProviderAuthSpec ¶ added in v0.4.0
type ProviderAuthSpec struct {
Type ProviderAuthType
APIKeyEnv string
DefaultAccountID string
}
ProviderAuthSpec defines how a provider authenticates and how users configure it.
type ProviderAuthType ¶ added in v0.4.0
type ProviderAuthType string
const ( ProviderAuthTypeUnknown ProviderAuthType = "" ProviderAuthTypeAPIKey ProviderAuthType = "api_key" ProviderAuthTypeOAuth ProviderAuthType = "oauth" ProviderAuthTypeCLI ProviderAuthType = "cli" ProviderAuthTypeLocal ProviderAuthType = "local" ProviderAuthTypeToken ProviderAuthType = "token" )
type ProviderInfo ¶
type ProviderSetupSpec ¶ added in v0.4.0
ProviderSetupSpec describes setup entry points and quickstart instructions.
type ProviderSpec ¶ added in v0.4.0
type ProviderSpec struct {
ID string
Info ProviderInfo
Auth ProviderAuthSpec
Setup ProviderSetupSpec
Dashboard DashboardWidget
Detail DetailWidget
}
ProviderSpec is the canonical provider definition used for registration and UI metadata.
type TimeWindow ¶ added in v0.5.2
type TimeWindow string
TimeWindow represents a configurable time window for filtering usage data.
const ( TimeWindow1d TimeWindow = "1d" TimeWindow3d TimeWindow = "3d" TimeWindow7d TimeWindow = "7d" TimeWindow30d TimeWindow = "30d" )
func LargestWindowFitting ¶ added in v0.5.2
func LargestWindowFitting(maxDays int) TimeWindow
LargestWindowFitting returns the largest valid TimeWindow whose Days() <= maxDays. Falls back to the smallest window if none fit.
func NextTimeWindow ¶ added in v0.5.2
func NextTimeWindow(current TimeWindow) TimeWindow
NextTimeWindow returns the next time window in the cycle.
func ParseTimeWindow ¶ added in v0.5.2
func ParseTimeWindow(s string) TimeWindow
func (TimeWindow) Days ¶ added in v0.5.2
func (tw TimeWindow) Days() int
Days returns the window size in days.
func (TimeWindow) Hours ¶ added in v0.5.2
func (tw TimeWindow) Hours() int
Hours returns the window size in hours.
func (TimeWindow) Label ¶ added in v0.5.2
func (tw TimeWindow) Label() string
func (TimeWindow) SQLiteOffset ¶ added in v0.5.2
func (tw TimeWindow) SQLiteOffset() string
SQLiteOffset returns the SQLite datetime offset string for this window (e.g., "-7 day").
type UsageProvider ¶ added in v0.4.0
type UsageProvider interface {
ID() string
Describe() ProviderInfo
// Spec defines provider-level auth/setup metadata and presentation defaults.
Spec() ProviderSpec
// DashboardWidget defines how provider metrics should be presented in dashboard tiles.
DashboardWidget() DashboardWidget
// DetailWidget defines how sections should be rendered in the details panel.
DetailWidget() DetailWidget
Fetch(ctx context.Context, acct AccountConfig) (UsageSnapshot, error)
}
type UsageSnapshot ¶ added in v0.4.0
type UsageSnapshot struct {
ProviderID string `json:"provider_id"`
AccountID string `json:"account_id"`
Timestamp time.Time `json:"timestamp"`
Status Status `json:"status"`
Metrics map[string]Metric `json:"metrics"` // keys like "rpm", "tpm", "rpd"
Resets map[string]time.Time `json:"resets,omitempty"` // e.g. "rpm_reset"
Attributes map[string]string `json:"attributes,omitempty"` // normalized provider/account metadata
Diagnostics map[string]string `json:"diagnostics,omitempty"` // non-fatal errors, warnings, probe/debug notes
Raw map[string]string `json:"raw,omitempty"` // provider metadata/debug bag (not for primary quota analytics)
ModelUsage []ModelUsageRecord `json:"model_usage,omitempty"` // per-model usage rows with canonical IDs
DailySeries map[string][]TimePoint `json:"daily_series,omitempty"` // time-indexed data (e.g. "messages", "cost", "tokens_<model>")
Message string `json:"message,omitempty"` // human-readable summary
}
func NewAuthSnapshot ¶ added in v0.5.0
func NewAuthSnapshot(providerID, accountID, message string) UsageSnapshot
func NewUsageSnapshot ¶ added in v0.5.0
func NewUsageSnapshot(providerID, accountID string) UsageSnapshot
func NormalizeUsageSnapshotWithConfig ¶ added in v0.4.0
func NormalizeUsageSnapshotWithConfig(s UsageSnapshot, modelCfg ModelNormalizationConfig) UsageSnapshot
func (*UsageSnapshot) AppendModelUsage ¶ added in v0.4.0
func (s *UsageSnapshot) AppendModelUsage(rec ModelUsageRecord)
func (*UsageSnapshot) EnsureMaps ¶ added in v0.4.0
func (s *UsageSnapshot) EnsureMaps()
func (UsageSnapshot) MetaValue ¶ added in v0.4.0
func (s UsageSnapshot) MetaValue(key string) (string, bool)
func (*UsageSnapshot) SetAttribute ¶ added in v0.4.0
func (s *UsageSnapshot) SetAttribute(key, value string)
func (*UsageSnapshot) SetDiagnostic ¶ added in v0.4.0
func (s *UsageSnapshot) SetDiagnostic(key, value string)
func (UsageSnapshot) WorstPercent ¶ added in v0.4.0
func (s UsageSnapshot) WorstPercent() float64
type WidgetDataSpec ¶ added in v0.4.0
type WidgetDataSpec struct {
RequiredMetricKeys []string
OptionalMetricKeys []string
MetricPrefixes []string
}
WidgetDataSpec describes the expected metric payload for a dashboard widget. RequiredMetricKeys provide a strict contract; MetricPrefixes provide extensibility.