44 lines
2.2 KiB
SQL
44 lines
2.2 KiB
SQL
-- v0.22.0: Provider health tracking + capability admin overrides.
|
|
|
|
-- ── Provider Health ─────────────────────────
|
|
-- Hourly bucketed health metrics per provider config.
|
|
-- In-memory accumulator flushes to this table every 60s.
|
|
-- Background job prunes rows older than 7 days.
|
|
CREATE TABLE IF NOT EXISTS provider_health (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
provider_config_id UUID NOT NULL REFERENCES provider_configs(id) ON DELETE CASCADE,
|
|
window_start TIMESTAMPTZ NOT NULL, -- hourly bucket floor
|
|
request_count INT NOT NULL DEFAULT 0,
|
|
error_count INT NOT NULL DEFAULT 0,
|
|
timeout_count INT NOT NULL DEFAULT 0,
|
|
total_latency_ms BIGINT NOT NULL DEFAULT 0, -- sum for avg calculation
|
|
max_latency_ms INT NOT NULL DEFAULT 0,
|
|
last_error TEXT,
|
|
last_error_at TIMESTAMPTZ,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
|
|
UNIQUE (provider_config_id, window_start)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_provider_health_window
|
|
ON provider_health (provider_config_id, window_start DESC);
|
|
|
|
-- ── Capability Overrides ────────────────────
|
|
-- Admin corrections for model capabilities. Highest priority in the
|
|
-- three-tier resolution chain: catalog → heuristic → admin override.
|
|
CREATE TABLE IF NOT EXISTS capability_overrides (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
provider_config_id UUID REFERENCES provider_configs(id) ON DELETE CASCADE,
|
|
model_id TEXT NOT NULL,
|
|
field TEXT NOT NULL, -- tool_calling, vision, thinking, reasoning, etc.
|
|
value TEXT NOT NULL, -- "true"/"false" for bools, numeric string for ints
|
|
set_by UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
|
|
-- Unique per (provider, model, field). NULL provider = applies to model globally.
|
|
UNIQUE (provider_config_id, model_id, field)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_capability_overrides_model
|
|
ON capability_overrides (model_id);
|