NODEDC_1C/llm_normalizer/backend/src/services/assistantTurnCommitRuntimeA...

50 lines
1.7 KiB
TypeScript

import type { AssistantConversationItem, AssistantSessionState } from "../types/assistant";
export interface CommitAssistantTurnAndLogInput {
sessionId: string;
assistantItem: AssistantConversationItem;
eventType: string;
logDetails: Record<string, unknown>;
appendItem: (sessionId: string, item: AssistantConversationItem) => void;
getSession: (sessionId: string) => AssistantSessionState | null;
persistSession: (session: AssistantSessionState) => void;
cloneConversation: (items: AssistantConversationItem[]) => AssistantConversationItem[];
logEvent: (payload: {
timestamp: string;
level: "info";
service: "assistant_loop";
message: "assistant_message_processed";
sessionId: string;
eventType: string;
details: Record<string, unknown>;
}) => void;
nowIso?: () => string;
}
export interface CommitAssistantTurnAndLogOutput {
currentSession: AssistantSessionState | null;
conversation: AssistantConversationItem[];
}
export function commitAssistantTurnAndLog(input: CommitAssistantTurnAndLogInput): CommitAssistantTurnAndLogOutput {
input.appendItem(input.sessionId, input.assistantItem);
const currentSession = input.getSession(input.sessionId);
if (currentSession) {
input.persistSession(currentSession);
}
const conversation = input.cloneConversation(currentSession?.items ?? []);
input.logEvent({
timestamp: (input.nowIso ?? (() => new Date().toISOString()))(),
level: "info",
service: "assistant_loop",
message: "assistant_message_processed",
sessionId: input.sessionId,
eventType: input.eventType,
details: input.logDetails
});
return {
currentSession,
conversation
};
}