NODEDC_1C/llm_normalizer/backend/src/services/assistantUserTurnBootstrapR...

65 lines
2.3 KiB
TypeScript

import type { AssistantConversationItem, AssistantSessionState } from "../types/assistant";
export interface AssistantUserTurnBootstrapPayloadLike {
session_id?: unknown;
user_message?: unknown;
message?: unknown;
context?: unknown;
}
export interface RunAssistantUserTurnBootstrapRuntimeInput {
payload: AssistantUserTurnBootstrapPayloadLike;
ensureSession: (sessionId: string) => AssistantSessionState;
appendItem: (sessionId: string, item: AssistantConversationItem) => void;
getSession: (sessionId: string) => AssistantSessionState | null;
persistSession: (session: AssistantSessionState) => void;
compactWhitespace: (value: unknown) => string;
repairAddressMojibake: (value: unknown) => string;
resolveRuntimeAnalysisContext: (value: unknown) => { as_of_date: string | null };
messageIdFactory?: () => string;
nowIso?: () => string;
}
export interface RunAssistantUserTurnBootstrapRuntimeOutput {
session: AssistantSessionState;
sessionId: string;
userMessageRaw: string;
userMessage: string;
runtimeAnalysisContext: { as_of_date: string | null };
userItem: AssistantConversationItem;
}
export function runAssistantUserTurnBootstrapRuntime(
input: RunAssistantUserTurnBootstrapRuntimeInput
): RunAssistantUserTurnBootstrapRuntimeOutput {
const session = input.ensureSession(String(input.payload.session_id ?? ""));
const sessionId = session.session_id;
const userMessageRaw = String(input.payload.user_message ?? input.payload.message ?? "").trim();
const repairedUserMessage = input.compactWhitespace(input.repairAddressMojibake(userMessageRaw));
const userMessage = repairedUserMessage || userMessageRaw;
const runtimeAnalysisContext = input.resolveRuntimeAnalysisContext(input.payload?.context);
const userItem: AssistantConversationItem = {
message_id: (input.messageIdFactory ?? (() => "msg-unknown"))(),
session_id: sessionId,
role: "user",
text: userMessage,
reply_type: null,
created_at: (input.nowIso ?? (() => new Date().toISOString()))(),
trace_id: null,
debug: null
};
input.appendItem(sessionId, userItem);
const sessionAfterUserAppend = input.getSession(sessionId);
if (sessionAfterUserAppend) {
input.persistSession(sessionAfterUserAppend);
}
return {
session,
sessionId,
userMessageRaw,
userMessage,
runtimeAnalysisContext,
userItem
};
}