ЮИ - редактура вопросов в АВТОПРОГОНАХ
This commit is contained in:
@@ -31,6 +31,7 @@ export interface AssistantLivingChatRuntimeInput {
|
||||
hasOperationalAdminActionRequestSignal: (message: string) => boolean;
|
||||
hasOrganizationFactLookupSignal: (message: string) => boolean;
|
||||
hasOrganizationFactFollowupSignal: (message: string, items: unknown[]) => boolean;
|
||||
hasLivingChatSignal: (message: string) => boolean;
|
||||
shouldEmitOrganizationSelectionReply: (message: string, activeOrganization: string | null) => boolean;
|
||||
hasAssistantCapabilityQuestionSignal: (message: string) => boolean;
|
||||
resolveDataScopeProbe: () => Promise<Record<string, unknown> | null>;
|
||||
@@ -51,6 +52,7 @@ export interface AssistantLivingChatRuntimeInput {
|
||||
};
|
||||
buildAssistantSafetyRefusalReply: () => string;
|
||||
buildAssistantDataScopeContractReply: (scopeProbe: Record<string, unknown> | null) => string;
|
||||
buildAssistantProactiveOrganizationOfferReply: (scopeProbe: Record<string, unknown> | null) => string;
|
||||
buildAssistantOrganizationFactBoundaryReply: (organization: string | null) => string;
|
||||
buildAssistantDataScopeSelectionReply: (organization: string | null) => string;
|
||||
buildAssistantOperationalBoundaryReply: () => string;
|
||||
@@ -134,6 +136,13 @@ function findLastAddressDebugWithItem(items: unknown[]): Record<string, unknown>
|
||||
return null;
|
||||
}
|
||||
|
||||
function hasPriorAssistantTurn(items: unknown[]): boolean {
|
||||
if (!Array.isArray(items)) {
|
||||
return false;
|
||||
}
|
||||
return items.some((item) => item && typeof item === "object" && (item as { role?: string }).role === "assistant");
|
||||
}
|
||||
|
||||
function findLastAddressDebug(items: unknown[]): Record<string, unknown> | null {
|
||||
if (!Array.isArray(items)) {
|
||||
return null;
|
||||
@@ -252,6 +261,7 @@ export async function runAssistantLivingChatRuntime(
|
||||
let livingChatScriptGuardReason: string | null = null;
|
||||
let livingChatGroundingGuardApplied = false;
|
||||
let livingChatGroundingGuardReason: string | null = null;
|
||||
let livingChatProactiveScopeOfferApplied = false;
|
||||
let knownOrganizations = input.mergeKnownOrganizations(input.sessionScope.knownOrganizations ?? []);
|
||||
let selectedOrganization = input.toNonEmptyString(input.sessionScope.selectedOrganization);
|
||||
let activeOrganization = input.toNonEmptyString(input.sessionScope.activeOrganization);
|
||||
@@ -348,6 +358,33 @@ export async function runAssistantLivingChatRuntime(
|
||||
livingChatGroundingGuardReason = groundingGuard.reason;
|
||||
livingChatSource = "llm_chat_grounding_guard";
|
||||
}
|
||||
|
||||
const shouldOfferProactiveOrganizationScope =
|
||||
!selectedOrganization &&
|
||||
!activeOrganization &&
|
||||
!hasPriorAssistantTurn(input.sessionItems) &&
|
||||
input.modeDecision?.mode === "chat" &&
|
||||
input.hasLivingChatSignal(userMessage);
|
||||
if (shouldOfferProactiveOrganizationScope) {
|
||||
const proactiveScopeProbe = await input.resolveDataScopeProbe();
|
||||
const mergedKnownOrganizations = input.mergeKnownOrganizations([
|
||||
...knownOrganizations,
|
||||
...(Array.isArray(proactiveScopeProbe?.organizations) ? (proactiveScopeProbe.organizations as unknown[]) : [])
|
||||
]);
|
||||
knownOrganizations = mergedKnownOrganizations;
|
||||
if (!activeOrganization && mergedKnownOrganizations.length === 1) {
|
||||
activeOrganization = mergedKnownOrganizations[0];
|
||||
}
|
||||
const proactiveOffer = input.buildAssistantProactiveOrganizationOfferReply(proactiveScopeProbe);
|
||||
if (proactiveOffer) {
|
||||
chatText = [chatText, proactiveOffer].filter((part) => String(part ?? "").trim().length > 0).join(" ");
|
||||
livingChatProactiveScopeOfferApplied = true;
|
||||
livingChatSource = "llm_chat_with_proactive_scope_offer";
|
||||
if (!dataScopeProbe) {
|
||||
dataScopeProbe = proactiveScopeProbe;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!chatText) {
|
||||
@@ -385,6 +422,7 @@ export async function runAssistantLivingChatRuntime(
|
||||
living_chat_script_guard_reason: livingChatScriptGuardReason,
|
||||
living_chat_grounding_guard_applied: livingChatGroundingGuardApplied,
|
||||
living_chat_grounding_guard_reason: livingChatGroundingGuardReason,
|
||||
living_chat_proactive_scope_offer_applied: livingChatProactiveScopeOfferApplied,
|
||||
living_chat_data_scope_probe_status: dataScopeProbe?.status ?? null,
|
||||
living_chat_data_scope_probe_channel: dataScopeProbe?.channel ?? null,
|
||||
living_chat_data_scope_probe_org_count: Array.isArray(dataScopeProbe?.organizations)
|
||||
|
||||
Reference in New Issue
Block a user