/** @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} */ 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); } } }; }