Changeset 0.15.0 patches (#72)
This commit is contained in:
@@ -749,15 +749,30 @@ See [DESIGN-0.14.0.md](DESIGN-0.14.0.md) for full spec.
|
||||
|
||||
---
|
||||
|
||||
## v0.15.0 — Compaction
|
||||
## v0.15.0 — Compaction ✅
|
||||
|
||||
Depends on: utility model role (v0.10.0).
|
||||
|
||||
- [ ] Auto-compaction service: background job that calls utility model to summarize
|
||||
- [ ] Channel-scoped: triggers when context exceeds threshold
|
||||
- [ ] Summaries stored as system messages
|
||||
- [ ] Configurable: per-channel opt-in/out, summary model override
|
||||
- [ ] Admin controls for resource limits
|
||||
- [x] Compaction service: extracts messages, calls utility model to summarize, replaces with summary
|
||||
- [x] `Summarize & Continue` button: user-triggered compaction via existing summarize endpoint
|
||||
- [x] Channel-scoped context threshold triggers (configurable min messages, min chars, activity gap)
|
||||
- [x] Summaries stored as system messages with `is_summary = true` metadata
|
||||
- [x] Background scanner: periodic candidate detection with cooldown and in-flight dedup
|
||||
- [x] Configurable: per-channel opt-in/out (`compaction_opt_out`), global threshold overrides
|
||||
- [x] Admin controls: global enable/disable, threshold/cooldown settings via `global_settings`
|
||||
- [x] Context budget guard rail: estimated tokens must exceed 80% of ceiling before compaction
|
||||
- [x] Token estimation: `(len + 3) / 4` heuristic with path-from-summary support
|
||||
- [x] Rate limiting on summarize endpoint
|
||||
- [x] Comprehensive test suite: scanner candidates, guard rails, live pipeline integration tests
|
||||
|
||||
Bug fixes during CI stabilization:
|
||||
- [x] Fixed `channels.deleted_at` → `channels.is_archived` (channels use soft-archive, not soft-delete)
|
||||
- [x] Fixed NULL model column scan in scanner (`COALESCE(c.model, '')`)
|
||||
- [x] Fixed test channel backdating (BEFORE UPDATE trigger override via INSERT)
|
||||
- [x] Fixed vault nil-check fallback in role resolver for plaintext API keys
|
||||
- [x] Fixed parallel test DB races (`-p 1` serialization)
|
||||
- [x] Fixed proactive token refresh cascade: failed refresh no longer nukes active session
|
||||
- [x] Fixed model visibility reset: preferences fetch failure preserves existing hidden state
|
||||
|
||||
---
|
||||
|
||||
@@ -1160,6 +1175,7 @@ based on need.
|
||||
|
||||
**UX / Multi-Seat**
|
||||
- ~~Per-chat model/preset persistence (server-side)~~ ✅ _(v0.12.0 — `channels.settings.last_selector_id` JSONB merge, localStorage write-through cache)_
|
||||
- Per-provider model preferences: `user_model_settings` unique key is `(user_id, model_id)` — same model from different providers shares one visibility toggle. Needs `provider_config_id` dimension in DB constraint, store, API, and frontend `hiddenModels` keying. Frontend composite key (`configId:modelId`) already exists in `App.models[].id`.
|
||||
|
||||
**Knowledge Bases — Future**
|
||||
- Hybrid search: combine vector similarity with full-text `tsvector`, re-rank
|
||||
@@ -1184,4 +1200,4 @@ based on need.
|
||||
- Multi-tenant SaaS mode
|
||||
- Plugin/extension marketplace
|
||||
- Virtual scroll for long conversations
|
||||
- SQLite backend option (single-user / dev)
|
||||
- SQLite backend option (single-user / dev)
|
||||
Reference in New Issue
Block a user