mirror of
https://github.com/sergeyyarkov/xmpp-llm-bot.git
synced 2026-10-11 02:19:06 +03:00
48 lines
1.1 KiB
JavaScript
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);
|
|
}
|
|
}
|
|
};
|
|
}
|