xmpp-llm-bot/session.js
2026-09-15 16:18:12 +03:00

48 lines
1.1 KiB
JavaScript

/** @import { OpenAI } from "openai" */
/** @import { SessionDriverInterface, SessionContent, ChatMessage } from "./types.js" */
/**
* @param {'local'} driver
*/
export function createSessionManager(driver) {
switch (driver) {
case "local":
return createLocalSessionManager();
default:
throw new Error("Unknown session manager");
}
}
/** @returns {SessionDriverInterface} */
function createLocalSessionManager() {
/** @type {Map<string, SessionContent>} */
const sessions = new Map();
return {
getHistory(from) {
let chatHistory = sessions.get(from);
if (!chatHistory) {
chatHistory = { messages: [] };
sessions.set(from, chatHistory);
}
return chatHistory;
},
flush() {
sessions.clear();
},
saveMessage(from, message) {
const chatHistory = this.getHistory(from);
chatHistory.messages.push(message);
if (message.role === "assistant") {
if (chatHistory.messages.length > Number.parseInt(process.env.MAX_MESSAGES_LIMIT, 10))
chatHistory.messages.splice(0, 2);
}
}
};
}