define_constants(); $this->includes(); add_action('wp_ajax_openai_settings_option', [$this, 'openai_settings_option_callback']); add_action('wp_ajax_update_settings_option', [$this, 'qcld_update_settings_option_callback']); add_action('wp_ajax_qcld_rag_settings_option', array($this, 'rag_settings_option_callback')); add_action('wp_ajax_qcld_openai_response',[$this,'qcld_openai_response_callback']); add_action('wp_ajax_nopriv_qcld_openai_response', [$this, 'qcld_openai_response_callback']); add_action('wp_ajax_qcld_stream_openai', [$this, 'qcld_stream_openai_callback']); add_action('wp_ajax_nopriv_qcld_stream_openai', [$this, 'qcld_stream_openai_callback']); add_action('wp_ajax_openai_troubleshooting',[$this,'openai_troubleshooting']); add_action('wp_ajax_wpbot_wizard_save', array($this, 'wpbot_wizard_save_callback')); add_action('wp_ajax_wpbot_wizard_verify_key', array($this, 'wpbot_wizard_verify_key_callback')); if (is_admin() && !empty($_GET["page"]) && (($_GET["page"] == "openai-panel_dashboard") || ($_GET["page"] == "openai-panel_file") || ($_GET["page"] == "openai-panel_help"))) { add_action('admin_enqueue_scripts', array($this, 'qcld_wb_chatbot_admin_scripts')); } } /** * Define wpbot Constants. * * @return void * @since 1.0.0 */ public function define_constants() { if( ! defined( 'QCLD_openai_addon_VERSION' ) ){ define('QCLD_openai_addon_VERSION', $this->version); } //define('QCLD_openai_addon_REQUIRED_wpCOMMERCE_VERSION', 2.2); if( ! defined( 'QCLD_openai_addon_PLUGIN_DIR_PATH' ) ){ define('QCLD_openai_addon_PLUGIN_DIR_PATH', plugin_dir_path(__FILE__)); } if( ! defined( 'QCLD_openai_addon_PLUGIN_URL' ) ){ define('QCLD_openai_addon_PLUGIN_URL', plugin_dir_url(__FILE__)); } if( ! defined( 'QCLD_openai_addon_IMG_URL' ) ){ define('QCLD_openai_addon_IMG_URL', QCLD_openai_addon_PLUGIN_URL . "images/"); } if( ! defined( 'QCLD_openai_addon_IMG_ABSOLUTE_PATH' ) ){ define('QCLD_openai_addon_IMG_ABSOLUTE_PATH', plugin_dir_path(__FILE__) . "images"); } } public function qcld_wb_chatbot_admin_scripts(){ // wp_register_style('qlcd-open-ai-bootstap', QCLD_openai_addon_PLUGIN_URL . 'css/openai-bootstrap.css', '', QCLD_openai_addon_VERSION, 'screen'); // wp_enqueue_style('qlcd-open-ai-bootstap'); // wp_register_style('qlcd-open-ai-admin-style', QCLD_openai_addon_PLUGIN_URL . 'css/openai-admin-style.css', '', QCLD_openai_addon_VERSION, 'screen'); // wp_enqueue_style('qlcd-open-ai-admin-style'); // wp_register_script('qlcd-openai_collapse', QCLD_openai_addon_PLUGIN_URL . 'js/collapse.js', array('jquery'),'',QCLD_openai_addon_VERSION,true); // wp_enqueue_script('qlcd-openai_collapse'); // wp_register_script('qlcd-openai_settings', QCLD_openai_addon_PLUGIN_URL . 'js/openai_settings.js', array('jquery'),'',QCLD_openai_addon_VERSION,true); // wp_enqueue_script('qlcd-openai_settings'); // wp_localize_script( 'qlcd-openai_settings', 'openai_ajax', array( // 'url' => admin_url( 'admin-ajax.php' ), // ) ); } /** * Include all required files * * since 1.0.0 * * @return void */ public function includes() { require_once( QCLD_wpCHATBOT_PLUGIN_DIR_PATH . "includes/integration/openai/qcld_wp_OpenAI.php" ); require_once( QCLD_wpCHATBOT_PLUGIN_DIR_PATH . "includes/integration/openai/OpenAi_WPBot_Menu.php" ); require_once( QCLD_wpCHATBOT_PLUGIN_DIR_PATH . "includes/Parsedown.php" ); } public function buildFormBody( $fields, $boundary ) { $body = ''; foreach ( $fields as $name => $value ) { if ( $name == 'data' ) { continue; } $body .= "--$boundary\r\n"; $body .= "Content-Disposition: form-data; name=\"$name\""; if ( $name == 'file' ) { $body .= "; filename=\"{$value}\"\r\n"; $body .= "Content-Type: application/json\r\n\r\n"; $body .= $fields['data'] . "\r\n"; }else { $body .= "\r\n\r\n$value\r\n"; } } $body .= "--$boundary--\r\n"; return $body; } // public function openai_file_list_callback(){ // $url = 'https://api.openai.com/v1/files'; // $apt_key = "Authorization: Bearer ". get_option('open_ai_api_key'); // $curl = curl_init(); // curl_setopt($curl, CURLOPT_URL, $url); // $headers = array( // "Content-Type: application/json", // $apt_key, // ); // curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); // curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // $response = curl_exec($curl); // curl_close($curl); // wp_send_json( json_decode($response)); // wp_die(); // } public function qcld_sanitize_text_or_array_field($array_or_string) { if( is_string($array_or_string) ){ $array_or_string = sanitize_text_field($array_or_string); }elseif( is_array($array_or_string) ){ foreach ( $array_or_string as $key => &$value ) { if ( is_array( $value ) ) { $value = $this->qcld_sanitize_text_or_array_field($value); } else { $value = sanitize_text_field( $value ); } } } return $array_or_string; } // public function openai_file_upload_callback(){ // $uploadedfile = $_FILES['file']; // $url = 'https://api.openai.com/v1/files'; // $apt_key = "Authorization: Bearer ". get_option('open_ai_api_key'); // $curl = curl_init($url); // curl_setopt($curl, CURLOPT_URL, $url); // curl_setopt($curl, CURLOPT_POST, true); // $headers = array( // "Content-Type: multipart/form-data", // $apt_key, // ); // if (function_exists('curl_file_create')) { // $tmp_file = curl_file_create($uploadedfile['tmp_name'], 'jsonl', $uploadedfile['name']); // } else { // $tmp_file = open($uploadedfile['tmp_name']); // } // $data = array('file'=> $tmp_file,'purpose'=> 'fine-tune'); // $init = curl_init(); // //function parameteres // curl_setopt($init, CURLOPT_URL,$url); // curl_setopt($init, CURLOPT_HTTPHEADER, $headers); // curl_setopt($init, CURLOPT_POSTFIELDS, $data); // curl_setopt($init, CURLOPT_RETURNTRANSFER, true); // $res = json_decode(curl_exec ($init)); // curl_close ($init); // if(!empty($res->error)){ // $response['status'] = 'error'; // $response['message'] = $res->error->message; // } // if(!empty($res->status)){ // $response['status'] = 'success'; // $response['message'] = 'Successfully Created file' . $res->id ; // } // echo wp_send_json([$response]); // wp_die(); // } public function openai_finetune_create($file_id,$ft_suffix,$ft_engines){ $api_key = get_option('open_ai_api_key'); $request_headers = array( 'Content-Type' => 'application/json', 'Authorization' => 'Bearer ' . $api_key, ); $qcld_openai_suffix = isset($ft_suffix) ? $ft_suffix : get_option('qcld_openai_suffix'); $openai_engines = isset($ft_engines) ? $ft_engines : get_option('openai_engines'); $base_engine = explode('-',$openai_engines); if( $base_engine[0] == 'gpt'){ $url = "https://api.openai.com/v1/fine_tuning/jobs"; $response = wp_remote_post( $url, array( 'headers' => $request_headers, 'body' => wp_json_encode( array('training_file'=>$file_id,'model' => $openai_engines, 'suffix' => $qcld_openai_suffix ) ), 'timeout' => 60, ) ); $result = ! is_wp_error( $response ) ? json_decode( wp_remote_retrieve_body( $response ) ) : null; }else{ $url = "https://api.openai.com/v1/fine-tunes"; $response = wp_remote_post( $url, array( 'headers' => $request_headers, 'body' => wp_json_encode( array('training_file'=>$file_id,'model' => $base_engine[1], 'suffix' => $qcld_openai_suffix ) ), 'timeout' => 60, ) ); $result = ! is_wp_error( $response ) ? json_decode( wp_remote_retrieve_body( $response ) ) : null; } return $result; } public function relevant_pagelink($search_query){ $stopwords = explode( ',', get_option('qlcd_wp_chatbot_stop_words') ); $finalQueryWordsWithoutStopWords = $this->qcpd_remove_wa_stopwords( strtolower($search_query), $stopwords ); $cleanWordsWithoutPunctuationMarks = preg_replace('/[\p{P}]/u', '', $finalQueryWordsWithoutStopWords); $q = trim($cleanWordsWithoutPunctuationMarks); $links = []; $post_type_array = get_option('qcld_openai_relevant_post'); //Proceeding with traditional search $the_query = new WP_Query( array( 'post_status' => 'publish', 'posts_per_page' => 5, 's' => esc_attr( $q ), 'post_type' => $post_type_array ) ); if( $the_query->have_posts() ){ while( $the_query->have_posts() ){ $the_query->the_post(); $url = esc_url( get_permalink() ); $link = '