@@ -349,6 +349,74 @@ CREATE TABLE IF NOT EXISTS api_publications (
349349 UNIQUE (api_uuid, devportal_uuid, organization_uuid)
350350);
351351
352+ -- LLM Provider Templates table
353+ CREATE TABLE IF NOT EXISTS llm_provider_templates (
354+ uuid VARCHAR (40 ) PRIMARY KEY ,
355+ organization_uuid VARCHAR (40 ) NOT NULL ,
356+ handle VARCHAR (255 ) NOT NULL ,
357+ name VARCHAR (253 ) NOT NULL ,
358+ description VARCHAR (1023 ),
359+ created_by VARCHAR (255 ),
360+ configuration TEXT NOT NULL ,
361+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
362+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
363+ FOREIGN KEY (organization_uuid) REFERENCES organizations(uuid) ON DELETE CASCADE ,
364+ UNIQUE(organization_uuid, handle)
365+ );
366+
367+ -- LLM Providers table
368+ CREATE TABLE IF NOT EXISTS llm_providers (
369+ uuid VARCHAR (40 ) PRIMARY KEY ,
370+ organization_uuid VARCHAR (40 ) NOT NULL ,
371+ handle VARCHAR (255 ) NOT NULL ,
372+ name VARCHAR (100 ) NOT NULL ,
373+ description VARCHAR (1023 ),
374+ created_by VARCHAR (255 ),
375+ version VARCHAR (30 ) NOT NULL ,
376+ context VARCHAR (200 ) DEFAULT ' /' ,
377+ vhost VARCHAR (253 ),
378+ template VARCHAR (255 ) NOT NULL ,
379+ upstream_url TEXT NOT NULL ,
380+ upstream_auth TEXT ,
381+ openapi_spec TEXT ,
382+ model_list TEXT ,
383+ rate_limiting TEXT ,
384+ access_control TEXT ,
385+ policies TEXT ,
386+ security TEXT ,
387+ status VARCHAR (20 ) NOT NULL DEFAULT ' CREATED' ,
388+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
389+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
390+ FOREIGN KEY (organization_uuid) REFERENCES organizations(uuid) ON DELETE CASCADE ,
391+ FOREIGN KEY (organization_uuid, template) REFERENCES llm_provider_templates(organization_uuid, handle) ON UPDATE CASCADE ON DELETE RESTRICT,
392+ UNIQUE(organization_uuid, handle)
393+ );
394+
395+ -- LLM Proxies table
396+ CREATE TABLE IF NOT EXISTS llm_proxies (
397+ uuid VARCHAR (40 ) PRIMARY KEY ,
398+ organization_uuid VARCHAR (40 ) NOT NULL ,
399+ project_uuid VARCHAR (40 ) NOT NULL ,
400+ handle VARCHAR (255 ) NOT NULL ,
401+ name VARCHAR (253 ) NOT NULL ,
402+ description VARCHAR (1023 ),
403+ created_by VARCHAR (255 ),
404+ version VARCHAR (30 ) NOT NULL ,
405+ context VARCHAR (200 ) DEFAULT ' /' ,
406+ vhost VARCHAR (253 ),
407+ provider VARCHAR (255 ) NOT NULL ,
408+ openapi_spec TEXT ,
409+ policies TEXT ,
410+ security TEXT ,
411+ status VARCHAR (20 ) NOT NULL DEFAULT ' CREATED' ,
412+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
413+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
414+ FOREIGN KEY (organization_uuid) REFERENCES organizations(uuid) ON DELETE CASCADE ,
415+ FOREIGN KEY (project_uuid) REFERENCES projects(uuid) ON DELETE CASCADE ,
416+ FOREIGN KEY (organization_uuid, provider) REFERENCES llm_providers(organization_uuid, handle) ON UPDATE CASCADE ON DELETE RESTRICT,
417+ UNIQUE(organization_uuid, handle)
418+ );
419+
352420-- Indexes for better performance
353421CREATE INDEX IF NOT EXISTS idx_projects_organization_id ON projects(organization_uuid);
354422CREATE INDEX IF NOT EXISTS idx_organizations_handle ON organizations(handle);
@@ -379,3 +447,12 @@ CREATE UNIQUE INDEX IF NOT EXISTS idx_devportals_default_per_org ON devportals(o
379447CREATE INDEX IF NOT EXISTS idx_api_associations_api_resource_type ON api_associations(api_uuid, association_type, organization_uuid);
380448CREATE INDEX IF NOT EXISTS idx_api_associations_resource ON api_associations(association_type, resource_uuid, organization_uuid);
381449CREATE INDEX IF NOT EXISTS idx_api_associations_org ON api_associations(organization_uuid);
450+ CREATE INDEX IF NOT EXISTS idx_llm_provider_templates_org ON llm_provider_templates(organization_uuid);
451+ CREATE INDEX IF NOT EXISTS idx_llm_provider_templates_handle ON llm_provider_templates(organization_uuid, handle);
452+ CREATE INDEX IF NOT EXISTS idx_llm_providers_org ON llm_providers(organization_uuid);
453+ CREATE INDEX IF NOT EXISTS idx_llm_providers_handle ON llm_providers(organization_uuid, handle);
454+ CREATE INDEX IF NOT EXISTS idx_llm_providers_template ON llm_providers(organization_uuid, template);
455+ CREATE INDEX IF NOT EXISTS idx_llm_proxies_org ON llm_proxies(organization_uuid);
456+ CREATE INDEX IF NOT EXISTS idx_llm_proxies_project ON llm_proxies(organization_uuid, project_uuid);
457+ CREATE INDEX IF NOT EXISTS idx_llm_proxies_handle ON llm_proxies(organization_uuid, handle);
458+ CREATE INDEX IF NOT EXISTS idx_llm_proxies_provider ON llm_proxies(organization_uuid, provider);
0 commit comments