АРЧ ЮИ - остановка прогона через гуй

This commit is contained in:
2026-04-18 18:14:30 +03:00
parent 9710d81676
commit 12550606bb
39 changed files with 1783 additions and 93 deletions
@@ -155,9 +155,10 @@ describe("assistant living chat runtime adapter", () => {
const output = await runAssistantLivingChatRuntime(input);
expect(output.handled).toBe(true);
expect(output.chatText).toContain("llm-text");
expect(output.chatText).toContain("Привет! Всё нормально.");
expect(output.chatText).toContain("offer:ООО Альтернатива Плюс, ООО Лайсвуд, РАЙМ");
expect(output.debug?.living_chat_response_source).toBe("llm_chat_with_proactive_scope_offer");
expect(output.chatText).not.toContain("llm-text");
expect(output.debug?.living_chat_response_source).toBe("deterministic_smalltalk_with_proactive_scope_offer");
expect(output.debug?.living_chat_proactive_scope_offer_applied).toBe(true);
expect(output.debug?.living_chat_data_scope_probe_org_count).toBe(3);
expect(output.debug?.assistant_known_organizations).toEqual(["ООО Альтернатива Плюс", "ООО Лайсвуд", "РАЙМ"]);
@@ -1,11 +1,11 @@
import { describe, expect, it } from "vitest";
import { createAssistantLivingModePolicy } from "../src/services/assistantLivingModePolicy";
function buildPolicy() {
function buildPolicy(options?: { repairAddressMojibake?: (text: string) => string }) {
return createAssistantLivingModePolicy({
featureAssistantLivingChatRouterV1: true,
compactWhitespace: (text: string) => text.replace(/\s+/g, " ").trim(),
repairAddressMojibake: (text: string) => text,
repairAddressMojibake: options?.repairAddressMojibake ?? ((text: string) => text),
toNonEmptyString: (value: unknown) => {
if (value === null || value === undefined) {
return null;
@@ -34,6 +34,8 @@ function buildPolicy() {
}
describe("assistantLivingModePolicy", () => {
const colloquialGreeting = "\u043f\u0440\u0438\u0432\u0435\u0442\u0438\u043a - \u0447\u0435 \u043a\u0430\u043a \u0442\u0430\u043c \u0434\u0435\u043b\u0430";
it("detects explicit recap wording as memory signal even when selected-object words are present", () => {
const policy = buildPolicy();
@@ -63,6 +65,21 @@ describe("assistantLivingModePolicy", () => {
expect(decision.reason).toBe("living_chat_signal_detected");
});
it("detects colloquial greeting with extra words as living chat signal", () => {
const policy = buildPolicy();
expect(policy.hasLivingChatSignal(colloquialGreeting)).toBe(true);
});
it("detects mojibake colloquial greeting after repair", () => {
const policy = buildPolicy({
repairAddressMojibake: (text: string) =>
text === "приветик - че как там дела" ? colloquialGreeting : text
});
expect(policy.hasLivingChatSignal("приветик - че как там дела")).toBe(true);
});
it("keeps explicit inventory question in deep mode", () => {
const policy = buildPolicy();