package domain import "time" type Protocol string const ( ProtocolOpenAI Protocol = "openai" ProtocolAnthropic Protocol = "anthropic" ) type Principal struct { KeyID string TenantID string ProjectID string Scopes []string } type Provider struct { ID string Protocol Protocol BaseURL string APIKey string } type Route struct { Provider Provider UpstreamModel string Priority int Weight int } type Model struct { ID string OwnedBy string InputPriceMicrosPerMillion int64 OutputPriceMicrosPerMillion int64 CacheReadPriceMicrosPerMillion int64 CacheWritePriceMicrosPerMillion int64 Routes []Route } type Usage struct { InputTokens int64 `json:"input_tokens,omitempty"` OutputTokens int64 `json:"output_tokens,omitempty"` TotalTokens int64 `json:"total_tokens,omitempty"` CacheCreationInputTokens int64 `json:"cache_creation_input_tokens,omitempty"` CacheReadInputTokens int64 `json:"cache_read_input_tokens,omitempty"` } type UsageEvent struct { RequestID string `json:"request_id"` KeyID string `json:"key_id"` TenantID string `json:"tenant_id"` ProjectID string `json:"project_id"` PublicModel string `json:"public_model"` ProviderID string `json:"provider_id,omitempty"` UpstreamModel string `json:"upstream_model,omitempty"` Protocol Protocol `json:"protocol"` Stream bool `json:"stream"` StatusCode int `json:"status_code"` Success bool `json:"success"` ErrorType string `json:"error_type,omitempty"` Attempts int `json:"attempts"` StartedAt time.Time `json:"started_at"` DurationMS int64 `json:"duration_ms"` Usage Usage `json:"usage"` } // LimitPolicy is the immutable runtime view of a project's commercial limits. // Zero values disable the corresponding limit. type LimitPolicy struct { TenantID string `json:"tenant_id"` ProjectID string `json:"project_id"` RequestsPerMinute int64 `json:"requests_per_minute"` TokensPerMinute int64 `json:"tokens_per_minute"` Concurrent int64 `json:"concurrent_requests"` MonthlySpendMicros int64 `json:"monthly_spend_micros"` }