From 1f876a00c86668f2db38935ee5ca6d08f8fc4e0a Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Thu, 13 Aug 2026 17:08:43 +0700 Subject: [PATCH] Update plan --- plan/done/menubar.md | 19 ++++++++ plan/moop.md | 44 ++++++++++++++++++ plan/moop.sql | 73 ++++++++++++++++++++++++++++++ plan/moop.sqlite3 | 105 ------------------------------------------- 4 files changed, 136 insertions(+), 105 deletions(-) create mode 100644 plan/done/menubar.md create mode 100644 plan/moop.md create mode 100644 plan/moop.sql delete mode 100644 plan/moop.sqlite3 diff --git a/plan/done/menubar.md b/plan/done/menubar.md new file mode 100644 index 0000000..f41186c --- /dev/null +++ b/plan/done/menubar.md @@ -0,0 +1,19 @@ +Ganti shortcut key dan buatkan menubar untuk fitur TUI berikut: +- Session > New Session : Ctrl+N +- Session > Open Session : Ctrl+O +- Session > Rename Session : F2 +- Session > Exit : Ctrl+C +- Agent > Send Prompt : Ctrl+Enter (Hanya disaat ready) +- Agent > Cancel Inference : Esc (Hanya disaat progess) +- Model > Select Model : F4 +- Workspace > Change Workspace : F6 + +F10 untuk fokus/aktifkan menu bar. + +Mnemonic: +Alt+S → [S]ession +Alt+A → [A]gent +Alt+M → [M]odel +Alt+W → [W]orkspace + +Pastikan kode-nya modular, sehingga mudah di baca dan maintenance oleh developer. \ No newline at end of file diff --git a/plan/moop.md b/plan/moop.md new file mode 100644 index 0000000..ca1c150 --- /dev/null +++ b/plan/moop.md @@ -0,0 +1,44 @@ +Fitur moop (Model Option) untuk TUI: Pindahkan penyimpanan model dari config yaml ke database sqlite. +db_path default "~/.config/hendrik/moop.sqlite3" dan bisa di ubah di yaml. Jika db moop tidak ada di db_path, maka create baru. +referensi query ada di `plan/moop.sql` dan referensi diagram plantuml ada di `plan/moop.puml`. +List model yang sudah ada di default-config.yaml kalau mau di bersihin silahkan aja. Default list model-nya kosong aja. +Tipe-nya untuk saat ini baru `llm`, `embedding`, `imagegen`, `imagevision` aja. + +Apa aja yang di migrasikan dari config yaml ke sqlite: +- LLM +- Image Vision +- Image Generate +- RAG (Embedding) + +Use case: +- Bisa setting Providers, Model name, dan API Keys yang di bundle dalam 1 set +- Bisa milih default model set pada tipe tertentu. sekarang baru ada `llm`, `embedding`, `imagegen`, `imagevision` aja. Kalau default dari type tersebut kosong, masukin set+type pertama kali artinya otomatis default, supaya ga kosong. +- Nampilin opsi model set yang ingin dipakai untuk switch model yang dipakai AI Agent + +Tujuan utama: +- Bisa switch alternative API Key, Provider secara otomatis kalau gagal connect (bergantung pada priority) berdasarkan model set yang di gunakan. + +Kapan itu switch? +- Koneksi gagal +- timeout +- Server error +- rate limit +- auth gagal +- 404 + +Apa prioritas auto switch-nya di model set: +- Key. setelah semua key gabisa baru deh: +- Model provider-nya + +Aturan-aturan lainnya: +- Pengelolaan setting add edit delete untuk Providers dan Opsi model set-nya ada di TUI +- Service (XMPP, dan Telegram) pakai Default yang di sqlite itu. +- 1 set bisa multi-type (apalagi jika model-nya memungkinkan dan support banyak type) +- jika error 401/403 maka coba key berikutnya dulu (rotasi key) +- jika error lain (koneksi/timeout/5xx/429/404) maka langsung pindah ke model/provider berikutnya. skip sisa key, biar tidak timeout berulang di api yang sama. + +Karena imagevision bisa termasuk di llm umum atau bisa tidak termasuk di llm umum, ekspektasi alur untuk imagevision sebagai berikut: +- pas panggil tools vision (imagevision model) +- result dapat dari tools tanpa fallback dari model imagevision +- switch ke model llm umum +- llm memberi fallback \ No newline at end of file diff --git a/plan/moop.sql b/plan/moop.sql new file mode 100644 index 0000000..e370025 --- /dev/null +++ b/plan/moop.sql @@ -0,0 +1,73 @@ +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) -- Prevent duplicate entries +); + +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) REFERENCES moop_model_set_type(id) 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; diff --git a/plan/moop.sqlite3 b/plan/moop.sqlite3 deleted file mode 100644 index 743c941..0000000 --- a/plan/moop.sqlite3 +++ /dev/null @@ -1,105 +0,0 @@ -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