tools/asset_index/ là core của repo. Nó theo dõi raw_assets/, phân tích file mới bằng Gemini, embed mô tả qua OpenAI, và lưu vào SQLite + sqlite-vec để mọi skill query bằng ngôn ngữ tự nhiên.
Sơ đồ
Mục đích sơ đồ: cho bạn thấy đường đi đầy đủ của một file media khi được đưa vàoraw_assets/, từ watcher phát hiện file đến khi asset có thể được tìm bằng semantic search.
raw_assets/ bằng cơ chế theo OS hoặc polling fallback. router.py hash file, bỏ qua bản đã index, rồi chọn analyzer phù hợp cho ảnh, video hoặc audio. Kết quả mô tả được embed thành vector 1536 chiều, lưu cùng metadata vào .asset_index/index.db, và search.py dùng cùng embed model để tìm asset gần nghĩa nhất cho truy vấn hoặc scene intent.
Các module chính
| File | Vai trò |
|---|---|
watcher.py | Theo dõi filesystem, debounce, dispatch path → router |
router.py | Hash, skip nếu trùng, gọi analyzer phù hợp, embed, upsert |
analyzers/image_gemini.py | Single-frame Gemini Vision cho ảnh |
analyzers/video_gemini.py | Probe ffprobe + Gemini multimodal cho video |
analyzers/audio_gemini.py | Whisper transcript + Gemini classify cho audio |
embed.py | OpenAI text-embedding-3-small (1536 chiều) |
store.py | SQLite + sqlite-vec virtual table CRUD |
search.py | Query → embedding → vec0 nearest → join assets |
service.py | Đăng ký watcher dưới launchd / Task Scheduler / systemd |
bootstrap.py | Setup wizard cho auto installer |
hashing.py | SHA-256 streaming cho file lớn |
gemini_client.py | Gemini API wrapper với retry + rate-limit |
Schema DB
3 bảng (xemschema.sql):
assets— metadata + summary do Gemini sinh.assets_vec— virtual table sqlite-vec, embedding 1536 chiều, FTS K-NN.process_log— audit trail mỗi lần process (status, error, ran_at).
Bước tiếp theo
CLI dev
Chạy module trực tiếp khi dev/debug.
File runtime
.asset_index/index.db, state.json, logs/.Idempotency
Vì sao re-index file không tốn LLM call.
Mở rộng
Thêm format, đổi embed model.