56 lines
1.6 KiB
JavaScript
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);
|
|
}
|
|
|
|
} |