function wpaicgChatInit() { let wpaicgMicIcon = ''; let wpaicgStopIcon = ''; var wpaicgChatStream; var wpaicgChatRec; var wpaicgInput; var wpaicgChatAudioContext = window.AudioContext || window.webkitAudioContext; var wpaicgaudioContext; var wpaicgMicBtns = document.querySelectorAll('.wpaicg-mic-icon'); var wpaicgChatTyping = document.querySelectorAll('.wpaicg-chatbox-typing'); var wpaicgShortcodeTyping = document.querySelectorAll('.wpaicg-chat-shortcode-typing'); var wpaicgChatSend = document.querySelectorAll('.wpaicg-chatbox-send'); var wpaicgShortcodeSend = document.querySelectorAll('.wpaicg-chat-shortcode-send'); function wpaicgescapeHtml(unsafe) { return unsafe .replace(/&/g, "&") .replace(//g, ">") .replace(/"/g, """) .replace(/'/g, "'"); } function wpaicgstartChatRecording() { let constraints = {audio: true, video: false} navigator.mediaDevices.getUserMedia(constraints).then(function (stream) { wpaicgaudioContext = new wpaicgChatAudioContext(); wpaicgChatStream = stream; wpaicgInput = wpaicgaudioContext.createMediaStreamSource(stream); wpaicgChatRec = new Recorder(wpaicgInput, {numChannels: 1}); wpaicgChatRec.record(); }) } function wpaicgstopChatRecording(mic) { wpaicgChatRec.stop(); wpaicgChatStream.getAudioTracks()[0].stop(); wpaicgChatRec.exportWAV(function (blob) { let type = mic.getAttribute('data-type'); let parentChat; let chatContent; let chatTyping; if (type === 'widget') { parentChat = mic.closest('.wpaicg-chatbox'); chatContent = parentChat.querySelectorAll('.wpaicg-chatbox-content')[0]; chatTyping = parentChat.querySelectorAll('.wpaicg-chatbox-typing')[0]; } else { parentChat = mic.closest('.wpaicg-chat-shortcode'); chatContent = parentChat.querySelectorAll('.wpaicg-chat-shortcode-content')[0]; chatTyping = parentChat.querySelectorAll('.wpaicg-chat-shortcode-typing')[0]; } wpaicgSendChatMessage(parentChat, chatTyping, type, blob); }); } function wpaicgSendChatMessage(chat, typing, type, blob) { let wpaicg_box_typing = typing; let wpaicg_ai_thinking, wpaicg_messages_box, class_user_item, class_ai_item; let wpaicgMessage = ''; let wpaicgData = new FormData(); let wpaicg_you = chat.getAttribute('data-you') + ':'; let wpaicg_ai_name = chat.getAttribute('data-ai-name') + ':'; let wpaicg_nonce = chat.getAttribute('data-nonce'); let wpaicg_use_avatar = parseInt(chat.getAttribute('data-use-avatar')); let wpaicg_bot_id = parseInt(chat.getAttribute('data-bot-id')); let wpaicg_user_avatar = chat.getAttribute('data-user-avatar'); let wpaicg_ai_avatar = chat.getAttribute('data-ai-avatar'); let wpaicg_user_bg = chat.getAttribute('data-user-bg-color'); let wpaicg_font_size = chat.getAttribute('data-fontsize'); let url = chat.getAttribute('data-url'); let post_id = chat.getAttribute('data-post-id'); let wpaicg_ai_bg = chat.getAttribute('data-ai-bg-color'); let wpaicg_font_color = chat.getAttribute('data-color'); if (type === 'widget') { wpaicg_ai_thinking = chat.getElementsByClassName('wpaicg-bot-thinking')[0]; wpaicg_messages_box = chat.getElementsByClassName('wpaicg-chatbox-messages')[0]; class_user_item = 'wpaicg-chat-user-message'; class_ai_item = 'wpaicg-chat-ai-message'; } else { wpaicg_ai_thinking = chat.getElementsByClassName('wpaicg-bot-thinking')[0]; wpaicg_messages_box = chat.getElementsByClassName('wpaicg-chat-shortcode-messages')[0]; class_user_item = 'wpaicg-user-message'; class_ai_item = 'wpaicg-ai-message'; } if (wpaicg_use_avatar) { wpaicg_you = ''; wpaicg_ai_name = ''; } wpaicg_ai_thinking.style.display = 'block'; let wpaicg_question = wpaicgescapeHtml(wpaicg_box_typing.value); wpaicgMessage += '
  • '; wpaicgMessage += '' + wpaicg_you + ''; wpaicgData.append('_wpnonce', wpaicg_nonce); wpaicgData.append('post_id', post_id); wpaicgData.append('url', url); if (type === 'widget') { wpaicgData.append('action', 'wpaicg_chatbox_message'); } else { wpaicgData.append('action', 'wpaicg_chat_shortcode_message'); } if (blob !== undefined) { let url = URL.createObjectURL(blob); wpaicgMessage += ''; wpaicgData.append('audio', blob, 'wpaicg-chat-recording.wav'); } else if (wpaicg_question !== '') { wpaicgData.append('message', wpaicg_question); wpaicgMessage += wpaicg_question; } wpaicgData.append('bot_id',wpaicg_bot_id); wpaicgMessage += '
  • '; wpaicg_messages_box.innerHTML += wpaicgMessage; wpaicg_messages_box.scrollTop = wpaicg_messages_box.scrollHeight; const xhttp = new XMLHttpRequest(); wpaicg_box_typing.value = ''; xhttp.open('POST', wpaicg_ajax_url, true); xhttp.send(wpaicgData); xhttp.onreadystatechange = function (oEvent) { if (xhttp.readyState === 4) { var wpaicg_message = ''; var wpaicg_response_text = ''; var wpaicg_randomnum = Math.floor((Math.random() * 100000) + 1); if (xhttp.status === 200) { var wpaicg_response = this.responseText; if (wpaicg_response !== '') { wpaicg_response = JSON.parse(wpaicg_response); wpaicg_ai_thinking.style.display = 'none' if (wpaicg_response.status === 'success') { wpaicg_response_text = wpaicg_response.data; wpaicg_message = '
  • ' + wpaicg_ai_name + '

  • '; } else { wpaicg_response_text = wpaicg_response.msg; wpaicg_message = '
  • ' + wpaicg_ai_name + '

  • '; } } } else { wpaicg_message = '
  • ' + wpaicg_ai_name + '

  • '; wpaicg_response_text = 'Something went wrong'; } if (wpaicg_response_text === 'null' || wpaicg_response_text === null) { wpaicg_response_text = 'The model predicted a completion that begins with a stop sequence, resulting in no output. Consider adjusting your prompt or stop sequences.'; } if (wpaicg_response_text !== '' && wpaicg_message !== '') { wpaicg_messages_box.innerHTML += wpaicg_message; var wpaicg_current_message = document.getElementById('wpaicg-chat-message-' + wpaicg_randomnum); var i = 0; var wpaicg_speed = 20; function wpaicgLinkify(inputText) { var replacedText, replacePattern1, replacePattern2, replacePattern3; //URLs starting with http://, https://, or ftp:// replacePattern1 = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim; replacedText = inputText.replace(replacePattern1, '$1'); //URLs starting with "www." (without // before it, or it'd re-link the ones done above). replacePattern2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim; replacedText = replacedText.replace(replacePattern2, '$1$2'); //Change email addresses to mailto:: links. replacePattern3 = /(([a-zA-Z0-9\-\_\.])+@[a-zA-Z\_]+?(\.[a-zA-Z]{2,6})+)/gim; replacedText = replacedText.replace(replacePattern3, '$1'); return replacedText; } if(wpaicg_response_text !== ''){ wpaicg_response_text = wpaicg_response_text.trim(); } wpaicg_response_text = wpaicg_response_text.replace(/\n/g, '≈'); function wpaicg_typeWriter() { if (i < wpaicg_response_text.length) { if (wpaicg_response_text.charAt(i) === '≈') { wpaicg_current_message.innerHTML += '
    '; } else { wpaicg_current_message.innerHTML += wpaicg_response_text.charAt(i); } i++; setTimeout(wpaicg_typeWriter, wpaicg_speed); wpaicg_messages_box.scrollTop = wpaicg_messages_box.scrollHeight; } else { wpaicg_current_message.innerHTML = wpaicgLinkify(wpaicg_current_message.innerHTML); wpaicg_current_message.innerHTML = wpaicg_current_message.innerHTML.replace(/```([\s\S]*?)```/g,'$1'); } } wpaicg_typeWriter(); } } } } function wpaicgMicEvent(mic) { if (mic.classList.contains('wpaicg-recording')) { mic.innerHTML = ''; mic.innerHTML = wpaicgMicIcon; mic.classList.remove('wpaicg-recording'); wpaicgstopChatRecording(mic) } else { let checkRecording = document.querySelectorAll('.wpaicg-recording'); if (checkRecording && checkRecording.length) { alert('Please finish previous recording'); } else { mic.innerHTML = ''; mic.innerHTML = wpaicgStopIcon; mic.classList.add('wpaicg-recording'); wpaicgstartChatRecording(); } } } if (wpaicgChatTyping && wpaicgChatTyping.length) { for (let i = 0; i < wpaicgChatTyping.length; i++) { wpaicgChatTyping[i].addEventListener('keyup', function (event) { if (event.which === 13 || event.keyCode === 13) { let parentChat = wpaicgChatTyping[i].closest('.wpaicg-chatbox'); let chatTyping = parentChat.querySelectorAll('.wpaicg-chatbox-typing')[0]; wpaicgSendChatMessage(parentChat, chatTyping, 'widget'); } }) } } if (wpaicgShortcodeTyping && wpaicgShortcodeTyping.length) { for (let i = 0; i < wpaicgShortcodeTyping.length; i++) { wpaicgShortcodeTyping[i].addEventListener('keyup', function (event) { if (event.which === 13 || event.keyCode === 13) { let parentChat = wpaicgShortcodeTyping[i].closest('.wpaicg-chat-shortcode'); let chatTyping = parentChat.querySelectorAll('.wpaicg-chat-shortcode-typing')[0]; wpaicgSendChatMessage(parentChat, chatTyping, 'shortcode'); } }) } } if (wpaicgChatSend && wpaicgChatSend.length) { for (let i = 0; i < wpaicgChatSend.length; i++) { wpaicgChatSend[i].addEventListener('click', function (event) { let parentChat = wpaicgChatSend[i].closest('.wpaicg-chatbox'); let chatTyping = parentChat.querySelectorAll('.wpaicg-chatbox-typing')[0]; wpaicgSendChatMessage(parentChat, chatTyping, 'widget'); }) } } if (wpaicgShortcodeSend && wpaicgShortcodeSend.length) { for (let i = 0; i < wpaicgShortcodeSend.length; i++) { wpaicgShortcodeSend[i].addEventListener('click', function (event) { let parentChat = wpaicgShortcodeSend[i].closest('.wpaicg-chat-shortcode'); let chatTyping = parentChat.querySelectorAll('.wpaicg-chat-shortcode-typing')[0]; wpaicgSendChatMessage(parentChat, chatTyping, 'shortcode'); }) } } if (wpaicgMicBtns && wpaicgMicBtns.length) { for (let i = 0; i < wpaicgMicBtns.length; i++) { wpaicgMicBtns[i].addEventListener('click', function () { wpaicgMicEvent(wpaicgMicBtns[i]); }); } } } wpaicgChatInit(); (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Recorder = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o