synops/migrations/029_ai_budget.sql
vegard 2fa5d7ef2f AI-kostnadstak per bruker/samling: budsjettsjekk før AI-kall (oppgave 28.3)
Samlings- og brukernoder kan nå ha ai_budget i metadata:
  { "ai_budget": { "monthly_limit_usd": 50.0 } }

Før hvert AI-kall aggregeres inneværende måneds forbruk fra
ai_usage_log og sammenlignes med grensen. Ved overskridelse:
- AI-kallet blokkeres med feilmelding
- En work_item-node opprettes med tag "budget_exceeded"
- Work_item knyttes til samlingen via belongs_to-edge

Endringer:
- migrations/029: requested_by-kolonne i ai_usage_log + indekser
- synops-ai: --collection-id/--user-id flagg, budsjettsjekk i prompt
- maskinrommet/ai_budget.rs: delt budsjettsjekk-modul
- maskinrommet/ai_process.rs: budsjettsjekk før AI gateway-kall
- docs/infra/ai_gateway.md: oppdatert § 6.3 fra "fase 2" til implementert
2026-03-18 20:19:52 +00:00

24 lines
983 B
SQL

-- 029: AI-budsjett per bruker/samling
--
-- Legger til støtte for kostnadstak (ai_budget) i metadata på bruker- og
-- samlingsnoder. Utvider ai_usage_log med requested_by for bruker-attribusjon,
-- og legger til indeks for effektiv månedlig aggregering.
--
-- Budsjett lagres som JSONB-metadata på noden:
-- { "ai_budget": { "monthly_limit_usd": 50.0 } }
--
-- Ref: docs/infra/ai_gateway.md § 6.3
-- Bruker-attribusjon: hvem utløste AI-kallet
ALTER TABLE ai_usage_log
ADD COLUMN IF NOT EXISTS requested_by UUID REFERENCES nodes(id) ON DELETE SET NULL;
-- Indeks for effektiv månedlig aggregering per samling
CREATE INDEX IF NOT EXISTS idx_ai_usage_log_collection_month
ON ai_usage_log (collection_node_id, created_at)
WHERE collection_node_id IS NOT NULL;
-- Indeks for effektiv månedlig aggregering per bruker
CREATE INDEX IF NOT EXISTS idx_ai_usage_log_requested_by_month
ON ai_usage_log (requested_by, created_at)
WHERE requested_by IS NOT NULL;