feat: establish unified administration and model context baseline
This commit is contained in:
@@ -13,3 +13,8 @@ We considered React-only state, path-based routes and hash routes. React-only st
|
||||
deep-link behavior, path routes require a host catch-all route that does not yet exist in Omics Portal,
|
||||
and hash routes can conflict with host-page fragments. A namespaced query route preserves the current
|
||||
same-document integration boundary while leaving room for a future path adapter.
|
||||
|
||||
The accepted visual direction is A / Workbench for all five surfaces; B and C remain recoverable
|
||||
prototypes. Workspace owns readiness and preprocessing, consuming the Database catalog as a
|
||||
prerequisite. Database owns connection/binding, schema synchronization, descriptions and sensitivity;
|
||||
its page links to the related Workspace's preparation rather than duplicating the preprocessing action.
|
||||
|
||||
@@ -14,8 +14,7 @@ provider/model environment defaults. Those former sources are retired.
|
||||
schemaVersion: 2
|
||||
modelCatalog:
|
||||
defaults:
|
||||
session: zai/glm-5.3
|
||||
metadataGeneration: zai/glm-5.3
|
||||
interaction: zai/glm-5.3
|
||||
|
||||
embedding:
|
||||
id: ollama/qwen3-embedding:0.6b
|
||||
@@ -50,23 +49,63 @@ it contains that use block:
|
||||
- `metadataGeneration` makes it selectable for description generation;
|
||||
- `embedding` is a single installation-level model rather than a selectable list.
|
||||
|
||||
`defaults.session` is required. `defaults.metadataGeneration` is required exactly when at least
|
||||
one metadata-generation model exists. A session manifest pins its canonical identity, so removing a
|
||||
model never silently changes an existing session: resume fails with `model_unavailable`.
|
||||
`defaults.interaction` is the only LLM default, required once per installation, never per workspace.
|
||||
Core and Administration share the user's operational model choice. An explicit choice takes priority
|
||||
over the default and is remembered in this browser for the authenticated user and application mount.
|
||||
Switching workspace does not change the model. Browser-storage restrictions may limit remembering
|
||||
to the current visit; preferences do not synchronize across devices or change installation YAML.
|
||||
An unavailable remembered model is not silently replaced: select another configured model.
|
||||
|
||||
When any metadata-generation models are configured, the default and the operational list must
|
||||
support both `session` and `metadataGeneration`. Entries for just one adapter may remain in the
|
||||
installation inventory, but are not selectable for global interaction. Core-only installations remain
|
||||
supported when no metadata-generation model is configured; Admin AI is then unavailable.
|
||||
The embedding model remains separate and is unaffected by the interaction selector.
|
||||
|
||||
New sessions record the selected model in their manifest. Resume retains the session's workspace and
|
||||
revision, but uses the current global model (the installation default for clients that omit a model).
|
||||
Historical manifest model fields are not rewritten by resume. Archived/finalized sessions remain read-only.
|
||||
|
||||
### Required operator verification for every model
|
||||
|
||||
Catalog validation checks configuration, not model behavior. Before offering a model to users, and
|
||||
after changing its endpoint, adapters, or the Pi/LiteLLM versions, the operator must verify **both**:
|
||||
|
||||
1. **Core / Pi:** select the model, start a test session in a prepared test workspace, exercise an
|
||||
actual tool call and its returned result, a human review gate, and stop/resume. Check streaming,
|
||||
tool arguments, authentication, and reasoning/token-limit compatibility. A plain chat reply or
|
||||
`tht pi test` alone is not sufficient.
|
||||
2. **Administration / LiteLLM:** select the same model and generate descriptions for a small,
|
||||
non-sensitive test table. Check the structured result is accepted and the generation completes.
|
||||
Review the output quality before using it on real metadata. This action writes test metadata
|
||||
and may incur provider charges: use an authorized test database and approved data.
|
||||
|
||||
There is no automatic certification flag or startup model probe. The operator owns this verification;
|
||||
do not infer compatibility from the model label or from success in just one path. Both adapters point
|
||||
to one catalog identity; Pi does not need to route through a new LiteLLM proxy. Models using only
|
||||
`pi_auth` cannot serve the current LiteLLM path and are excluded from shared selection.
|
||||
|
||||
## Session adapters
|
||||
|
||||
Use `pi_builtin` for a model whose technical definition ships with Pi:
|
||||
Use `pi_builtin` for a model whose technical definition ships with Pi. This does not require
|
||||
`pi_auth`: a shared bundle credential lets native Pi and LiteLLM use the same provider identity:
|
||||
|
||||
```yaml
|
||||
deepseek:
|
||||
authentication:
|
||||
mode: pi_auth
|
||||
mode: secret_env
|
||||
apiKeyEnv: DEEPSEEK_API_KEY
|
||||
session:
|
||||
mode: pi_builtin
|
||||
metadataGeneration:
|
||||
litellmProvider: deepseek
|
||||
models:
|
||||
deepseek-v4-pro:
|
||||
session: {}
|
||||
metadataGeneration: {}
|
||||
deepseek-v4-flash:
|
||||
session: {}
|
||||
metadataGeneration: {}
|
||||
```
|
||||
|
||||
Use `openai_compatible` for an explicit compatible endpoint. Each eligible session model must then
|
||||
@@ -89,6 +128,18 @@ Secret values never belong in installation YAML, generated files, logs, CLI argu
|
||||
requests. The YAML contains only an environment-variable name or an authentication mode. Pi's
|
||||
protected credential file remains selected by the installation authentication configuration.
|
||||
|
||||
For catalog providers using `secret_env`, the bundle is authoritative in both Core and Admin.
|
||||
ThothII removes only the selected provider's old auth entry from the temporary Pi session snapshot;
|
||||
the operator's original Pi auth store and other providers are unchanged. Provider smoke checks use
|
||||
the same precedence, and model enumeration receives the catalog-declared bundle keys. A missing
|
||||
declared key is an error, not permission to fall back to Pi auth or the legacy generic key file.
|
||||
After rotating a bundle key, apply the normal installation lifecycle so processes reload it.
|
||||
|
||||
The PSD descriptor now declares only `deepseek/deepseek-v4-pro` and `deepseek/deepseek-v4-flash`
|
||||
for both uses; it no longer duplicates them under `deepseek-metadata`. Historical records are not
|
||||
rewritten. A saved obsolete identity must be explicitly reselected from the current catalog;
|
||||
it is not silently remapped to another model or account.
|
||||
|
||||
## Generated runtime projections
|
||||
|
||||
Before Compose starts, `tht` validates the installation and atomically writes deterministic files
|
||||
@@ -133,6 +184,16 @@ configuration command. There is no `tht pi configure` and no separate apply comm
|
||||
|
||||
## Migrating a legacy installation
|
||||
|
||||
For schema-v2 descriptors with the former `defaults.session` and `defaults.metadataGeneration`,
|
||||
replace both with `defaults.interaction`. Equal legacy values are accepted and normalized in memory;
|
||||
the loader never rewrites the descriptor. Different values fail with `migration_required`: explicitly
|
||||
choose a model supporting both uses, remove both old fields, and set the single new field. Do not mix
|
||||
new and legacy fields. A Core-only legacy session default can be normalized when Admin AI is absent.
|
||||
|
||||
The generated runtime catalog now uses schema version **2** and only `defaultInteraction`. Regenerate
|
||||
and apply all runtime projections with the matching host/backend release using the normal installation
|
||||
lifecycle; do not deploy only the backend against an old generated catalog or hand-edit generated JSON.
|
||||
|
||||
The migrator reads the former installation `metadataGeneration` block and the two former Pi JSON
|
||||
files, but never modifies them. Supply the facts that cannot be inferred safely and write a separate
|
||||
candidate:
|
||||
@@ -148,13 +209,15 @@ tht --installation /absolute/path/legacy/thothii-installation.yaml installation
|
||||
Review the candidate, move the legacy source files out of the installation only after approval,
|
||||
then select the v2 descriptor. Ambiguous aliases, endpoint conflicts, or missing authentication
|
||||
facts produce field-level errors; the migrator does not guess.
|
||||
The legacy CLI flag `--session-default` now supplies the unified interaction default in the candidate;
|
||||
if it conflicts with the legacy metadata default, align that choice explicitly before retrying.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
| Symptom | Meaning | Action |
|
||||
| --- | --- | --- |
|
||||
| `migration_required` | A retired model source or installation schema is still present | Run the installation migrator and review its candidate |
|
||||
| Unknown session or metadata default | The canonical ID is missing the corresponding use block | Correct the provider/model key or add the intended use block |
|
||||
| Invalid interaction default | The canonical ID does not support all configured uses | Correct `defaults.interaction` or the intended adapter blocks |
|
||||
| Generated projection drift | Runtime files differ from the descriptor-derived bytes | Run `tht start` or `tht pi restart --yes --drain` |
|
||||
| `model_unavailable` on resume | The session's pinned model is no longer session-eligible | Restore that catalog entry or keep the session unavailable; do not remap it |
|
||||
| `model_unavailable` on create/resume | The selected global model is no longer eligible | Explicitly choose an eligible model; no fallback is applied |
|
||||
| Provider smoke failure | Credentials, endpoint, or provider availability is invalid | Correct the protected credential or catalog endpoint, restart, then run `tht pi test` |
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
# Unified Administration Pages
|
||||
|
||||
Status: revised direction A accepted and implemented locally (2026-09-12).
|
||||
The owner selected the latest collapsible context shelf A after restoration of
|
||||
the original Core. Core and session management must remain functionally unchanged;
|
||||
the five Administration pages and global context are the implementation scope.
|
||||
Prototype history remains in `frontend/prototypes/`, including
|
||||
`administration-review/README.md` and `context-shelf/README.md`.
|
||||
Final integration remains on the server.
|
||||
See [implementation and acceptance evidence](../reports/2026-09-12-context-shelf-a-implementation.md).
|
||||
|
||||
## Problem Statement
|
||||
|
||||
Workspace and Pi open over the work area while Database, Memory and Evidence have
|
||||
different page structures. Administrators need five predictable, independently
|
||||
accessible pages that fit beside the Omics Portal sidebar and below its red header.
|
||||
|
||||
## Solution
|
||||
|
||||
Use the chosen A / Workbench direction for all five Administration Pages: a warm
|
||||
page heading, restrained red actions, readable serif titles, sans-serif controls,
|
||||
compact identity/status information, and an index/detail work area appropriate to
|
||||
each domain. Keep B / Inspector and C / Operations Deck as recoverable prototypes.
|
||||
Navigation remains on the right, collapsing within the available application width.
|
||||
|
||||
## User Stories
|
||||
|
||||
1. As an administrator, I want every management entry to open a full page, so that I can use the entire work area.
|
||||
2. As an administrator, I want the five pages to share hierarchy and typography, so that actions and current context are predictable.
|
||||
3. As an administrator, I want to refresh or bookmark a management page, so that I can return directly to it.
|
||||
4. As an administrator, I want Back and Forward to restore navigation, so that browser controls behave normally.
|
||||
5. As an administrator, I want unsaved edits protected during navigation, so that leaving a page does not silently discard work.
|
||||
6. As an administrator, I want existing permissions enforced on direct links, so that a URL cannot bypass access controls.
|
||||
7. As a reviewer, I want my active session retained while visiting Administration, so that navigation does not restart or stop Pi.
|
||||
8. As a workspace operator, I want to select a workspace and inspect its source, runtime requirements and validation, so that I know which environment I am preparing.
|
||||
9. As a workspace operator, I want preprocessing beside that workspace's readiness, so that the operation's target is explicit.
|
||||
10. As a workspace operator, I want catalog revision and preprocessing diagnostics, so that I can understand missing prerequisites and stale derived data.
|
||||
11. As a database operator, I want configuration, synchronization, descriptions and sensitivity in Database management, so that ownership of catalog changes remains clear.
|
||||
12. As a database operator, I want a link to the related workspace's preprocessing status, so that I can complete preparation after catalog changes.
|
||||
13. As a Memory curator, I want existing filtering, CRUD, links and index recovery inside the shared workbench, so that the redesign preserves my workflows.
|
||||
14. As an Evidence curator, I want browsing, source review and file-maintenance instructions inside the shared workbench, so that external Markdown editing remains the authoring workflow.
|
||||
15. As a Pi operator, I want runtime status, catalog defaults, models and diagnostics in a page, so that I can inspect the installation without a management popup.
|
||||
16. As a portal user, I want layout based on the available container width, so that a desktop viewport with a wide portal sidebar still works.
|
||||
17. As a keyboard or mobile user, I want accessible navigation and non-overlapping controls, so that all five pages remain usable at narrow widths and zoom.
|
||||
18. As a product owner, I want B and C preserved, so that an individual page can adopt another design later.
|
||||
|
||||
## Implementation Decisions
|
||||
|
||||
- Five peer Administration Surfaces, independent of active session existence.
|
||||
- One collapsible top shelf A selects workspace and canonical interaction model for Core and all Administration pages. No duplicate operational selectors inside those pages or the Core composer.
|
||||
- Each explicit choice is remembered independently per browser origin, application mount and authenticated principal. Absent an explicit choice, use the installation default. Removed/unavailable choices require explicit correction, never silent substitution.
|
||||
- Neither Core nor Administration activities are enabled until both choices resolve to available catalog entries. Background refresh errors retain already validated context and mounted drafts.
|
||||
- Workspace/model changes are locked during Core or Administration operations. Navigation itself does not cancel those operations: visited Administration pages and the original Core stay mounted.
|
||||
- Resume returns the session's pinned workspace in its lifecycle response and adopts that workspace without replacing the global model. Older responses can fall back to the session manifest.
|
||||
- Preserve the original eight-phase workflow, left activity log, gate widgets, composer, My sessions/All sessions tabs, groups, archive and session lifecycle. A navigation drawer remains reachable when the log is open or the available width is narrow.
|
||||
- Shared Workbench page/header/layout primitives; data ownership and mutation APIs remain domain-specific.
|
||||
- Namespaced `thoth_route=administration/<surface>` query routing, preserving host path, other query parameters, fragment and history state. Optional `thoth_workspace` carries only a stable workspace identity for cross-links.
|
||||
- Unsaved Administration changes block in-app navigation, browser Back/Forward, and context changes. Save successfully or explicitly cancel inside the editor before leaving; navigation does not offer automatic discard. Reload gets native before-unload protection. Busy state locks context selection, not read-only cross-page navigation.
|
||||
- Workspace owns readiness and full preprocessing. Database owns binding, physical schema synchronization, descriptions and sensitivity. Database status links to workspace preparation; it does not duplicate the run action.
|
||||
- Preprocessing permission remains the existing backend permission. This UI uses the already unified Installation Model Catalog (`defaults.interaction`) and does not introduce another model authority.
|
||||
- A shared responsive frame uses available container width, scoped CSS and bounded scrolling. The portal remains the owner of its header and left sidebar; Thoth does not duplicate them. The host can set `--thoth-app-height` to its available height below the header.
|
||||
- Existing catalog grids remain appropriate for tabular data; form content is inline in the work area. Short confirmations and secondary operation/history panels may remain dialogs/panels.
|
||||
- English interface labels; persisted document content retains the workspace language.
|
||||
- A is the production direction. The three read-only prototypes and their launch script remain available and are not imported by production code.
|
||||
|
||||
## Testing Decisions
|
||||
|
||||
- Verify public behavior at the existing AppShell and management-page boundaries with MSW API fixtures; avoid tests of private state or CSS implementation details.
|
||||
- Cover all five direct routes, browser history, host URL preservation, permission denial, guarded navigation and retained session behavior.
|
||||
- Exercise workspace-specific preprocessing targeting and database-to-workspace navigation with authoritative API status fixtures.
|
||||
- Use the existing authenticated Playwright stack to verify full pages, forms, container resize, narrow screens and a simulated portal header/sidebar. Fixtures avoid mutating the installed PSD knowledge.
|
||||
- Run frontend typecheck/build, focused tests while implementing, and the full frontend test suite at integration.
|
||||
|
||||
## Out of Scope
|
||||
|
||||
Schema migrations, a new preprocessing service, Evidence web editing, new model configuration authority, actual deployment into Omics Portal, production deployment, and deletion of prototype variants. The only additional backend contract change in this UI increment is the pinned workspace identity in successful Resume responses.
|
||||
|
||||
## Further Notes
|
||||
|
||||
This implements the page direction recorded by ADR 0020, refined by the owner's
|
||||
2026-09-12 acceptance of shelf A and explicit functional-preservation requirements.
|
||||
Testing reuses the existing public UI seams. Ticket breakdown is recorded alongside
|
||||
this spec as four independently reviewable increments. Gitea publication is pending
|
||||
authenticated access; no remote issue identifiers are claimed by these local files.
|
||||
@@ -0,0 +1,13 @@
|
||||
# A1: Navigable Administration Pages
|
||||
|
||||
**What to build:** Workspace and Pi become pages; all five surfaces support deep links, browser history, permission enforcement and guarded navigation while retaining session state.
|
||||
|
||||
**Blocked by:** None (can start immediately).
|
||||
|
||||
**Status:** implemented and locally verified on 2026-09-12; local ticket, Gitea publication pending.
|
||||
|
||||
- [x] Five full-page surfaces reached from the current right navigation.
|
||||
- [x] Refresh, Back/Forward and unrelated host URL/history fields preserved.
|
||||
- [x] Unsaved edits block navigation; operations lock context without blocking page inspection. Unauthorized links denied.
|
||||
- [x] Existing session continuation and management regressions pass.
|
||||
- [x] One global shelf A; independent remembered workspace/model, validated defaults, session-pinned workspace on Resume.
|
||||
@@ -0,0 +1,12 @@
|
||||
# A2: Workspace preparation and Database dependency
|
||||
|
||||
**What to build:** An operator selects a workspace, inspects readiness and catalog revisions, runs preprocessing and follows a reciprocal link to Database configuration.
|
||||
|
||||
**Blocked by:** A1: Navigable Administration Pages.
|
||||
|
||||
**Status:** implemented and regression-tested locally on 2026-09-12; configured server acceptance remains in A4. Local ticket, Gitea publication pending.
|
||||
|
||||
- [x] Preprocessing runs against the globally selected workspace.
|
||||
- [x] Missing, stale, blocked, running and failed status reflect the API.
|
||||
- [x] Database shows the related workspace's readiness and links to its preparation.
|
||||
- [x] Permission and confirmation regressions pass; no preprocessing/data-persistence behavior changed in this increment.
|
||||
@@ -0,0 +1,12 @@
|
||||
# A3: Shared A / Workbench family
|
||||
|
||||
**What to build:** Apply the chosen typography, page hierarchy and list/detail treatment to all five pages, preserving real domain operations and prototype alternatives.
|
||||
|
||||
**Blocked by:** A1: Navigable Administration Pages.
|
||||
|
||||
**Status:** implemented and locally verified on 2026-09-12; local ticket, Gitea publication pending.
|
||||
|
||||
- [x] Common heading, warm surfaces, controls and status hierarchy across five domains.
|
||||
- [x] Memory/Evidence browsing and editing/maintenance behavior preserved.
|
||||
- [x] Database configuration remains in the page work area; Pi status and host instructions are readable.
|
||||
- [x] A/B/C prototype files and launch scripts preserved.
|
||||
@@ -0,0 +1,15 @@
|
||||
# A4: Embedded and responsive acceptance
|
||||
|
||||
**What to build:** Verify the complete family beside a portal sidebar and below its red header, including browser and keyboard navigation at narrow widths.
|
||||
|
||||
**Blocked by:** A2: Workspace preparation and Database dependency; A3: Shared A / Workbench family.
|
||||
|
||||
**Status:** local regression and browser acceptance completed on 2026-09-12; actual server/Omics integration gate remains open. Local ticket, Gitea publication pending.
|
||||
|
||||
- [x] Sampled actual application at 390, 768 and 1280 CSS px; responsive context and navigation visually checked with synthetic data.
|
||||
- [x] Navigation reachable at mobile and desktop widths; original session scope tabs retained.
|
||||
- [x] Typecheck, build, frontend/backend regression suites and targeted browser checks recorded.
|
||||
- [ ] Standards/spec review completed; limits of actual portal integration documented.
|
||||
- [ ] On-server integration under the real portal header/sidebar, including keyboard traversal, zoom and configured runtime operations.
|
||||
|
||||
Evidence and remaining gates: [implementation report](../../reports/2026-09-12-context-shelf-a-implementation.md).
|
||||
@@ -0,0 +1,96 @@
|
||||
# Context shelf A: implementation and local acceptance
|
||||
|
||||
Date: 2026-09-12. Status: implemented and deployed to local Docker; not deployed to the server.
|
||||
|
||||
## Accepted scope
|
||||
|
||||
The owner selected the latest option A and explicitly required functional
|
||||
preservation of Core and session management. Aesthetic refinement is limited to
|
||||
the agreed Administration workbench and global context.
|
||||
|
||||
- Workspace, Evidence, Memory, Database and Pi open as peer pages in the work area.
|
||||
- A single top collapsible shelf selects workspace and interaction model.
|
||||
Explicit choices are independently remembered per origin, mount and principal;
|
||||
installation defaults fill only missing choices. Invalid saved choices fail
|
||||
closed instead of silently choosing another context.
|
||||
- Core's composer, eight phases, review widgets and left activity log remain the
|
||||
original production components. Session scope tabs, grouping, rename, archive,
|
||||
bulk operations, read-only inspection and guarded Resume remain intact.
|
||||
- Visited Admin pages and Core remain mounted during page navigation.
|
||||
Unsaved Admin edits block navigation/context changes until saved or explicitly
|
||||
cancelled in the editor. Failed saves and failed catalog refreshes preserve drafts.
|
||||
- Workspace/model selectors are locked during operations. A navigation drawer
|
||||
preserves access to the session rail when the log is open or space is narrow.
|
||||
- The unified Installation Model Catalog remains the only model authority.
|
||||
Core and metadata generation consume the same canonical selection.
|
||||
Resume now includes the session's pinned `workspaceId` in successful responses,
|
||||
binding the global workspace immediately without replacing the selected model;
|
||||
older backends have a manifest fallback.
|
||||
- Impeccable informed typography, warm surfaces, restrained red, spacing,
|
||||
natural help-text wrapping and container-responsive layout. No Omics header
|
||||
or left sidebar was added to production ThothII.
|
||||
- A, B and C prototype sources and launch scripts were preserved.
|
||||
|
||||
## Verification
|
||||
|
||||
Using Node 24.16.0:
|
||||
|
||||
| Check | Result |
|
||||
| --- | --- |
|
||||
| Full frontend Vitest suite (two workers) | 671 tests passed, 82 files |
|
||||
| Full backend Vitest suite (two workers) | Passed; existing 40 opt-in auth runtime projection tests skipped |
|
||||
| Frontend TypeScript build check | Passed |
|
||||
| Backend TypeScript check | Passed |
|
||||
| Frontend production Vite build | Passed; bundle-size advisory remains |
|
||||
| Git whitespace check | Passed |
|
||||
| Strict MkDocs build | Passed |
|
||||
|
||||
Regression fixtures now provide valid context where they exercise normal Core
|
||||
or session workflows. Separate tests explicitly cover invalid saved context,
|
||||
global selector uniqueness, lock/unlock, failed and successful saves, retained
|
||||
drafts across refresh failure, Core/Admin round trips, and pinned-workspace Resume.
|
||||
The existing 40 session-management tests remain green.
|
||||
|
||||
Browser acceptance used the actual production React application against a
|
||||
temporary read-only synthetic API, not the earlier prototype implementation.
|
||||
Checked Core, expanded/collapsed shelf, Memory, session scope tabs and mobile
|
||||
navigation at 390, 768 and 1280 CSS-pixel application widths. The test frame
|
||||
scaled wider layouts to fit the inspection panel; layout width inside the frame
|
||||
remained the stated CSS width. No real data, provider calls or runtime mutations
|
||||
were performed. This is sampled visual acceptance, not certification of every
|
||||
Admin editor on the real portal.
|
||||
|
||||
## Remaining release gates
|
||||
|
||||
### Local Docker update
|
||||
|
||||
At the owner's subsequent request, core and frontend were rebuilt from
|
||||
`/Users/mp/projects/ThothII` and recreated in the existing
|
||||
`thothii-18998cca7b0a` project. Its launcher preserves all previous Compose
|
||||
bindings and adds `/private/tmp/thothii-context-a.compose.yaml` last to override
|
||||
the old worktree build context. Only core/frontend were recreated; PostgreSQL,
|
||||
Qdrant, embedding and persistent volumes were retained.
|
||||
|
||||
Verified HTTP 200 for the frontend and both direct/proxied core health endpoints.
|
||||
The served production bundle contains the global shelf and unsaved-change guard,
|
||||
without the synthetic preview API. All five persistent services report healthy.
|
||||
The mounted catalog is schema v2, default `zai/glm-5.3`, with shared
|
||||
DeepSeek Pro/Flash, local Qwen and GLM model identities.
|
||||
Previous image tags are retained as `before-context-a-20260912` for each image.
|
||||
This startup check does not exercise authenticated Core/provider or Admin workflows.
|
||||
|
||||
### Server release
|
||||
|
||||
1. Integrate on the server beneath Omics Portal's actual red header and beside
|
||||
its existing sidebar. Supply available height through `--thoth-app-height`
|
||||
when the host is shorter than the viewport. Check real host styles, widths,
|
||||
zoom, keyboard traversal and Back/Forward.
|
||||
2. Use approved test data to verify configured Core/Pi and Admin/LiteLLM models
|
||||
through their real workflows. Unit fixtures do not certify provider compatibility.
|
||||
3. Verify workspace readiness, synchronization and resume on the configured
|
||||
stack before release. Follow the existing guarded server migration runbook.
|
||||
4. Gitea publication and final independent standards/spec review remain separate
|
||||
gates; no remote issues or deployment are claimed by this implementation.
|
||||
|
||||
The working tree also contains earlier model-catalog and Administration work.
|
||||
Unrelated changes were preserved; this report does not claim a clean or committed tree.
|
||||
@@ -0,0 +1,80 @@
|
||||
# Unified interaction LLM — local implementation
|
||||
|
||||
Date: 2026-09-12. This change is separate from selection of the final administration/context-shelf
|
||||
prototype. No deployment, Gitea issue publication, or Omics Portal modification was performed.
|
||||
|
||||
## Implemented
|
||||
|
||||
- One authored `modelCatalog.defaults.interaction` per installation, independent of workspace.
|
||||
The local PSD descriptor and tracked example now use `zai/glm-5.3` in this field.
|
||||
- One generated `defaultInteraction` in runtime catalog schema v2; host projections, backend
|
||||
settings, Pi diagnostics, Core admission and metadata-generation consumers use that value.
|
||||
- Separate Pi/LiteLLM adapters remain. When Admin AI is configured, both public lists and Pi's
|
||||
enabled list use their intersection. Single-use entries remain inventory, not global choices.
|
||||
Core-only installations remain possible when no Admin model is configured. Embedding is unchanged.
|
||||
- Equal legacy defaults normalize on read without rewriting the source; divergent defaults or
|
||||
mixed old/new fields fail with migration guidance. Generated schema-v1 catalogs must be regenerated.
|
||||
- The existing Core and Database selectors now share application preferences, using complete
|
||||
canonical IDs, including when two providers use the same short model name.
|
||||
- Explicit LLM choices are remembered in browser storage per origin/application mount and
|
||||
authenticated issuer/subject. Automatic defaults are not stored as explicit choices. Workspace
|
||||
and thinking preferences retain their existing in-memory lifetime.
|
||||
- Core/description-generation activity disables the existing model controls using existing state
|
||||
and the shared run cache. This is not a new cross-workspace/background job subsystem.
|
||||
- New sessions reject unavailable selections without fallback. Resume receives the global model
|
||||
(or uses the installation default when omitted), keeps the historical workspace/revision and does
|
||||
not overwrite the original manifest model fields. Archived/finalized sessions remain read-only.
|
||||
- Pi management instructions and the configuration guide require an operator to exercise each
|
||||
model in both Core and Administration. There is no automatic certification flag or live probe.
|
||||
|
||||
## PSD DeepSeek consolidation
|
||||
|
||||
Following explicit operator approval, the local PSD descriptor and its tracked example use one
|
||||
`deepseek` provider with native Pi and LiteLLM adapters. Both `deepseek/deepseek-v4-pro` and
|
||||
`deepseek/deepseek-v4-flash` are eligible for shared selection. The duplicate `deepseek-metadata`
|
||||
provider declaration is removed; historical records remain unchanged. The installation default
|
||||
stays `zai/glm-5.3`.
|
||||
|
||||
A value-free comparison confirmed that the existing Pi DeepSeek key and the existing
|
||||
`DEEPSEEK_API_KEY` bundle entry are identical; both source files have mode 0600. No secret file
|
||||
was changed. The catalog now declares `secret_env` / `DEEPSEEK_API_KEY` as the authoritative
|
||||
source for both paths. Pi session snapshots exclude the selected provider's old auth entry,
|
||||
without changing the original store or unrelated entries. Missing bundle keys fail closed instead
|
||||
of falling back to old Pi auth or the generic key file. Availability enumeration, credential status,
|
||||
and isolated provider smoke checks follow the catalog declaration as well.
|
||||
|
||||
## Verification
|
||||
|
||||
- All host CLI Go packages pass `go test ./...`.
|
||||
- Backend under Node 24.16.0 after DeepSeek consolidation: 108 test files pass, 1 skipped;
|
||||
1,377 tests pass, 40 skipped.
|
||||
Backend TypeScript check passes.
|
||||
- New regression coverage checks shared DeepSeek configuration/projection, canonical Core/Admin
|
||||
identities, bundle-backed model enumeration, stale Pi auth precedence, missing-key refusal,
|
||||
preservation of the source auth store, and sanitized credential status. All credentials in these
|
||||
tests are synthetic; no model inference is performed.
|
||||
- Full frontend run: 658 tests pass; three remaining failures concern existing administration-layout
|
||||
work: Workspace preprocessing region, Catalog status placement, and Sync history entry point.
|
||||
These controls were already being changed in the dirty worktree before this model change.
|
||||
- The focused Core/Admin model synchronization test also verifies locking during Core and
|
||||
description-generation activity, unlocking afterward, and provider-qualified identity. It passes.
|
||||
- Frontend typecheck still reports three `exact` option errors in the pre-existing, untracked
|
||||
`AppShell.administration.test.tsx` (lines 48, 66, 71). No new type errors are reported.
|
||||
- Earlier parallel runs encountered timing-sensitive auth-helper failures; the complete backend
|
||||
rerun with Node 24 and two workers passes. The Homebrew `node@24` path on this machine actually
|
||||
reported Node 25; the verified Node 24 executable is under the user's nvm installation.
|
||||
- No live provider calls or full deployed Pi/LiteLLM/Omics acceptance tests were performed.
|
||||
- `git diff --check` passes. Strict documentation build remains blocked by an existing link in
|
||||
the untracked `plans/2026-09-10-administration-pages-spec.md` pointing outside the documentation
|
||||
tree to the administration-review prototype README. The updated configuration guide adds no warning.
|
||||
|
||||
The full frontend gate is not green; this is not a deployment-ready acceptance claim. Pre-existing
|
||||
production UI edits and every prototype are preserved. The final collapsible global context layout,
|
||||
general Core/Admin admission policy and server assembly remain in the wider UI workstream.
|
||||
|
||||
## Applying later
|
||||
|
||||
Use the matching host/backend release, review the installation descriptor, then apply the normal
|
||||
installation lifecycle to regenerate **all** runtime projections together. Do not deploy only the new
|
||||
backend against an old generated catalog. Follow the dual-path operator checklist in
|
||||
[Installation Model Catalog](../general/pi-configuration.md).
|
||||
Reference in New Issue
Block a user