ГЛОБАЛЬНЫЙ РЕФАКТОРИНГ АРХИТЕКТУРЫ - Рефакторинг этапов 2.50: вынос resolveSessionOrganizationScopeContext(...) + related scope sanitation в отдельный runtime-adapter, чтобы добить верхний слой assistantService.
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
export interface AssistantSessionOrganizationScopeContext {
|
||||
knownOrganizations: string[];
|
||||
selectedOrganization: string | null;
|
||||
activeOrganization: string | null;
|
||||
}
|
||||
|
||||
export interface ResolveSessionOrganizationScopeContextRuntimeInput<ItemType = unknown> {
|
||||
userMessage: string;
|
||||
items: ItemType[];
|
||||
extractKnownOrganizationsFromHistory: (items: ItemType[]) => string[];
|
||||
resolveOrganizationSelectionFromMessage: (userMessage: string, knownOrganizations: string[]) => string | null;
|
||||
findLastAssistantActiveOrganization: (items: ItemType[]) => string | null;
|
||||
normalizeOrganizationScopeValue: (value: unknown) => string | null;
|
||||
}
|
||||
|
||||
export interface MergeFollowupContextWithOrganizationScopeRuntimeInput {
|
||||
followupContext: unknown;
|
||||
organization: unknown;
|
||||
normalizeOrganizationScopeValue: (value: unknown) => string | null;
|
||||
toNonEmptyString: (value: unknown) => string | null;
|
||||
}
|
||||
|
||||
export function resolveSessionOrganizationScopeContextRuntime<ItemType = unknown>(
|
||||
input: ResolveSessionOrganizationScopeContextRuntimeInput<ItemType>
|
||||
): AssistantSessionOrganizationScopeContext {
|
||||
const knownOrganizations = input.extractKnownOrganizationsFromHistory(input.items);
|
||||
const selectedOrganization = input.resolveOrganizationSelectionFromMessage(
|
||||
input.userMessage,
|
||||
knownOrganizations
|
||||
);
|
||||
const lastActiveOrganization = input.findLastAssistantActiveOrganization(input.items);
|
||||
const activeOrganization = selectedOrganization ?? input.normalizeOrganizationScopeValue(lastActiveOrganization);
|
||||
|
||||
return {
|
||||
knownOrganizations,
|
||||
selectedOrganization,
|
||||
activeOrganization
|
||||
};
|
||||
}
|
||||
|
||||
export function mergeFollowupContextWithOrganizationScopeRuntime(
|
||||
input: MergeFollowupContextWithOrganizationScopeRuntimeInput
|
||||
): Record<string, unknown> | null {
|
||||
const normalizedOrganization = input.normalizeOrganizationScopeValue(input.organization);
|
||||
const hasBase = input.followupContext && typeof input.followupContext === "object";
|
||||
const base = hasBase ? { ...(input.followupContext as Record<string, unknown>) } : {};
|
||||
if (!normalizedOrganization) {
|
||||
return hasBase ? base : null;
|
||||
}
|
||||
|
||||
const previousFiltersRaw = base.previous_filters;
|
||||
const previousFilters =
|
||||
previousFiltersRaw && typeof previousFiltersRaw === "object"
|
||||
? { ...(previousFiltersRaw as Record<string, unknown>) }
|
||||
: {};
|
||||
if (!input.toNonEmptyString(previousFilters.organization)) {
|
||||
previousFilters.organization = normalizedOrganization;
|
||||
}
|
||||
base.previous_filters = previousFilters;
|
||||
return base;
|
||||
}
|
||||
@@ -19,6 +19,7 @@ import * as assistantCanon_1 from "./assistantCanon";
|
||||
import * as assistantAddressAttemptRuntimeAdapter_1 from "./assistantAddressAttemptRuntimeAdapter";
|
||||
import * as assistantCoverageGrounding_1 from "./assistantCoverageGrounding";
|
||||
import * as assistantDeepTurnAttemptRuntimeAdapter_1 from "./assistantDeepTurnAttemptRuntimeAdapter";
|
||||
import * as assistantOrganizationScopeRuntimeAdapter_1 from "./assistantOrganizationScopeRuntimeAdapter";
|
||||
import * as assistantTurnAttemptRuntimeAdapter_1 from "./assistantTurnAttemptRuntimeAdapter";
|
||||
import * as assistantTurnRuntimeDepsAdapter_1 from "./assistantTurnRuntimeDepsAdapter";
|
||||
import * as assistantTurnRuntimeInputBuilder_1 from "./assistantTurnRuntimeInputBuilder";
|
||||
@@ -3727,30 +3728,22 @@ function resolveOrganizationSelectionFromMessage(userMessage, knownOrganizations
|
||||
return best.organization;
|
||||
}
|
||||
function resolveSessionOrganizationScopeContext(userMessage, items) {
|
||||
const knownOrganizations = extractKnownOrganizationsFromHistory(items);
|
||||
const selectedOrganization = resolveOrganizationSelectionFromMessage(userMessage, knownOrganizations);
|
||||
const lastActiveOrganization = findLastAssistantActiveOrganization(items);
|
||||
const activeOrganization = selectedOrganization ?? normalizeOrganizationScopeValue(lastActiveOrganization);
|
||||
return {
|
||||
knownOrganizations,
|
||||
selectedOrganization,
|
||||
activeOrganization
|
||||
};
|
||||
return (0, assistantOrganizationScopeRuntimeAdapter_1.resolveSessionOrganizationScopeContextRuntime)({
|
||||
userMessage,
|
||||
items,
|
||||
extractKnownOrganizationsFromHistory,
|
||||
resolveOrganizationSelectionFromMessage,
|
||||
findLastAssistantActiveOrganization,
|
||||
normalizeOrganizationScopeValue
|
||||
});
|
||||
}
|
||||
function mergeFollowupContextWithOrganizationScope(followupContext, organization) {
|
||||
const normalizedOrganization = normalizeOrganizationScopeValue(organization);
|
||||
const base = followupContext && typeof followupContext === "object" ? { ...followupContext } : {};
|
||||
if (!normalizedOrganization) {
|
||||
return followupContext && typeof followupContext === "object" ? base : null;
|
||||
}
|
||||
const previousFilters = base.previous_filters && typeof base.previous_filters === "object"
|
||||
? { ...base.previous_filters }
|
||||
: {};
|
||||
if (!toNonEmptyString(previousFilters.organization)) {
|
||||
previousFilters.organization = normalizedOrganization;
|
||||
}
|
||||
base.previous_filters = previousFilters;
|
||||
return base;
|
||||
return (0, assistantOrganizationScopeRuntimeAdapter_1.mergeFollowupContextWithOrganizationScopeRuntime)({
|
||||
followupContext,
|
||||
organization,
|
||||
normalizeOrganizationScopeValue,
|
||||
toNonEmptyString
|
||||
});
|
||||
}
|
||||
export function resolveSessionOrganizationScopeContextForTests(userMessage, items) {
|
||||
return resolveSessionOrganizationScopeContext(userMessage, items);
|
||||
|
||||
Reference in New Issue
Block a user