ai.chat/assistant.js

56 lines
1.6 KiB
JavaScript

export class ChatMessageEvent extends Event {
constructor(message) {
super("chatMessage");
this.message = message;
}
}
export class AssistantConnection extends EventTarget {
constructor(url, opts={}) {
super();
this.url = url;
this._chatMessages = [];
this._socket = new WebSocket(this.url)
this._socket.addEventListener("close",(event)=>{
console.log("assistant: websocket connection closed");
this._socket = null;
});
this._socket.addEventListener("message",(event)=>{
let msg = JSON.parse(event.data);
console.log("assistant: received", msg);
if (msg.type === "chatMessage"){
this._chatMessages.push(msg.message);
this.dispatchEvent(new ChatMessageEvent(msg.message));
}
});
this._socket.addEventListener("open",(event)=>{
console.log("assistant: websocket connected");
});
}
say(text){
if (this._socket){
let userMessage = {
"role": "user",
"content": text,
};
this._chatMessages.push(userMessage);
this.dispatchEvent(new ChatMessageEvent(userMessage));
let msg = JSON.stringify({
type: "chatMessage",
message: text,
});
console.log("assistant: send", msg);
this._socket.send(text);
}
}
get chatMessages(){
return Object.assign({}, this._chatMessages);
}
}