Files
NODEDC_1C/llm_normalizer/backend/src/services/assistantTurnAttemptRuntimeAdapter.ts
T

102 lines
3.5 KiB
TypeScript

import type { RunAssistantAddressRuntimeOutput } from "./assistantAddressRuntimeAdapter";
import type { RunAssistantUserTurnBootstrapRuntimeOutput } from "./assistantUserTurnBootstrapRuntimeAdapter";
import {
buildAssistantTurnAttemptAddressRuntimeInput,
buildAssistantTurnAttemptDeepRuntimeInput
} from "./assistantTurnAttemptInputBuilder";
export interface AssistantSessionOrganizationScopeContext {
knownOrganizations: string[];
selectedOrganization: string | null;
activeOrganization: string | null;
}
export interface RunAssistantTurnAttemptRuntimeAddressInput<PayloadType = unknown> {
payload: PayloadType;
sessionId: string;
userMessage: string;
sessionItems: unknown[];
sessionAddressNavigationState?: unknown;
runtimeAnalysisContext: { as_of_date: string | null };
sessionOrganizationScope: AssistantSessionOrganizationScopeContext;
}
export interface RunAssistantTurnAttemptRuntimeDeepInput<PayloadType = unknown> {
payload: PayloadType;
sessionId: string;
questionId: string;
userMessage: string;
runtimeAnalysisContext: unknown;
sessionInvestigationState: unknown;
addressRuntimeMetaForDeep: Record<string, unknown> | null;
}
export interface RunAssistantTurnAttemptRuntimeInput<ResponseType = unknown, PayloadType = unknown> {
payload: PayloadType;
runUserTurnBootstrapRuntime: (payload: PayloadType) => RunAssistantUserTurnBootstrapRuntimeOutput;
resolveSessionOrganizationScopeContext: (
userMessage: string,
sessionItems: unknown[],
sessionAddressNavigationState?: unknown
) => AssistantSessionOrganizationScopeContext;
runAddressAttemptRuntime: (
input: RunAssistantTurnAttemptRuntimeAddressInput<PayloadType>
) => Promise<RunAssistantAddressRuntimeOutput<ResponseType>>;
runDeepTurnAttemptRuntime: (
input: RunAssistantTurnAttemptRuntimeDeepInput<PayloadType>
) => Promise<{ response: ResponseType }>;
}
export interface RunAssistantTurnAttemptRuntimeOutput<ResponseType = unknown> {
response: ResponseType;
source: "address" | "deep";
addressRuntimeMetaForDeep: Record<string, unknown> | null;
userTurn: RunAssistantUserTurnBootstrapRuntimeOutput;
sessionOrganizationScope: AssistantSessionOrganizationScopeContext;
}
export async function runAssistantTurnAttemptRuntime<ResponseType = unknown, PayloadType = unknown>(
input: RunAssistantTurnAttemptRuntimeInput<ResponseType, PayloadType>
): Promise<RunAssistantTurnAttemptRuntimeOutput<ResponseType>> {
const userTurn = input.runUserTurnBootstrapRuntime(input.payload);
const sessionOrganizationScope = input.resolveSessionOrganizationScopeContext(
userTurn.userMessage,
userTurn.session.items,
userTurn.session.address_navigation_state ?? null
);
const addressRuntime = await input.runAddressAttemptRuntime(
buildAssistantTurnAttemptAddressRuntimeInput({
payload: input.payload,
userTurn,
sessionOrganizationScope
})
);
const addressRuntimeMetaForDeep = addressRuntime.addressRuntimeMetaForDeep ?? null;
if (addressRuntime.handled && addressRuntime.response) {
return {
response: addressRuntime.response,
source: "address",
addressRuntimeMetaForDeep,
userTurn,
sessionOrganizationScope
};
}
const deepTurnRuntime = await input.runDeepTurnAttemptRuntime(
buildAssistantTurnAttemptDeepRuntimeInput({
payload: input.payload,
userTurn,
addressRuntimeMetaForDeep
})
);
return {
response: deepTurnRuntime.response,
source: "deep",
addressRuntimeMetaForDeep,
userTurn,
sessionOrganizationScope
};
}