Update plan

This commit is contained in:
Dita Aji Pratama 2026-08-13 17:08:43 +07:00
parent 1c1b9c1510
commit 1f876a00c8
4 changed files with 136 additions and 105 deletions

19
plan/done/menubar.md Normal file
View File

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

44
plan/moop.md Normal file
View File

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

73
plan/moop.sql Normal file
View File

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

View File

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