Enhance Makefile and database schema for improved management
- Add new database management targets: db-up, db-schema, db-seed-interface-definitions, and db-init to streamline database setup and seeding processes. - Update db-seed and db-reset dependencies to include new initialization steps for better data integrity. - Introduce new SQL files for schema definition and interface definitions seeding, ensuring a consistent database structure. - Refactor existing seed scripts to align with new dependencies and improve clarity in database operations.
This commit is contained in:
91
backend/db/schema.sql
Normal file
91
backend/db/schema.sql
Normal file
@@ -0,0 +1,91 @@
|
||||
-- Development schema bootstrap. Keep this in sync with backend/db/models.py.
|
||||
|
||||
CREATE TABLE IF NOT EXISTS interface_definitions (
|
||||
interface_type VARCHAR(64) PRIMARY KEY,
|
||||
name VARCHAR(128) NOT NULL,
|
||||
capability VARCHAR(16) NOT NULL,
|
||||
field_schema JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||||
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
version INTEGER NOT NULL DEFAULT 1,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS model_resources (
|
||||
id VARCHAR(40) PRIMARY KEY,
|
||||
name VARCHAR(128) NOT NULL DEFAULT '',
|
||||
capability VARCHAR(16) NOT NULL,
|
||||
interface_type VARCHAR(64) NOT NULL REFERENCES interface_definitions(interface_type) ON DELETE RESTRICT,
|
||||
values JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||||
secrets JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||||
support_image_input BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
is_default BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS knowledge_bases (
|
||||
id VARCHAR(40) PRIMARY KEY,
|
||||
name VARCHAR(128) NOT NULL,
|
||||
description VARCHAR(2048) NOT NULL DEFAULT '',
|
||||
embedding_model_resource_id VARCHAR(40) REFERENCES model_resources(id) ON DELETE SET NULL,
|
||||
status VARCHAR(16) NOT NULL DEFAULT 'active',
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS assistants (
|
||||
id VARCHAR(40) PRIMARY KEY,
|
||||
name VARCHAR(128) NOT NULL,
|
||||
type VARCHAR(16) NOT NULL DEFAULT 'prompt',
|
||||
runtime_mode VARCHAR(16) NOT NULL DEFAULT 'pipeline',
|
||||
greeting VARCHAR(2048) NOT NULL DEFAULT '',
|
||||
enable_interrupt BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
vision_enabled BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
vision_model_resource_id VARCHAR(40) REFERENCES model_resources(id) ON DELETE SET NULL,
|
||||
knowledge_base_id VARCHAR(40) REFERENCES knowledge_bases(id) ON DELETE RESTRICT,
|
||||
prompt VARCHAR(8192) NOT NULL DEFAULT '',
|
||||
api_url VARCHAR(512) NOT NULL DEFAULT '',
|
||||
api_key VARCHAR(512) NOT NULL DEFAULT '',
|
||||
app_id VARCHAR(128) NOT NULL DEFAULT '',
|
||||
graph JSON NOT NULL DEFAULT '{}'::json,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS assistant_model_bindings (
|
||||
assistant_id VARCHAR(40) NOT NULL REFERENCES assistants(id) ON DELETE CASCADE,
|
||||
capability VARCHAR(16) NOT NULL,
|
||||
model_resource_id VARCHAR(40) NOT NULL REFERENCES model_resources(id) ON DELETE RESTRICT,
|
||||
config JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
PRIMARY KEY (assistant_id, capability)
|
||||
);
|
||||
|
||||
-- Lightweight forward-compatible patches for existing dev databases.
|
||||
ALTER TABLE interface_definitions
|
||||
ALTER COLUMN field_schema TYPE JSONB USING field_schema::jsonb;
|
||||
|
||||
ALTER TABLE assistants
|
||||
ADD COLUMN IF NOT EXISTS vision_enabled BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
ADD COLUMN IF NOT EXISTS vision_model_resource_id VARCHAR(40);
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM pg_constraint WHERE conname = 'assistants_vision_model_resource_id_fkey'
|
||||
) THEN
|
||||
ALTER TABLE assistants
|
||||
ADD CONSTRAINT assistants_vision_model_resource_id_fkey
|
||||
FOREIGN KEY (vision_model_resource_id) REFERENCES model_resources(id) ON DELETE SET NULL;
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS ix_interface_definitions_capability ON interface_definitions(capability);
|
||||
CREATE INDEX IF NOT EXISTS ix_model_resources_capability ON model_resources(capability);
|
||||
CREATE INDEX IF NOT EXISTS ix_model_resources_interface_type ON model_resources(interface_type);
|
||||
CREATE INDEX IF NOT EXISTS ix_knowledge_bases_embedding_model_resource_id ON knowledge_bases(embedding_model_resource_id);
|
||||
CREATE INDEX IF NOT EXISTS ix_assistants_type ON assistants(type);
|
||||
CREATE INDEX IF NOT EXISTS ix_assistant_model_bindings_model_resource_id ON assistant_model_bindings(model_resource_id);
|
||||
Reference in New Issue
Block a user