65 lines
2.3 KiB
TypeScript
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
|
|
};
|
|
}
|