102 lines
3.5 KiB
TypeScript
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
|
|
};
|
|
}
|