@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