admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('ai-assistant-nonce'), 'images' => plugin_dir_url(__FILE__) . 'public/images/' ]); } add_action('wp_enqueue_scripts', 'ai_assistant_enqueue_assets'); // Chat markup function ai_assistant_markup() { // Include chat.php include_once plugin_dir_path(__FILE__) . 'public/chat.php'; } add_action('wp_footer', 'ai_assistant_markup'); // Handle AJAX request function ai_assistant_handle_request() { // Retrieve API Key $yourApiKey = get_option('ai_assistant_api_key'); // Retrieve model $model = get_option('ai_assistant_model'); // Check if the API key or model is set if (empty($yourApiKey) || empty($model)) { wp_send_json_error('API Key or model is not set.'); return; } // Init API client $client = OpenAI::client($yourApiKey); // Check nonce for security check_ajax_referer('ai-assistant-nonce', 'nonce'); // Sanitize user message $user_message = sanitize_text_field($_POST['user_message']); // Max user message length $max_message_length = 10000; // Check user message length if (isset($user_message) && !empty($user_message) && strlen($user_message) < $max_message_length) { try { // Create chat $result = $client->chat()->create([ 'model' => $model, 'messages' => [ ['role' => 'user', 'content' => $user_message], ], ]); // Send response back $message = $result->choices[0]->message->content; wp_send_json_success($message); } catch (Exception $e) { // Handle Exception wp_send_json_error('Failed to connect to OpenAI API.'); } } else { wp_send_json_error('Please enter a valid message.'); return; } } add_action('wp_ajax_ai_assistant_chat', 'ai_assistant_handle_request'); add_action('wp_ajax_nopriv_ai_assistant_chat', 'ai_assistant_handle_request');