var eventGenerator = false; let wpaicg_limited_token = false; function wpaicgBasicEditor(){ var basicEditor = true; if(wpaicg_prompt_logged){ var editor = tinyMCE.get('wpaicg-prompt-result'); if ( document.getElementById('wp-wpaicg-prompt-result-wrap').classList.contains('tmce-active') && editor ) { basicEditor = false; } } return basicEditor; } function wpaicgSetContent(value){ if(wpaicgResponseType === 'textarea') { if (wpaicgBasicEditor()) { document.getElementById('wpaicg-prompt-result').value = value; } else { var editor = tinyMCE.get('wpaicg-prompt-result'); editor.setContent(value); } } else{ document.getElementById('wpaicg-prompt-result').innerHTML = value; } } function wpaicgGetContent(){ if(wpaicgResponseType === 'textarea') { if (wpaicgBasicEditor()) { return document.getElementById('wpaicg-prompt-result').value } else { var editor = tinyMCE.get('wpaicg-prompt-result'); var content = editor.getContent(); content = content.replace(/<\/?p(>|$)/g, ""); return content; } } else return document.getElementById('wpaicg-prompt-result').innerHTML; } function wpaicgLoadingBtn(btn){ btn.setAttribute('disabled','disabled'); btn.innerHTML += ''; } function wpaicgRmLoading(btn){ btn.removeAttribute('disabled'); btn.removeChild(btn.getElementsByTagName('span')[0]); } function wpaicgEventClose(){ wpaicgStop.style.display = 'none'; if(!wpaicg_limited_token) { wpaicgSaveResult.style.display = 'block'; } wpaicgRmLoading(wpaicgGenerateBtn); eventGenerator.close(); } function wpaicgValidEmail(email){ return String(email) .toLowerCase() .match( /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ ); } function wpaicgValidUrl(string) { try { new URL(string); return true; } catch (err) { return false; } } var wpaicg_break_newline = wpaicgUserLoggedIn ? '

': '\n\n'; if(typeof wpaicgForm !== "undefined" && wpaicgForm != undefined && wpaicgForm.length) { wpaicgForm.addEventListener('submit', function (e) { e.preventDefault(); var max_tokens = wpaicgMaxToken.value; var temperature = wpaicgTemperature.value; var top_p = wpaicgTopP.value; var best_of = wpaicgBestOf.value; var frequency_penalty = wpaicgFP.value; var presence_penalty = wpaicgPP.value; var error_message = false; var title = wpaicgPromptTitle.value; if (title === '') { error_message = 'Please insert prompt'; } else if (max_tokens === '') { error_message = 'Please enter max tokens'; } else if (parseFloat(max_tokens) < 1 || parseFloat(max_tokens) > 8000) { error_message = 'Please enter a valid max tokens value between 1 and 8000'; } else if (temperature === '') { error_message = 'Please enter temperature'; } else if (parseFloat(temperature) < 0 || parseFloat(temperature) > 1) { error_message = 'Please enter a valid temperature value between 0 and 1'; } else if (top_p === '') { error_message = 'Please enter Top P'; } else if (parseFloat(top_p) < 0 || parseFloat(top_p) > 1) { error_message = 'Please enter a valid Top P value between 0 and 1'; } else if (best_of === '') { error_message = 'Please enter best of'; } else if (parseFloat(best_of) < 1 || parseFloat(best_of) > 20) { error_message = 'Please enter a valid best of value between 0 and 1'; } else if (frequency_penalty === '') { error_message = 'Please enter frequency penalty'; } else if (parseFloat(frequency_penalty) < 0 || parseFloat(frequency_penalty) > 2) { error_message = 'Please enter a valid frequency penalty value between 0 and 2'; } else if (presence_penalty === '') { error_message = 'Please enter presence penalty'; } else if (parseFloat(presence_penalty) < 0 || parseFloat(presence_penalty) > 2) { error_message = 'Please enter a valid presence penalty value between 0 and 2'; } if (error_message) { alert(error_message); } else { if (typeof wpaicgFormFields === 'object') { for (var i = 0; i < wpaicgFormFields.length; i++) { var form_field = wpaicgFormFields[i]; var field = document.getElementById('wpaicg-form-field-' + i); var field_type = form_field['type'] !== undefined ? form_field['type'] : 'text'; var field_label = form_field['label'] !== undefined ? form_field['label'] : ''; var field_min = form_field['min'] !== undefined ? form_field['min'] : ''; var field_max = form_field['max'] !== undefined ? form_field['max'] : ''; if (field_type !== 'radio' && field_type !== 'checkbox') { var field_value = field.value; if (field_type === 'text' || field_type === 'textarea' || field_type === 'email' || field_type === 'url') { if (field_min !== '' && field_value.length < parseInt(field_min)) { error_message = field_label + ' minimum ' + field_min + ' characters'; } else if (field_max !== '' && field_value.length > parseInt(field_max)) { error_message = field_label + ' maximum ' + field_max + ' characters'; } else if (field_type === 'email' && !wpaicgValidEmail(field_value)) { error_message = field_label + ' must be email address'; } else if (field_type === 'url' && !wpaicgValidUrl(field_value)) { error_message = field_label + ' must be url'; } } else if (field_type === 'number') { if (field_min !== '' && parseFloat(field_value) < parseInt(field_min)) { error_message = field_label + ' minimum ' + field_min; } else if (field_max !== '' && parseFloat(field_value) > parseInt(field_max)) { error_message = field_label + ' maximum ' + field_max; } } } else if (field_type === 'checkbox' || field_type === 'radio') { var field_inputs = field.getElementsByTagName('input'); var field_checked = false; if (field_inputs && field_inputs.length) { for (var y = 0; y < field_inputs.length; y++) { var field_input = field_inputs[y]; if (field_input.checked) { field_checked = true; } } } if (!field_checked) { error_message = field_label + ' is required'; } } } } if (error_message) { alert(error_message); } else { let startTime = new Date(); if (typeof wpaicgFormFields === 'object') { for (var i = 0; i < wpaicgFormFields.length; i++) { var form_field = wpaicgFormFields[i]; var field_type = form_field.type; var field = document.getElementById('wpaicg-form-field-' + i); var field_name = form_field['id'] !== undefined ? form_field['id'] : ''; var field_value; if (field_type === 'checkbox' || field_type === 'radio') { field_value = ''; var field_inputs = field.getElementsByTagName('input'); if (field_inputs && field_inputs.length) { for (var y = 0; y < field_inputs.length; y++) { var field_input = field_inputs[y]; if (field_input.checked) { var current_field_value = field_input.value; if (current_field_value !== undefined && current_field_value !== '') { field_value += (field_value === '' ? '' : ', ') + current_field_value; } } } } } else { field_value = field.value; } var sRegExInput = new RegExp('{' + field_name + '}', 'g'); title = title.replace(sRegExInput, field_value); } } wpaicgPromptTitleFilled.value = title + ".\n\n"; let queryString = new URLSearchParams(new FormData(wpaicgForm)).toString(); wpaicgLoadingBtn(wpaicgGenerateBtn); wpaicgSaveResult.style.display = 'none'; wpaicgStop.style.display = 'inline'; wpaicgSetContent(''); var wpaicg_limitLines = parseFloat(wpaicgMaxLines.value); var count_line = 0; var currentContent = ''; queryString += '&source_stream=form&nonce='+wpaicgAjaxNonce; eventGenerator = new EventSource(wpaicgEventURL + '&' + queryString); var wpaicg_response_events = 0; var wpaicg_newline_before = false; let prompt_response = ''; wpaicg_limited_token = false; eventGenerator.onmessage = function (e) { currentContent = wpaicgGetContent(); if (e.data === "[DONE]") { count_line += 1; wpaicgSetContent(currentContent + wpaicg_break_newline); wpaicg_response_events = 0; } else if (e.data === "[LIMITED]") { wpaicg_limited_token = true; count_line += 1; wpaicgSetContent(currentContent + wpaicg_break_newline); wpaicg_response_events = 0; } else { var result = JSON.parse(e.data); var content_generated = ''; if (result.error !== undefined) { content_generated = result.error.message; } else { content_generated = result.choices[0].delta !== undefined ? (result.choices[0].delta.content !== undefined ? result.choices[0].delta.content : '') : result.choices[0].text; } prompt_response += content_generated; if ((content_generated === '\n' || content_generated === ' \n' || content_generated === '.\n' || content_generated === '\n\n' || content_generated === '.\n\n') && wpaicg_response_events > 0 && currentContent !== '') { console.log(currentContent); if (!wpaicg_newline_before) { wpaicg_newline_before = true; wpaicgSetContent(currentContent + wpaicg_break_newline); } } else if (content_generated === '\n' && wpaicg_response_events === 0 && currentContent === '') { } else { wpaicg_newline_before = false; wpaicg_response_events += 1; wpaicgSetContent(currentContent + content_generated); } } if (count_line === wpaicg_limitLines) { if(!wpaicg_limited_token) { let endTime = new Date(); let timeDiff = endTime - startTime; timeDiff = timeDiff / 1000; queryString += '&action=wpaicg_form_log&prompt_id=' + wpaicgFormId + '&prompt_name=' + wpaicgFormName + '&prompt_response=' + prompt_response + '&duration=' + timeDiff + '&_wpnonce=' + wpaicgFormNonce + '&source_id=' + wpaicgFormSourceID; const xhttp = new XMLHttpRequest(); xhttp.open('POST', wpaicgAjaxUrl); xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhttp.send(queryString); xhttp.onreadystatechange = function (oEvent) { if (xhttp.readyState === 4) { } } } wpaicgEventClose(); } } } } return false; }); } if(typeof wpaicgStop !== 'undefined') { wpaicgStop.addEventListener('click', function (e) { e.preventDefault(); wpaicgEventClose(); }); } if(typeof wpaicgClearBtn !== 'undefined') { wpaicgClearBtn.addEventListener('click', function (e) { e.preventDefault(); wpaicgSetContent(''); wpaicgSaveResult.style.display = 'none'; }); } if(wpaicgUserLoggedIn && typeof wpaicgSaveDraftBtn != 'undefined'){ wpaicgSaveDraftBtn.addEventListener('click', function (e) { e.preventDefault(); var title = document.getElementById('wpaicg-prompt-post_title').value; var content = wpaicgGetContent(); if (title === '') { alert('Please insert title'); } else if (content === '') { alert('Please wait generate content') } else { const xhttp = new XMLHttpRequest(); xhttp.open('POST', wpaicgAjaxUrl); xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhttp.send('action=wpaicg_save_draft_post_extra&title=' + title + '&content=' + content+'&save_source=promptbase&nonce='+wpaicgAjaxNonce); wpaicgLoadingBtn(wpaicgSaveDraftBtn); xhttp.onreadystatechange = function (oEvent) { if (xhttp.readyState === 4) { wpaicgRmLoading(wpaicgSaveDraftBtn); if (xhttp.status === 200) { var wpaicg_response = this.responseText; wpaicg_response = JSON.parse(wpaicg_response); if (wpaicg_response.status === 'success') { window.location.href = wpaicgAdminPost+'?post=' + wpaicg_response.id + '&action=edit'; } else { alert(wpaicg_response.msg); } } else { alert('Something went wrong'); } } } } }) }