| class ChatGPT{ |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| definicion = { |
| role: "system", |
| content: "Te llamas Chatsito, eres un asistente de apoyo a los amigos de " + |
| "MIA, tu objetivo principal es responder preguntas de manera puntual y " + |
| "objetiva a tu interlocutor.\n" + |
| "Si requieres ejecutar m谩s funciones, ejecuta tantas veces como lo " + |
| "necesites\n" + |
| "Responde de manera amistosa con en el texto m谩s corto y objetivo posible.\n" + |
| "Knowledge cutoff: " + |
| "2021-09-01\nCurrent date: {date}".replace("{date}", new Date().toJSON().slice(0, 10)) |
| }; |
|
|
| endpointChat = "/chat"; |
| token = null; |
| windowHandlers = {} |
| |
| constructor(token){ |
| |
| this.token = token; |
| |
| |
| this.cargarEventos(); |
|
|
| this.cargarChats() |
|
|
| } |
| |
| cargarEventos(){ |
| $(document).on("chat:enviar", (event, params) => { |
| |
| this.reintentos = 0; |
| this.enviar(params.ctx, params.ctx.conversacion); |
| }); |
| $(document).on("chat:salvar", (event, params) => this.salvarChats(params.index, params.conversacion)) |
| $(document).on("chat:eliminar", (event, params) => this.eliminarChat(params.ctx, params.index)) |
| $(document).on("mostrar:opciones", () => this.mostrarOpciones()) |
| $("#nuevoChat").on("click", () => this.crearChat()) |
| } |
|
|
| crearChat(index, conversacion){ |
| |
| let uuid = this.generateRandID() |
| this.windowHandlers[index||uuid] = new WindowHandler( |
| conversacion||[this.definicion], |
| index||uuid, |
| this |
| ); |
| } |
|
|
| eliminarChat(ctx, index){ |
| |
| |
| |
| |
| delete this.windowHandlers[index] |
| let conversaciones = {} |
| try{conversaciones = JSON.parse(localStorage.getItem("conversaciones"))||{}}catch{} |
| if(index in conversaciones){delete conversaciones[index]} |
| localStorage.setItem("conversaciones", JSON.stringify(conversaciones)) |
|
|
| |
| let labels = $(".tab-label") |
| $(labels[0]).click(); |
| |
| |
| if(Object.keys(this.windowHandlers).length==0){ |
| this.crearChat() |
| } |
| } |
|
|
| enviar(ctx, conversacion){ |
| |
|
|
| |
| let tempMensajes = []; |
| for(let actMsg of conversacion){ |
| tempMensajes.push({role: actMsg.role, content: actMsg.content}) |
| } |
| |
| |
| ctx.respuestaInicio() |
|
|
| |
| let self = this; |
|
|
| |
| const consume = responseReader => { |
| |
| |
| return responseReader.read().then(result => { |
|
|
| |
| if (result.done) { return; } |
|
|
| |
| const chunk = result.value; |
| let text = new TextDecoder("utf-8").decode(chunk) |
| |
| |
| let responses = JSON.parse('[' + text.replace(/\}\{/g, '},{') + ']') |
| |
| |
| for(let response of responses){ |
| switch(response.comando){ |
| |
| case "token": |
| self.token = response.token; |
| break; |
| |
| case "status": |
| ctx.respuestaStatus(response.status.mensaje, response.status.modo) |
| break; |
| |
| case "mensaje": |
| ctx.respuestaMensaje(response.mensaje) |
| break; |
| |
| |
| |
| |
| |
| |
| default: |
| console.log("???") |
| } |
| } |
|
|
| |
| return consume(responseReader); |
| }).catch(err =>{ |
| |
| console.log('algo paso', err) |
| }); |
| } |
| |
| |
| fetch(this.endpointChat, { |
| method: "POST", |
| body: JSON.stringify({ |
| messages: tempMensajes, |
| token: this.token, |
| config: {"temperature": 1,"frequency_penalty": 0,"presence_penalty": 0} |
| }), |
| timeout: 60000, |
| dataType: "json" |
| }).then(response => { |
| if(response.status != 200){ |
| ctx.respuestaError(response) |
| console.log("Error: ", response) |
| return |
| } |
| return consume(response.body.getReader()); |
| }) |
| .catch(err =>{ |
| |
| console.log('Solicitud fallida', err) |
| ctx.respuestaError(response) |
| }); |
| |
| } |
|
|
| salvarChats(index, conversacion){ |
| let conversaciones = {} |
| try{conversaciones = JSON.parse(localStorage.getItem("conversaciones"))||{}}catch{} |
| conversaciones[index] = conversacion |
| localStorage.setItem("conversaciones", JSON.stringify(conversaciones)) |
| } |
|
|
| cargarChats(){ |
| let conversaciones = {} |
| try{conversaciones = JSON.parse(localStorage.getItem("conversaciones"))||{}}catch{} |
|
|
| if(!conversaciones || !Object.keys(conversaciones).length){ |
| this.crearChat() |
| return |
| } |
| for(let key in conversaciones){ |
| this.crearChat(key, conversaciones[key]) |
| } |
|
|
| } |
|
|
| mostrarOpciones(){ |
|
|
| } |
|
|
| generateRandID(){ |
| return btoa((Math.random()*100**8)).replaceAll("=","").split("").reverse().join(""); |
| } |
|
|
| |
| } |
|
|