13 KiB
Executable File
Data Model Reference
This document summarizes the durable and in-memory data shapes that define Frosty Deno's configuration, governance, caching, logging, and operator surfaces.
Durable storage model
PostgreSQL state store
packages/config/src/store_postgres.ts defines two generic durable tables:
| Object | Shape | Purpose |
|---|---|---|
frosty.state |
key_text text primary key, key_path text[], value jsonb, updated_at timestamptz |
Durable JSON document store for config, hierarchy, settings, logs, and related state |
frosty.counters |
key_text text primary key, key_path text[], value bigint, updated_at timestamptz |
Durable atomic counters for usage, cost, budgets, and shared rate-limit windows |
State and counter namespaces are intentionally separate so additive counters never masquerade as ordinary JSON documents.
Cache and vector tables
| Object | Purpose | Source |
|---|---|---|
frosty.response_cache |
Cached response payloads with TTL support | packages/cache/src/pg_cache.ts |
FROSTY_PG_TABLE defaulting to frosty_vectors |
pgvector embeddings for semantic cache lookup | apps/gateway/context.ts, packages/cache/src/pgvector.ts |
Key-path conventions in frosty.state
The durable store is key-path driven. Important observed prefixes include:
| Prefix | Stored object family |
|---|---|
['config', 'providers', <id>] |
Provider account configuration |
['config', 'settings'] |
Gateway config-level settings data |
['virtual_keys', ...] |
Virtual-key state |
['teams', ...] |
Team hierarchy data |
['customers', ...] |
Customer hierarchy data |
['settings', <group>] |
Per-group operator override fragments |
['logs', ...] |
Durable log entries when log storage is enabled |
['config', 'crypto', 'dek'] |
Wrapped data-encryption key record for encrypted config state |
Configuration entities
ProviderAccountConfig
Defined in packages/contracts/src/config.ts.
Major fields:
| Field | Type | Purpose |
|---|---|---|
id |
string |
Stable provider account id |
type |
enum | Provider family such as openai, anthropic, azure, bedrock, vertex, openai-compatible, or lmstudio |
apiKey |
string? |
Provider API key when that provider uses one |
baseUrl |
string? |
Upstream base URL |
endpoint, apiVersion |
string? |
Azure-specific routing values |
enabled |
boolean |
Provider account enablement |
models |
string[] |
Advertised model catalog |
priority, weight |
number |
Fallback and weighted balancing hints |
retry |
object | Provider retry policy |
aws* |
strings | Bedrock and S3 integration fields |
projectId, location, serviceAccountJson |
strings | Vertex AI configuration |
proxyUrl |
string? |
Per-provider proxy endpoint |
network, proxy, performance, governance, betaHeaders, debugging |
objects | Six grouped provider-control panels |
Redacted browser-safe view:
ProviderAccountPublicreplaces secrets with presence markers such ashasApiKey,hasCloudCredentials,hasProxy,hasProxyPassword, andhasCaCert.- Header values, proxy passwords, bypass rules, certificate PEM data, raw provider secrets, and stored cloud credentials do not reach the browser.
GatewayConfig and ConfigExport
| Type | Purpose |
|---|---|
GatewayConfig |
Strict object with defaultProvider and providers[] |
ConfigExport |
Versioned export payload containing version, exportedAt, and config |
Governance entities
Budget
Defined in packages/governance/src/virtual_keys.ts.
| Field | Purpose |
|---|---|
maxRequests |
Request-count budget ceiling |
maxCostUsd |
Dollar-cost budget ceiling |
resetIntervalMs |
Optional server-timed fixed reset interval |
VirtualKey
Defined in packages/governance/src/virtual_keys.ts.
| Field | Purpose |
|---|---|
id, name, description |
Stable identifier and operator label |
token |
Raw bearer token accepted transiently on creation or legacy migration |
tokenHash |
Persisted SHA-256 hex token hash |
tokenHint |
Non-secret last-four-character hint for UI display |
enabled |
Key enablement |
rateLimit |
Request-based fixed window |
tokenLimit |
Token-metered fixed window |
budget |
Request and/or cost budget |
allowedProviders, allowedModels |
Admission scope restrictions |
usedRequests, usedCostMicroUsd |
Accrued metering data |
teamId |
Optional team membership |
Public browser-safe projections drop the raw token and its hash and add a
derived usedCostUsd field.
Team and Customer
Defined in packages/governance/src/hierarchy.ts.
| Type | Key fields | Purpose |
|---|---|---|
Team |
id, name, enabled, customerId, budget, usedRequests, usedCostMicroUsd |
Mid-level hierarchy node collecting usage from virtual keys |
Customer |
id, name, enabled, budget, usedRequests, usedCostMicroUsd |
Top-level hierarchy node collecting usage from teams |
Unknown references fail closed during chain validation.
Settings model
Defined in packages/contracts/src/settings.ts and
apps/gateway/routes/settings.ts.
Settings groups:
| Group | Purpose |
|---|---|
security |
Auth and route-protection-related operator settings |
compatibility |
Request translation and unsupported-parameter handling |
performance |
Request-body and pool-size tuning |
caching |
Cache enablement and tuning |
mcp |
MCP tool and external-client settings |
Important settings response characteristics:
GET /api/settingsreturns effective values plus per-field provenance insources.- Provenance values are
default,env, oroverride. - Persisted overrides are stored by group under
['settings', <group>]. security.hasPasswordis derived metadata; the password itself is not returned.- Runtime enforcement is exposed separately through an
enforcementmap because not every persisted setting is wired live.
MCP data shapes
Observed browser-facing MCP view types in apps/control-ui/src/api.ts:
| Type | Purpose |
|---|---|
MCPClientView |
Browser-safe MCP client record with headerNames, hasCommand, hasUrlCredentials, and toolCount |
MCPClientInput |
UI write shape for MCP client creation and updates |
MCPToolView |
Aggregated tool metadata including clientId and optional annotations |
MCPHealthView |
Per-client health summary |
Telemetry and log model
LogEntry
Defined in packages/telemetry/src/logbus.ts.
| Field family | Purpose |
|---|---|
ts, level, message |
Base log metadata |
requestId, method, path, status, durationMs |
HTTP request identification and timing |
provider, model |
Resolved inference target |
promptTokens, completionTokens, totalTokens |
Usage accounting |
costMicroUsd |
Cost in the repo-wide integer micro-USD unit |
content |
Opt-in captured request/response content when enabled |
Request and response content capture is disabled by default and redacts secret-looking keys before persistence.
UI-facing transport shapes
The control UI imports shared contracts directly and adds view-specific wrapper
shapes in apps/control-ui/src/api.ts, including:
GatewayConfigViewVersionInfoAnalyticsRollup,AnalyticsTotals,AnalyticsBucket,AnalyticsModelRow,AnalyticsProviderRowStoredLogsResult
Those client-side view types are projections over gateway responses, not independent persistence models.