NODEDC_1C/llm_normalizer/backend/dist/services/assistantMetaFollowupPolicy.js

124 lines
6.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";
// @ts-nocheck
Object.defineProperty(exports, "__esModule", { value: true });
exports.createAssistantMetaFollowupPolicy = createAssistantMetaFollowupPolicy;
function collectMessageSamples(input) {
const values = [
input.rawUserMessage,
input.repairedRawUserMessage,
input.effectiveAddressUserMessage,
input.repairedEffectiveAddressUserMessage
];
return Array.from(new Set(values
.map((item) => String(item ?? "").trim())
.filter((item) => item.length > 0)));
}
function hasSignalAcrossSamples(samples, detector) {
return samples.some((sample) => detector(sample));
}
function hasImplicitHistoricalCapabilityMetaSignal(samples) {
return samples.some((sample) => /(?:историческ|история|архив|раньше|ретро|старые\s+данные)/iu.test(sample) &&
/(?:мож(?:ешь|ем|но)|уме(?:ешь|ете))/iu.test(sample));
}
function normalizedSampleText(value) {
return String(value ?? "")
.toLowerCase()
.replace(/\s+/g, " ")
.replace(/\u0451/gu, "\u0435")
.trim();
}
function hasSchemaDataScopeMetaSignal(samples) {
return samples.some((sample) => {
const text = normalizedSampleText(sample);
if (!text) {
return false;
}
const hasOneCOrSchemaCue = /(?:\b1\s*[cс]\b|1с|metadata|schema|схем|структур|метаданн)/iu.test(text);
const hasSchemaObjectCue = /(?:справочник|справочники|регистр|регистры|объект(?:ы|ов)?|пол[ея]|связ[ьи]|реквизит|таблиц|раздел(?:ы|ов)?|catalog|register|object|field|relation|link)/iu.test(text);
const hasDirectSchemaQuestion = /(?:какие\s+(?:справочник|справочники|регистры|объекты|поля|связи|реквизиты)|где\s+(?:лежат|хранятся).*(?:данные|поля)|что\s+есть\s+в\s+1с\s+по)/iu.test(text);
const hasDocumentSchemaQuestion = /(?:какие\s+(?:поля|связи|реквизиты).{0,80}(?:документ|реализац|поступлен)|(?:документ|реализац|поступлен).{0,80}(?:поля|связи|реквизиты))/iu.test(text);
return (hasOneCOrSchemaCue && hasSchemaObjectCue) || hasDirectSchemaQuestion || hasDocumentSchemaQuestion;
});
}
function hasBusinessBoundaryQuestionSignal(samples) {
return samples.some((sample) => {
const text = normalizedSampleText(sample);
if (!text) {
return false;
}
const hasClassificationCue = /(?:можно\s+ли\s+считать|это\s+можно\s+считать|как\s+считать|классифиц|объясни\s+аккуратно|это\s+уже|это\s+пока|can\s+this\s+be\s+treated)/iu.test(text);
const hasBusinessObjectCue = /(?:просроч|открыт\w*\s+задолж|долг|дебитор|кредитор|ликвид|резерв|неликвид|склад|прибыл|марж|оборот|контрагент|покупател|поставщик|overdue|debt|receivable|payable|stock|profit|margin)/iu.test(text);
return hasClassificationCue && hasBusinessObjectCue;
});
}
function hasContextIntegrityInspectionSignal(samples) {
return samples.some((sample) => {
const text = normalizedSampleText(sample);
return Boolean(text &&
/(?:проверь\s+себя|не\s+смешал|не\s+перепутал|правильно\s+ли\s+контур|объясни\s+контур|self[-\s]?check)/iu.test(text) &&
/(?:контрагент|организац|компан|контур|scope|counterparty|organization|company)/iu.test(text));
});
}
function createAssistantMetaFollowupPolicy(deps) {
function resolveMetaSignalSet(input) {
const samples = collectMessageSamples(input);
if (samples.length === 0) {
return {
dataScopeMetaQuery: false,
capabilityMetaQuery: false,
metaAnswerFollowupSignal: false,
answerInspectionFollowupSignal: false
};
}
const dataScopeMetaQuery = hasSignalAcrossSamples(samples, deps.hasAssistantDataScopeMetaQuestionSignal) ||
hasSchemaDataScopeMetaSignal(samples);
const businessBoundaryQuestion = hasBusinessBoundaryQuestionSignal(samples);
return {
dataScopeMetaQuery,
capabilityMetaQuery: !businessBoundaryQuestion &&
(hasSignalAcrossSamples(samples, deps.shouldHandleAsAssistantCapabilityMetaQuery) ||
hasImplicitHistoricalCapabilityMetaSignal(samples)),
metaAnswerFollowupSignal: hasSignalAcrossSamples(samples, deps.hasMetaAnswerFollowupSignal),
answerInspectionFollowupSignal: hasSignalAcrossSamples(samples, deps.hasAnswerInspectionFollowupSignal) ||
hasContextIntegrityInspectionSignal(samples)
};
}
function resolveHardMetaMode(input) {
if (Boolean(input.dataScopeMetaQuery)) {
return "data_scope";
}
if (Boolean(input.capabilityMetaQuery) && !Boolean(input.dataRetrievalSignal)) {
return "capability";
}
return null;
}
function isMetaFollowupOverGroundedAnswer(input) {
return Boolean(input.followupContext &&
input.hasPriorAddressAnswerContext &&
(input.metaAnswerFollowupSignal || input.vatEvaluativeFollowupSignal) &&
!input.dataScopeMetaQuery &&
!input.capabilityMetaQuery &&
!input.aggregateBusinessAnalyticsSignal &&
!input.dataRetrievalSignal &&
!input.strongDataSignal &&
String(input.resolvedMode ?? "") !== "address_query" &&
String(input.resolvedIntent ?? "") === "unknown" &&
(!input.llmContractIntent || String(input.llmContractIntent) === "unknown") &&
String(input.llmContractMode ?? "") !== "address_query");
}
function isAnswerInspectionFollowupOverGroundedAnswer(input) {
return Boolean(input.followupContext &&
input.hasPriorAddressAnswerContext &&
input.answerInspectionFollowupSignal &&
!input.dataScopeMetaQuery &&
!input.capabilityMetaQuery &&
!input.aggregateBusinessAnalyticsSignal);
}
return {
resolveMetaSignalSet,
resolveHardMetaMode,
isMetaFollowupOverGroundedAnswer,
isAnswerInspectionFollowupOverGroundedAnswer
};
}