Repository navigation
feat(compression): unified config panel — single source for engine on/off + level (Phase 1) - #4432
Merged
diegosouzapw merged 16 commits intoJun 20, 2026
Merged
Conversation
Engine-centric central panel (single source for master + per-engine on/off + level), default pipeline derived from the engines map; Combos page owns named ordered pipelines + active-profile selection; per-engine pages keep only detailed config. Phased: (1) core consolidation + Model A migration, (2) named profiles + active selector, (3) per-request x-omniroute-compression header.
… panel 12 TDD tasks: engine catalog, engines map + activeComboId, deriveDefaultPlan, migration 102 + backfill, resolveCompressionPlan, runtime wiring, API, default-combo shim, the engine-grid panel, consolidation, menu. Ends with a recap + the pending follow-ups (Phase 2 named profiles/active selector, Phase 3 header, deferred items).
Pure function that converts a per-engine EngineToggle map + masterEnabled
flag into a { mode, stackedPipeline } plan: off when master is off or no
engines on; single-mode when exactly one single-mode engine is enabled;
stacked (sorted by stackPriority) otherwise.
…>override>active>default)
Extends compressionSettingsUpdateSchema with engines (Record<string,{enabled:boolean,level?:string}>)
and activeComboId (string|null) so the PUT route accepts and persists these fields.
GET already returns the full getCompressionSettings() object which includes both fields.
TDD: added route round-trip tests (PUT+GET) for engines, activeComboId, null clear,
and schema rejection of invalid engines shape.
…lt derived from engines)
… pages keep only detailed config
…s under vitest The bare "@omniroute/open-sse/.../engineCatalog.ts" specifier resolves under tsc/tsx but not under vitest's MCP config: Vite externalizes a brand-new open-sse module to Node, which can't load the .ts subpath. types.ts is already in Vite's graph, so route ENGINE_IDS through its re-export. Fixes 3 failing MCP vitest suites (cacheTools, dbHealthTool, essentialTools).
…nel-saved Code-review finding: the legacy seeded default combo (present on every install via migration 042/043) was silently overriding a panel-configured engines map — the default-combo block in chatCore set compressionComboApplied=true, skipping the engines-map override, so an operator's panel toggles were ignored. Gate the engines-map path on a new runtime-only CompressionConfig.enginesExplicit (true when a stored engines row exists). Panel-saved installs: the engines map is authoritative (deriveDefaultPlanFromConfig + new enginesMapDerivesStackedPipeline guard the chatCore default-combo block). Legacy/backfilled installs: the map is display-only and dispatch stays on the historical defaultMode/default-combo path — zero behaviour change until the operator opts in via the panel. Also documents why resolveCacheAwareConfig's getCacheAwareStrategy(config.defaultMode) arg is safe (skipSystemPrompt is mode-independent).
Contributor
|
Warning You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again! |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
…umadocs build
docs/compression/**/*.md is compiled as MDX by the Next build (fumadocs,
source.config.ts). The two planning docs lacked the required `title`
frontmatter (build error: 'title: expected string, received undefined') and the
design doc had a bare {rtk,caveman} that MDX parsed as a JSX expression. Adds
frontmatter matching the sibling docs and backticks the brace. Fixes the
dast-smoke build step.
This was referenced Jun 20, 2026
Merged
tkgo11
pushed a commit
to tkgo11/OmniRoute
that referenced
this pull request
Sep 23, 2026
…/off + level (Phase 1) (cheaper-inference#4432) * docs(compression): design spec for the unified compression config panel Engine-centric central panel (single source for master + per-engine on/off + level), default pipeline derived from the engines map; Combos page owns named ordered pipelines + active-profile selection; per-engine pages keep only detailed config. Phased: (1) core consolidation + Model A migration, (2) named profiles + active selector, (3) per-request x-omniroute-compression header. * docs(compression): Phase 1 implementation plan for the unified config panel 12 TDD tasks: engine catalog, engines map + activeComboId, deriveDefaultPlan, migration 102 + backfill, resolveCompressionPlan, runtime wiring, API, default-combo shim, the engine-grid panel, consolidation, menu. Ends with a recap + the pending follow-ups (Phase 2 named profiles/active selector, Phase 3 header, deferred items). * feat(compression): engine catalog metadata (levels, single-mode, order) * feat(compression): add engines map + activeComboId to CompressionConfig * feat(compression): deriveDefaultPlan (engines map -> mode/pipeline) Pure function that converts a per-engine EngineToggle map + masterEnabled flag into a { mode, stackedPipeline } plan: off when master is off or no engines on; single-mode when exactly one single-mode engine is enabled; stacked (sorted by stackPriority) otherwise. * feat(compression): persist+backfill engines map and activeComboId (migration 102) * feat(compression): resolveCompressionPlan precedence resolver (header>override>active>default) * feat(compression): selectCompressionStrategy uses resolveCompressionPlan * feat(api): settings/compression carries engines map + activeComboId Extends compressionSettingsUpdateSchema with engines (Record<string,{enabled:boolean,level?:string}>) and activeComboId (string|null) so the PUT route accepts and persists these fields. GET already returns the full getCompressionSettings() object which includes both fields. TDD: added route round-trip tests (PUT+GET) for engines, activeComboId, null clear, and schema rejection of invalid engines shape. * refactor(compression): default-combo route is a read-only shim (default derived from engines) * feat(dashboard): engine-grid compression panel (single source for on/off + level) * refactor(dashboard): remove duplicate compression toggles; per-engine pages keep only detailed config * feat(compression): unified panel menu order + derived-pipeline integration coverage * fix(compression): import ENGINE_IDS via types re-export so it resolves under vitest The bare "@omniroute/open-sse/.../engineCatalog.ts" specifier resolves under tsc/tsx but not under vitest's MCP config: Vite externalizes a brand-new open-sse module to Node, which can't load the .ts subpath. types.ts is already in Vite's graph, so route ENGINE_IDS through its re-export. Fixes 3 failing MCP vitest suites (cacheTools, dbHealthTool, essentialTools). * fix(compression): engines map drives dispatch only when explicitly panel-saved Code-review finding: the legacy seeded default combo (present on every install via migration 042/043) was silently overriding a panel-configured engines map — the default-combo block in chatCore set compressionComboApplied=true, skipping the engines-map override, so an operator's panel toggles were ignored. Gate the engines-map path on a new runtime-only CompressionConfig.enginesExplicit (true when a stored engines row exists). Panel-saved installs: the engines map is authoritative (deriveDefaultPlanFromConfig + new enginesMapDerivesStackedPipeline guard the chatCore default-combo block). Legacy/backfilled installs: the map is display-only and dispatch stays on the historical defaultMode/default-combo path — zero behaviour change until the operator opts in via the panel. Also documents why resolveCacheAwareConfig's getCacheAwareStrategy(config.defaultMode) arg is safe (skipSystemPrompt is mode-independent). * docs(compression): add MDX frontmatter + escape inline brace to fix fumadocs build docs/compression/**/*.md is compiled as MDX by the Next build (fumadocs, source.config.ts). The two planning docs lacked the required `title` frontmatter (build error: 'title: expected string, received undefined') and the design doc had a bare {rtk,caveman} that MDX parsed as a JSX expression. Adds frontmatter matching the sibling docs and backticks the brace. Fixes the dast-smoke build step.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fase 1 — Painel unificado de configuração de compressão
Faz de
/dashboard/context/settingsa fonte única do master on/off + on/off+nível de cada engine de compressão. O pipeline default passa a ser derivado desses toggles (não mais armazenado/editável), removendo a duplicação que existia entre a config central, o "default combo" editável e as páginas por-engine.Arquitetura (fluxo de dados)
engineCatalog(metadados) →deriveDefaultPlan(engines, master)(engines map →{mode, stackedPipeline}) →resolveCompressionPlan(config, ctx)(precedência header → override por-rota → perfil ativo → default derivado → off, já header/active-aware para as Fases 2-3) →selectCompressionPlan(strategySelector) →chatCorealimenta ostackedPipelinederivado emapplyCompressionAsync.O que muda
CompressionConfigganha umenginesmap +activeComboId(migração 102 + backfill no read-path → zero mudança de comportamento para instalações existentes)./api/settings/compressioncarregaengines+activeComboId;/api/context/combos/defaultvira um shim read-only410(o default agora é derivado).CompressionPanel.tsx(grid de engines: master + on/off + nível + preview do pipeline derivado). As páginas por-engine e os 2 cards perdem on/off+nível (ficam só com config detalhada). Menu reordenado: Settings → Combos → páginas por-engine → Studio.Correção crítica — gate
enginesExplicitO default combo seeded (migração 042/043,
is_default=1, presente em toda instalação =[rtk, caveman]) sobrescrevia silenciosamente os toggles do painel. Agora a engines map só dirige o dispatch quando explicitamente salva pelo painel (existe linhaenginesarmazenada); instalações legadas/backfilled mantêm o caminho históricodefaultMode/default-combo → zero mudança de comportamento até o operador optar pelo painel.Fora de escopo (Fases seguintes, cada uma com seu próprio PR)
activeComboId) na página de Combos.x-omniroute-compression(o resolver já é header-aware).Validação
typecheck:corelimpo ·lint0 errors ·check:cyclesOKtest:vitestbloqueante verde para todos os arquivos relevantesrelease/v3.8.32.Specs:
docs/compression/2026-06-20-unified-compression-config-panel-{design,plan}.md.