agentops/app/supabase/migrations/20240130223013_init.sql

281 lines
10 KiB
SQL

-- Enable the "pg_jsonschema" extension
CREATE extension pg_jsonschema WITH schema extensions;
CREATE TYPE pricing_plan_interval AS ENUM ('day', 'week', 'month', 'year');
CREATE TYPE pricing_type AS ENUM ('one_time', 'recurring');
CREATE TYPE subscription_status AS ENUM (
'trialing',
'active',
'canceled',
'incomplete',
'incomplete_expired',
'past_due',
'unpaid',
'paused'
);
CREATE TYPE trigger_event_type AS ENUM ('actions', 'llms', 'tools');
CREATE TYPE environment AS ENUM (
'production',
'staging',
'development',
'community'
);
CREATE TYPE end_state AS ENUM ('Success', 'Fail', 'Indeterminate');
CREATE TABLE public.orgs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name text NOT NULL
) tablespace pg_default;
CREATE TABLE public.user_orgs(
user_id UUID NOT NULL,
org_id UUID NOT NULL,
CONSTRAINT user_orgs_pkey PRIMARY KEY (user_id, org_id),
CONSTRAINT user_orgs_users_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users (id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT user_orgs_org_id_fkey FOREIGN KEY (org_id) REFERENCES orgs (id) ON UPDATE CASCADE ON DELETE CASCADE
) tablespace pg_default;
CREATE TABLE public.projects (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
org_id UUID NOT NULL,
api_key UUID NOT NULL DEFAULT gen_random_uuid(),
name text NOT NULL,
environment public.environment NOT NULL DEFAULT 'development',
CONSTRAINT projects_api_key_key UNIQUE (api_key),
CONSTRAINT projects_org_id_fkey FOREIGN KEY (org_id) REFERENCES orgs (id) ON UPDATE CASCADE ON DELETE CASCADE
) tablespace pg_default;
CREATE INDEX ON public.projects(org_id);
----------------------------------------------------------------------------------------------------
-------------------------- vvv Data coming from client sdk vvv -------------------------------------
----------------------------------------------------------------------------------------------------
-- id is UUID because needs to be passed by client sdk. client can just generate UUID instead of requesting a sequential bigint from the server
-- Not given a generated default value because we want insertion to fail if ommited
CREATE TABLE public.sessions (
id UUID PRIMARY KEY,
project_id UUID NOT NULL,
project_id_secondary UUID NULL,
init_timestamp timestamp WITH time zone NOT NULL,
end_timestamp timestamp WITH time zone NULL,
tags text NULL,
-- TODO: add link to log bucket logs text NULL,
end_state public.end_state NULL,
end_state_reason text NULL,
video text NULL,
host_env jsonb NULL,
CONSTRAINT sessions_project_id_fkey FOREIGN KEY (project_id) REFERENCES projects (id) ON UPDATE CASCADE ON DELETE SET NULL,
CONSTRAINT sessions_project_id_secondary_fkey FOREIGN KEY (project_id_secondary) REFERENCES projects (id) ON UPDATE CASCADE ON DELETE SET NULL
) tablespace pg_default;
CREATE INDEX ON public.sessions(project_id);
CREATE INDEX ON public.sessions(project_id_secondary);
CREATE TABLE public.agents (
id UUID PRIMARY KEY,
session_id UUID NOT NULL,
name text NULL,
logs text NULL,
CONSTRAINT agents_session_id_fkey FOREIGN KEY (session_id) REFERENCES sessions (id) ON UPDATE CASCADE ON DELETE CASCADE
) tablespace pg_default;
CREATE INDEX ON public.agents(session_id);
CREATE TABLE public.threads (
id UUID PRIMARY KEY,
session_id UUID NOT NULL,
agent_id UUID NOT NULL,
CONSTRAINT threads_agent_id_fkey FOREIGN KEY (agent_id) REFERENCES agents (id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT threads_session_id_fkey FOREIGN KEY (session_id) REFERENCES sessions (id) ON UPDATE CASCADE ON DELETE CASCADE
) tablespace pg_default;
CREATE INDEX ON public.threads(session_id);
CREATE TABLE public.stats (
session_id UUID NOT NULL,
cost numeric,
events integer NOT NULL DEFAULT 0,
prompt_tokens integer NOT NULL DEFAULT 0,
completion_tokens integer NOT NULL DEFAULT 0,
errors integer NOT NULL DEFAULT 0,
CONSTRAINT stats_pkey PRIMARY KEY (session_id),
CONSTRAINT stats_session_id_fkey FOREIGN KEY (session_id) REFERENCES sessions (id) ON UPDATE CASCADE ON DELETE CASCADE
) tablespace pg_default;
CREATE TABLE public.actions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
session_id UUID NOT NULL,
agent_id UUID NOT NULL,
action_type text NULL,
logs text NULL,
screenshot text NULL,
params text NULL,
returns text NULL,
init_timestamp timestamp WITH time zone NOT NULL,
end_timestamp timestamp WITH time zone NOT NULL,
CONSTRAINT actions_session_id_fkey FOREIGN KEY (session_id) REFERENCES sessions (id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT actions_agent_id_fkey FOREIGN KEY (agent_id) REFERENCES agents (id) ON UPDATE CASCADE ON DELETE CASCADE
) tablespace pg_default;
CREATE INDEX ON public.actions(session_id);
CREATE TABLE public.llms (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
session_id UUID NOT NULL,
agent_id UUID NULL,
thread_id UUID NULL,
prompt jsonb NULL,
completion jsonb NULL,
model text NULL,
prompt_tokens numeric NULL,
completion_tokens numeric NULL,
cost numeric NULL,
promptarmor_flag boolean NULL,
params text NULL,
returns text NULL,
init_timestamp timestamp WITH time zone NOT NULL,
end_timestamp timestamp WITH time zone NOT NULL,
CONSTRAINT llms_session_id_fkey FOREIGN KEY (session_id) REFERENCES sessions (id) ON UPDATE CASCADE ON DELETE CASCADE
) tablespace pg_default;
CREATE INDEX ON public.llms(session_id);
CREATE TABLE public.tools (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
session_id UUID NOT NULL,
agent_id UUID NOT NULL,
name text NULL,
logs text NULL,
params text NULL,
returns text NULL,
init_timestamp timestamp WITH time zone NOT NULL,
end_timestamp timestamp WITH time zone NOT NULL,
CONSTRAINT tools_session_id_fkey FOREIGN KEY (session_id) REFERENCES sessions (id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT tools_agent_id_fkey FOREIGN KEY (agent_id) REFERENCES agents (id) ON UPDATE CASCADE ON DELETE CASCADE
) tablespace pg_default;
CREATE INDEX ON public.tools(session_id);
CREATE TABLE public.errors (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
session_id UUID NOT NULL,
trigger_event_id UUID NULL,
trigger_event_type trigger_event_type NULL,
error_type text NULL,
code text NULL,
details text NULL,
logs text NULL,
timestamp timestamp WITH time zone NOT NULL,
CONSTRAINT errors_session_id_fkey FOREIGN KEY (session_id) REFERENCES sessions (id) ON UPDATE CASCADE ON DELETE CASCADE
) tablespace pg_default;
CREATE INDEX ON public.errors(session_id);
CREATE TABLE public.developer_errors (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
api_key UUID NOT NULL,
sdk_version text NULL,
type text NULL,
message text NULL,
stack_trace text NULL,
host_env jsonb NULL
);
INSERT INTO storage.buckets (
id,
name,
public,
allowed_mime_types
) VALUES (
'screenshots', -- id
'screenshots', -- name
false, -- public
ARRAY['image/*'] -- allowed_mime_types
) ON CONFLICT DO NOTHING; -- Buckets do not get deleted on db reset
INSERT INTO storage.buckets (
id,
name,
public
) VALUES (
'blobs', -- id
'blobs', -- name
false -- public
) ON CONFLICT DO NOTHING; -- Buckets do not get deleted on db reset
----------------------------------------------------------------------------------------------------
----------- vvv Generated by Next.js template. Do not modify existing lines vvv --------------------
----------------------------------------------------------------------------------------------------
CREATE TABLE public.users (
id uuid NOT NULL,
full_name text NULL,
avatar_url text NULL,
billing_address jsonb NULL,
payment_method jsonb NULL,
CONSTRAINT users_pkey PRIMARY KEY (id),
CONSTRAINT users_id_fkey FOREIGN KEY (id) REFERENCES auth.users (id) ON UPDATE CASCADE ON DELETE CASCADE
) tablespace pg_default;
CREATE TABLE public.products (
id text NOT NULL,
active boolean NULL,
name text NULL,
description text NULL,
image text NULL,
metadata jsonb NULL,
CONSTRAINT products_pkey PRIMARY KEY (id)
) tablespace pg_default;
CREATE TABLE public.prices (
id text NOT NULL,
product_id text NULL,
active boolean NULL,
description text NULL,
unit_amount bigint NULL,
currency text NULL,
type public.pricing_type NULL,
interval public.pricing_plan_interval NULL,
interval_count integer NULL,
trial_period_days integer NULL,
metadata jsonb NULL,
CONSTRAINT prices_pkey PRIMARY KEY (id),
CONSTRAINT prices_product_id_fkey FOREIGN KEY (product_id) REFERENCES products (id),
CONSTRAINT prices_currency_check CHECK ((char_length(currency) = 3))
) tablespace pg_default;
CREATE TABLE public.subscriptions (
id text NOT NULL,
user_id uuid NOT NULL,
status public.subscription_status NULL,
metadata jsonb NULL,
price_id text NULL,
quantity integer NULL,
cancel_at_period_end boolean NULL,
created timestamp WITH time zone NOT NULL DEFAULT timezone ('utc' :: text, NOW()),
current_period_start timestamp WITH time zone NOT NULL DEFAULT timezone ('utc' :: text, NOW()),
current_period_end timestamp WITH time zone NOT NULL DEFAULT timezone ('utc' :: text, NOW()),
ended_at timestamp WITH time zone NULL DEFAULT timezone ('utc' :: text, NOW()),
cancel_at timestamp WITH time zone NULL DEFAULT timezone ('utc' :: text, NOW()),
canceled_at timestamp WITH time zone NULL DEFAULT timezone ('utc' :: text, NOW()),
trial_start timestamp WITH time zone NULL DEFAULT timezone ('utc' :: text, NOW()),
trial_end timestamp WITH time zone NULL DEFAULT timezone ('utc' :: text, NOW()),
CONSTRAINT subscriptions_pkey PRIMARY KEY (id),
CONSTRAINT subscriptions_price_id_fkey FOREIGN KEY (price_id) REFERENCES prices (id),
CONSTRAINT subscriptions_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users (id)
) tablespace pg_default;
CREATE TABLE public.customers (
id uuid NOT NULL,
stripe_customer_id text NULL,
CONSTRAINT customers_pkey PRIMARY KEY (id),
CONSTRAINT customers_id_fkey FOREIGN KEY (id) REFERENCES auth.users (id)
) tablespace pg_default;
----------------------------------------------------------------------------------------------------
----------- ^^^ Generated by Next.js template. Do not modify existing lines ^^^ --------------------
----------------------------------------------------------------------------------------------------