Этап 4 / Волна 10: корректировка settlement-кейса — доменная фиксация синтеза, честное покрытие, удержание фокуса / Этап 4 / Волна 11: бизнес-якоря, доменное заземление и устранение утечки дебага

This commit is contained in:
2026-03-28 02:17:19 +03:00
parent 914843a8ba
commit a06e575be4
367 changed files with 432257 additions and 3627 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -4,7 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>NDC AI Normalizer Playground</title>
<script type="module" crossorigin src="/assets/index-OzA7Q0i7.js"></script>
<script type="module" crossorigin src="/assets/index-HMlzOgoV.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-Ch7jCAii.css">
</head>
<body>
+1 -1
View File
@@ -4,7 +4,7 @@
"private": true,
"type": "module",
"scripts": {
"dev": "vite --host 0.0.0.0 --port 5174",
"dev": "vite --host 0.0.0.0 --port 5174 --configLoader runner",
"build": "tsc -b && vite build",
"preview": "vite preview --host 0.0.0.0 --port 4174"
},
+29 -3
View File
@@ -1,4 +1,4 @@
import { useEffect, useState } from "react";
import { useEffect, useRef, useState } from "react";
import { apiClient } from "./api/client";
import { AssistantPanel } from "./components/AssistantPanel";
import { ConnectionPanel } from "./components/ConnectionPanel";
@@ -23,6 +23,8 @@ import type {
const SESSION_CONFIG_KEY = "ndc_normalizer_session_config_v1";
const ASSISTANT_STAGES = ["Разбираю запрос", "Ищу данные", "Собираю ответ"];
const DEFAULT_UI_MODE: UiMode = "assistant";
const AUTOLOAD_PROMPT_VERSION = "normalizer_v2_0_2";
function withTs(message: string): string {
return `[${new Date().toLocaleTimeString("ru-RU")}] ${message}`;
@@ -72,13 +74,14 @@ export default function App() {
const [evalReport, setEvalReport] = useState<unknown>(null);
const [lastError, setLastError] = useState("");
const [uiMode, setUiMode] = useState<UiMode>("decomposition");
const [uiMode, setUiMode] = useState<UiMode>(DEFAULT_UI_MODE);
const [assistantSessionId, setAssistantSessionId] = useState("");
const [assistantConversation, setAssistantConversation] = useState<AssistantConversationItem[]>([]);
const [assistantInput, setAssistantInput] = useState("");
const [assistantBusy, setAssistantBusy] = useState(false);
const [assistantStatus, setAssistantStatus] = useState("");
const [assistantError, setAssistantError] = useState("");
const presetAutoloadDoneRef = useRef(false);
const log = (message: string) => {
setAppLogs((prev) => [withTs(message), ...prev].slice(0, 300));
@@ -128,7 +131,30 @@ export default function App() {
async function refreshPresets() {
try {
const payload = await apiClient.loadPresets();
setPresetList(payload.presets ?? []);
const presets = payload.presets ?? [];
setPresetList(presets);
if (presetAutoloadDoneRef.current) {
return;
}
const presetForAutoload =
presets.find((item) => item.prompt_version === AUTOLOAD_PROMPT_VERSION) ??
presets.find((item) => item.id === "default-normalizer-v2_0_2");
if (!presetForAutoload) {
presetAutoloadDoneRef.current = true;
log(`Preset autoload skipped: ${AUTOLOAD_PROMPT_VERSION} not found.`);
return;
}
setSelectedPresetId(presetForAutoload.id);
setPreviousPreset(prompts);
setPrompts({
systemPrompt: presetForAutoload.systemPrompt,
developerPrompt: presetForAutoload.developerPrompt,
domainPrompt: presetForAutoload.domainPrompt,
schemaNotes: presetForAutoload.schemaNotes ?? "",
fewShotExamples: presetForAutoload.fewShotExamples ?? ""
});
presetAutoloadDoneRef.current = true;
log(`Preset autoloaded: ${presetForAutoload.name} (${presetForAutoload.prompt_version}).`);
} catch (error) {
log(`Presets load error: ${error instanceof Error ? error.message : String(error)}`);
}
@@ -62,7 +62,7 @@ function buildConversationExport(sessionId: string, conversation: AssistantConve
lines.push("");
if (item.role === "assistant" && item.debug) {
lines.push("### technical_breakdown_json");
lines.push("### debug_payload_json");
lines.push("```json");
lines.push(stringifyDebug(item.debug));
lines.push("```");
@@ -0,0 +1,37 @@
> llm-normalizer-frontend@0.1.0 dev
> vite --host 0.0.0.0 --port 5174
15:50:14 [vite] (client) Re-optimizing dependencies because vite config has changed
VITE v7.3.1 ready in 438 ms
➜ Local: http://localhost:5174/
➜ Network: http://10.122.6.134:5174/
➜ Network: http://172.22.0.188:5174/
 ➜ press h + enter to show help
15:50:15 [vite] http proxy error: /api/presets
AggregateError [ECONNREFUSED]:
at internalConnectMultiple (node:net:1134:18)
at afterConnectMultiple (node:net:1715:7)
15:50:15 [vite] http proxy error: /api/history
AggregateError [ECONNREFUSED]:
at internalConnectMultiple (node:net:1134:18)
at afterConnectMultiple (node:net:1715:7)
15:50:15 [vite] http proxy error: /api/accounting-agent/v1/runs
AggregateError [ECONNREFUSED]:
at internalConnectMultiple (node:net:1134:18)
at afterConnectMultiple (node:net:1715:7)
15:50:15 [vite] http proxy error: /api/presets
AggregateError [ECONNREFUSED]:
at internalConnectMultiple (node:net:1134:18)
at afterConnectMultiple (node:net:1715:7)
15:50:15 [vite] http proxy error: /api/history
AggregateError [ECONNREFUSED]:
at internalConnectMultiple (node:net:1134:18)
at afterConnectMultiple (node:net:1715:7)
15:50:15 [vite] http proxy error: /api/accounting-agent/v1/runs
AggregateError [ECONNREFUSED]:
at internalConnectMultiple (node:net:1134:18)
at afterConnectMultiple (node:net:1715:7)
16:21:34 [vite] (client) hmr update /@fs/X:/1C/NDC_1C/llm_normalizer/frontend/src/components/AssistantPanel.tsx