Model option planning

This commit is contained in:
Dita Aji Pratama 2026-08-12 17:07:37 +07:00
parent b7b012fff6
commit aa4d6dd811
2 changed files with 205 additions and 0 deletions

100
plan/moop.puml Normal file
View File

@ -0,0 +1,100 @@
@startuml
hide circle
skinparam linetype ortho
package option {
entity moop_model_set {
id : binary(40) <<PK>>
name : longtext
--
}
entity moop_model_type {
id : binary(40) <<PK>>
type : longtext
--
* type availability =
"llm" | "embedding" | "image generation"
}
entity moop_model_set_type {
id : binary(40) <<PK>>
set : binary(40) <<FK>>
type : binary(40) <<FK>>
--
* 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) <<PK>>
type : binary(40) unique <<FK>>
set_type : binary(40) <<FK>>
--
* 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) <<PK>>
name : longtext
baseurl : longtext
--
* empty key = no bearer
}
entity moop_key {
id : binary(40) <<PK>>
key : longtext
priority : int null
api : binary(40) <<FK>>
--
* api = moop_api.id
on update cascade
on delete cascade
* null priority = disabled
}
moop_api ||--o{ moop_key
entity moop_model {
id : binary(40) <<PK>>
api : binary(40) <<FK>>
set : binary(40) <<FK>>
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

105
plan/moop.sqlite3 Normal file
View File

@ -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;