feat(realism-ui): operator panel for planner weights + canary probability
New /realism-config page sits next to Persona Generation and Synthetic Files under the Automation nav. Editable weight tables for user / system / canary content classes (with live percent share), plus a slider for canary_probability. Wires GET/PUT /api/v1/realism/config — viewer can read; admin required to save. Validation errors from the API are surfaced inline rather than swallowed; the SAVE button refreshes from the server's canonical snapshot so the operator sees exactly what landed (matters because cross-list entries are silently dropped server-side).
This commit is contained in:
@@ -26,6 +26,7 @@ const CampaignDetail = lazy(() => import('./components/CampaignDetail'));
|
||||
const Orchestrator = lazy(() => import('./components/Orchestrator'));
|
||||
const PersonaGeneration = lazy(() => import('./components/PersonaGeneration'));
|
||||
const SyntheticFiles = lazy(() => import('./components/SyntheticFiles/SyntheticFiles'));
|
||||
const RealismConfig = lazy(() => import('./components/RealismConfig/RealismConfig'));
|
||||
const CanaryTokens = lazy(() => import('./components/CanaryTokens'));
|
||||
const TopologyPersonaGeneration = lazy(() =>
|
||||
import('./components/PersonaGeneration').then((m) => ({ default: m.TopologyPersonaGeneration })),
|
||||
@@ -131,6 +132,7 @@ const AuthedShell: React.FC<AuthedShellProps> = ({ onLogout, onSearch, searchQue
|
||||
<Route path="/orchestrator" element={<Orchestrator />} />
|
||||
<Route path="/persona-generation" element={<PersonaGeneration />} />
|
||||
<Route path="/synthetic-files" element={<SyntheticFiles />} />
|
||||
<Route path="/realism-config" element={<RealismConfig />} />
|
||||
<Route path="/canary-tokens" element={<CanaryTokens />} />
|
||||
<Route path="/topologies/:id/personas" element={<TopologyPersonaGeneration />} />
|
||||
<Route path="/config" element={<Config />} />
|
||||
|
||||
Reference in New Issue
Block a user