session-manager.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { BaseMessage } from "@langchain/core/messages";
  2. export interface SessionItem {
  3. message: BaseMessage;
  4. category: string;
  5. }
  6. export interface SessionData {
  7. items: SessionItem[];
  8. entityStore: Record<string, any>;
  9. modelProvider: 'openai' | 'gemini';
  10. }
  11. export class SessionManager {
  12. private sessions: Map<string, SessionData> = new Map();
  13. createSession(socketId: string) {
  14. this.sessions.set(socketId, {
  15. items: [],
  16. entityStore: {},
  17. modelProvider: 'gemini' // Default
  18. });
  19. console.log(`Session created for ${socketId}`);
  20. }
  21. deleteSession(socketId: string) {
  22. this.sessions.delete(socketId);
  23. console.log(`Session deleted for ${socketId}`);
  24. }
  25. getSession(socketId: string): SessionData {
  26. let session = this.sessions.get(socketId);
  27. if (!session) {
  28. this.createSession(socketId);
  29. return this.sessions.get(socketId)!;
  30. }
  31. return session;
  32. }
  33. getValidHistory(socketId: string): BaseMessage[] {
  34. const session = this.getSession(socketId);
  35. return session.items
  36. .filter(item => item.category !== 'OutOfScope')
  37. .map(item => item.message);
  38. }
  39. updateSession(socketId: string, userMsg: BaseMessage, aiMsg: BaseMessage | undefined, category: string, entityStore: Record<string, any>) {
  40. const session = this.getSession(socketId);
  41. // Add User Message
  42. session.items.push({ message: userMsg, category });
  43. // Add AI Message if exists
  44. if (aiMsg) {
  45. session.items.push({ message: aiMsg, category });
  46. }
  47. // Update Entity Store
  48. session.entityStore = entityStore;
  49. this.sessions.set(socketId, session);
  50. }
  51. setModelProvider(socketId: string, provider: 'openai' | 'gemini') {
  52. const session = this.getSession(socketId);
  53. session.modelProvider = provider;
  54. this.sessions.set(socketId, session); // Ensure map is updated if needed (though object ref works)
  55. console.log(`Updated model provider for ${socketId} to ${provider}`);
  56. }
  57. getModelProvider(socketId: string): 'openai' | 'gemini' {
  58. return this.getSession(socketId).modelProvider;
  59. }
  60. }