UNPKG

@anam-ai/js-sdk

Version:

Client side JavaScript SDK for Anam AI

70 lines 3.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MessageHistoryClient = void 0; const types_1 = require("../types"); class MessageHistoryClient { constructor(publicEventEmitter, internalEventEmitter) { this.messages = []; this.publicEventEmitter = publicEventEmitter; this.internalEventEmitter = internalEventEmitter; // register for events this.internalEventEmitter.addListener(types_1.InternalEvent.WEBRTC_CHAT_MESSAGE_RECEIVED, this.processWebRtcTextMessageEvent.bind(this)); } webRtcTextMessageEventToMessageStreamEvent(event) { return { id: `${event.role}::${event.message_id}`, // id is the same for persona and user for a single question response, so we need to differentiate them content: event.content, role: event.role, endOfSpeech: event.end_of_speech, interrupted: event.interrupted, }; } processUserMessage(messageEvent) { // each user message is added directly to the history // user messages can not be interrupted const userMessage = { id: messageEvent.id, content: messageEvent.content, role: messageEvent.role, }; this.messages.push(userMessage); } processPersonaMessage(messageEvent) { const personaMessage = { id: messageEvent.id, content: messageEvent.content, role: messageEvent.role, interrupted: messageEvent.interrupted, }; // check for existing message in the history const existingMessageIndex = this.messages.findIndex((m) => m.id === personaMessage.id); if (existingMessageIndex !== -1) { const existingMessage = this.messages[existingMessageIndex]; // update the existing message this.messages[existingMessageIndex] = Object.assign(Object.assign({}, existingMessage), { content: existingMessage.content + personaMessage.content, interrupted: existingMessage.interrupted || personaMessage.interrupted }); } else { // add the new persona message to the history this.messages.push(personaMessage); } } processWebRtcTextMessageEvent(event) { const messageStreamEvent = this.webRtcTextMessageEventToMessageStreamEvent(event); // pass to callback stream this.publicEventEmitter.emit(types_1.AnamEvent.MESSAGE_STREAM_EVENT_RECEIVED, messageStreamEvent); // update the message history switch (messageStreamEvent.role) { case types_1.MessageRole.USER: this.processUserMessage(messageStreamEvent); break; case types_1.MessageRole.PERSONA: this.processPersonaMessage(messageStreamEvent); break; } if (messageStreamEvent.endOfSpeech) { this.publicEventEmitter.emit(types_1.AnamEvent.MESSAGE_HISTORY_UPDATED, this.messages); } } } exports.MessageHistoryClient = MessageHistoryClient; //# sourceMappingURL=MessageHistoryClient.js.map