From aa4d6dd8116dba0ce314f52f34a4501aade0a3c8 Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Wed, 12 Aug 2026 17:07:37 +0700 Subject: [PATCH] Model option planning --- plan/moop.puml | 100 +++++++++++++++++++++++++++++++++++++++++++ plan/moop.sqlite3 | 105 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 205 insertions(+) create mode 100644 plan/moop.puml create mode 100644 plan/moop.sqlite3 diff --git a/plan/moop.puml b/plan/moop.puml new file mode 100644 index 0000000..f4b411a --- /dev/null +++ b/plan/moop.puml @@ -0,0 +1,100 @@ +@startuml + +hide circle +skinparam linetype ortho + +package option { + + entity moop_model_set { + id : binary(40) <> + name : longtext + -- + } + + entity moop_model_type { + id : binary(40) <> + type : longtext + -- + * type availability = + "llm" | "embedding" | "image generation" + } + + entity moop_model_set_type { + id : binary(40) <> + set : binary(40) <> + type : binary(40) <> + -- + * set = moop_model_set.id + on update cascade + on delete cascade + * type = moop_model_type.id + on update cascade + on delete cascade + * unique(set, type) + } + moop_model_set ||--|{ moop_model_set_type + moop_model_type ||-o{ moop_model_set_type + + entity moop_model_type_default { + id : binary(40) <> + type : binary(40) unique <> + set_type : binary(40) <> + -- + * type = moop_model_type.id + on update cascade + on delete cascade + * set_type = moop_model_set_type.id + on update cascade + on delete cascade + * set_type.type must equal type + * one default set per model type + } + moop_model_type ||--|| moop_model_type_default + moop_model_set_type ||--o| moop_model_type_default + +} + +package provider { + + entity moop_api { + id : binary(40) <> + name : longtext + baseurl : longtext + -- + * empty key = no bearer + } + + entity moop_key { + id : binary(40) <> + key : longtext + priority : int null + api : binary(40) <> + -- + * api = moop_api.id + on update cascade + on delete cascade + * null priority = disabled + } + moop_api ||--o{ moop_key + + entity moop_model { + id : binary(40) <> + api : binary(40) <> + set : binary(40) <> + model : longtext + priority : int null + -- + * api = moop_api.id + on update cascade + on delete cascade + * set = moop_model_set.id + on update cascade + on delete cascade + * null priority = disabled + } + moop_model_set ||-|{ moop_model + moop_api ||--|{ moop_model + +} + +@enduml \ No newline at end of file diff --git a/plan/moop.sqlite3 b/plan/moop.sqlite3 new file mode 100644 index 0000000..743c941 --- /dev/null +++ b/plan/moop.sqlite3 @@ -0,0 +1,105 @@ +PRAGMA foreign_keys = ON; + +BEGIN; + +-- OPTION + +CREATE TABLE moop_model_set ( + id BLOB PRIMARY KEY NOT NULL, + name TEXT NOT NULL +); + +CREATE TABLE moop_model_type ( + id BLOB PRIMARY KEY NOT NULL, + type TEXT NOT NULL UNIQUE +); + +CREATE TABLE moop_model_set_type ( + id BLOB PRIMARY KEY NOT NULL, + "set" BLOB NOT NULL, + type BLOB NOT NULL, + FOREIGN KEY ("set") + REFERENCES moop_model_set(id) + ON UPDATE CASCADE + ON DELETE CASCADE, + FOREIGN KEY (type) + REFERENCES moop_model_type(id) + ON UPDATE CASCADE + ON DELETE CASCADE, + UNIQUE ("set", type), + UNIQUE (id, type) +); + +CREATE TABLE moop_model_type_default ( + id BLOB PRIMARY KEY NOT NULL, + type BLOB NOT NULL UNIQUE, + set_type BLOB NOT NULL UNIQUE, + FOREIGN KEY (type) + REFERENCES moop_model_type(id) + ON UPDATE CASCADE + ON DELETE CASCADE, + FOREIGN KEY (set_type, type) + REFERENCES moop_model_set_type(id, type) + ON UPDATE CASCADE + ON DELETE CASCADE +); + +-- PROVIDER + +CREATE TABLE moop_api ( + id BLOB PRIMARY KEY NOT NULL, + name TEXT NOT NULL, + baseurl TEXT NOT NULL +); + +CREATE TABLE moop_key ( + id BLOB PRIMARY KEY NOT NULL, + key TEXT NOT NULL, + priority INTEGER NULL, + api BLOB NOT NULL, + FOREIGN KEY (api) + REFERENCES moop_api(id) + ON UPDATE CASCADE + ON DELETE CASCADE +); + +CREATE TABLE moop_model ( + id BLOB PRIMARY KEY NOT NULL, + api BLOB NOT NULL, + "set" BLOB NOT NULL, + model TEXT NOT NULL, + priority INTEGER NULL, + FOREIGN KEY (api) + REFERENCES moop_api(id) + ON UPDATE CASCADE + ON DELETE CASCADE, + FOREIGN KEY ("set") + REFERENCES moop_model_set(id) + ON UPDATE CASCADE + ON DELETE CASCADE +); + +-- INDEXES + +CREATE INDEX idx_moop_key_api + ON moop_key(api); + +CREATE INDEX idx_moop_key_api_priority + ON moop_key(api, priority); + +CREATE INDEX idx_moop_model_api + ON moop_model(api); + +CREATE INDEX idx_moop_model_set + ON moop_model("set"); + +CREATE INDEX idx_moop_model_api_priority + ON moop_model(api, priority); + +CREATE INDEX idx_moop_model_set_type_set + ON moop_model_set_type("set"); + +CREATE INDEX idx_moop_model_set_type_type + ON moop_model_set_type(type); + +COMMIT; \ No newline at end of file