mirror of https://github.com/garrytan/gstack.git
40 lines
1.2 KiB
SQL
40 lines
1.2 KiB
SQL
-- Per-model cost tracking for eval runs.
|
|
-- Stores cost breakdown by model so teams can analyze spend patterns.
|
|
|
|
create table eval_costs (
|
|
id uuid primary key default gen_random_uuid(),
|
|
team_id uuid references teams(id) not null,
|
|
eval_run_id uuid references eval_runs(id) on delete cascade,
|
|
model text not null,
|
|
calls int not null,
|
|
input_tokens int not null,
|
|
output_tokens int not null,
|
|
estimated_cost_usd numeric(10,6) not null,
|
|
created_at timestamptz default now()
|
|
);
|
|
|
|
-- Index for querying costs by team and eval run
|
|
create index idx_eval_costs_team_run on eval_costs(team_id, eval_run_id);
|
|
|
|
-- RLS: team members can read/insert their team's costs
|
|
alter table eval_costs enable row level security;
|
|
|
|
create policy "Team members can read costs"
|
|
on eval_costs for select
|
|
using (team_id in (
|
|
select team_id from team_members where user_id = auth.uid()
|
|
));
|
|
|
|
create policy "Team members can insert costs"
|
|
on eval_costs for insert
|
|
with check (team_id in (
|
|
select team_id from team_members where user_id = auth.uid()
|
|
));
|
|
|
|
create policy "Admins can delete costs"
|
|
on eval_costs for delete
|
|
using (team_id in (
|
|
select team_id from team_members
|
|
where user_id = auth.uid() and role = 'admin'
|
|
));
|