PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 1.4.3
AI Engine – The Chatbot, AI Framework & MCP for WordPress v1.4.3
3.5.7 3.5.6 3.5.5 3.5.4 3.5.3 3.5.2 3.5.1 3.5.0 3.4.9 3.4.8 3.4.7 0.2.1 1.6.91 0.2.2 1.6.92 0.2.3 1.6.93 0.2.4 1.6.94 0.2.5 1.6.95 0.2.6 1.6.96 0.2.7 1.6.97 0.2.8 1.6.98 0.2.9 1.6.99 0.3.0 1.7.0 0.3.1 1.7.1 0.3.2 1.7.2 0.3.3 1.7.3 0.3.4 1.7.4 0.3.5 1.7.5 0.3.6 1.7.6 0.4.0 1.7.7 0.4.1 1.7.8 0.4.2 1.7.9 0.4.3 1.8.0 0.4.4 1.8.1 0.4.5 1.8.2 0.4.6 1.8.3 0.4.7 1.8.4 0.4.8 1.8.5 0.4.9 1.8.6 0.5.0 1.8.7 0.5.1 1.8.8 0.5.2 1.8.9 0.5.3 1.9.0 0.5.4 1.9.1 0.5.5 1.9.2 0.5.6 1.9.3 0.5.7 1.9.4 0.5.8 1.9.5 0.5.9 1.9.6 0.6.0 1.9.7 0.6.1 1.9.8 0.6.2 1.9.81 0.6.3 1.9.82 0.6.4 1.9.83 0.6.5 1.9.84 0.6.6 1.9.85 0.6.7 1.9.86 0.6.8 1.9.87 0.6.9 1.9.88 0.7.0 1.9.89 0.7.1 1.9.90 0.7.2 1.9.91 0.7.3 1.9.92 0.7.4 1.9.93 0.7.5 1.9.94 0.7.6 1.9.95 0.7.7 1.9.96 0.7.8 1.9.97 0.7.9 1.9.98 0.8.0 1.9.99 0.8.1 2.0.0 0.8.2 2.0.1 0.8.3 2.0.2 0.8.4 2.0.3 0.8.5 2.0.4 0.8.6 2.0.5 0.8.7 2.0.6 0.8.8 2.0.7 0.8.9 2.0.8 0.9.0 2.0.9 0.9.2 2.1.0 0.9.3 2.1.1 0.9.4 2.1.2 0.9.5 2.1.3 0.9.6 2.1.4 0.9.7 2.1.5 0.9.8 2.1.6 0.9.81 2.1.7 0.9.82 2.1.8 0.9.83 2.1.9 0.9.84 2.2.0 0.9.85 2.2.1 0.9.86 2.2.2 0.9.87 2.2.3 0.9.88 2.2.4 0.9.89 2.2.5 0.9.9 2.2.51 0.9.91 2.2.52 0.9.92 2.2.53 0.9.93 2.2.54 0.9.94 2.2.56 0.9.95 2.2.57 0.9.96 2.2.6 0.9.97 2.2.60 0.9.98 2.2.61 0.9.99 2.2.62 1.0.0 2.2.63 1.0.01 2.2.70 1.0.1 2.2.80 1.0.2 2.2.81 1.0.3 2.2.90 1.0.4 2.2.91 1.0.5 2.2.92 1.0.6 2.2.93 1.0.7 2.2.94 1.0.8 2.2.95 1.0.9 2.3.0 1.1.0 2.3.1 1.1.1 2.3.2 1.1.2 2.3.3 1.1.3 2.3.4 1.1.4 2.3.5 1.1.5 2.3.6 1.1.6 2.3.7 1.1.7 2.3.8 1.1.8 2.3.9 1.1.9 2.4.0 1.2.0 2.4.1 1.2.1 2.4.2 1.2.2 2.4.3 1.2.21 2.4.4 1.2.3 2.4.5 1.2.30 2.4.6 1.3.0 2.4.7 1.3.1 2.4.8 1.3.2 2.4.9 1.3.3 2.5.0 1.3.31 2.5.1 1.3.32 2.5.2 1.3.33 2.5.3 1.3.34 2.5.4 1.3.35 2.5.5 1.3.36 2.5.6 1.3.37 2.5.7 1.3.38 2.5.8 1.3.39 2.5.9 1.3.40 2.6.0 1.3.41 2.6.1 1.3.42 2.6.2 1.3.43 2.6.3 1.3.44 2.6.5 1.3.45 2.6.6 1.3.46 2.6.7 1.3.47 2.6.8 1.3.48 2.6.9 1.3.49 2.7.0 1.3.50 2.7.1 1.3.51 2.7.2 1.3.52 2.7.3 1.3.53 2.7.4 1.3.54 2.7.5 1.3.56 2.7.6 1.3.57 2.7.7 1.3.58 2.7.8 1.3.59 2.7.9 1.3.60 2.8.0 1.3.61 2.8.1 1.3.62 2.8.2 1.3.63 2.8.3 1.3.64 2.8.4 1.3.65 2.8.5 1.3.66 2.8.6 1.3.67 2.8.7 1.3.68 2.8.8 1.3.69 2.8.9 1.3.70 2.9.0 1.3.71 2.9.1 1.3.72 2.9.2 1.3.73 2.9.3 1.3.74 2.9.4 1.3.75 2.9.5 1.3.76 2.9.6 1.3.77 2.9.7 1.3.78 2.9.8 1.3.79 2.9.9 1.3.80 3.0.0 1.3.81 3.0.1 1.3.82 3.0.2 1.3.83 3.0.3 1.3.84 3.0.4 1.3.85 3.0.5 1.3.86 3.0.6 1.3.87 3.0.7 1.3.88 3.0.8 1.3.89 3.0.9 1.3.90 3.1.0 1.3.91 3.1.1 1.3.92 3.1.2 1.3.93 3.1.3 1.3.94 3.1.4 1.3.95 3.1.5 1.3.96 3.1.6 1.3.97 3.1.7 1.3.98 3.1.8 1.3.99 3.1.9 1.4.0 3.2.0 1.4.1 3.2.1 1.4.2 3.2.2 1.4.3 3.2.3 1.4.4 3.2.4 1.4.5 3.2.5 1.4.6 3.2.6 1.4.7 3.2.7 1.4.8 3.2.8 1.4.9 3.2.9 1.5.0 3.3.0 1.5.1 3.3.1 1.5.2 3.3.2 1.5.3 3.3.3 1.5.4 3.3.4 1.5.5 3.3.5 1.5.6 3.3.6 1.5.7 3.3.7 1.5.8 3.3.8 1.5.9 3.3.9 1.6.0 3.4.0 1.6.1 3.4.1 1.6.2 3.4.2 1.6.3 3.4.3 1.6.5 3.4.4 1.6.51 3.4.5 1.6.52 3.4.6 1.6.53 1.6.54 1.6.55 1.6.56 1.6.57 1.6.58 1.6.59 1.6.60 1.6.61 1.6.62 1.6.63 1.6.64 1.6.65 1.6.66 1.6.67 1.6.68 trunk 1.6.69 0.0.1 1.6.70 0.0.2 1.6.71 0.0.3 1.6.72 0.0.4 1.6.73 0.0.5 1.6.74 0.0.6 1.6.75 0.0.7 1.6.76 0.0.8 1.6.77 0.0.9 1.6.78 0.1.0 1.6.79 0.1.1 1.6.81 0.1.2 1.6.82 0.1.3 1.6.83 0.1.4 1.6.84 0.1.5 1.6.85 0.1.6 1.6.86 0.1.7 1.6.87 0.1.8 1.6.88 0.1.9 1.6.89 0.2.0 1.6.90
ai-engine / classes / modules / chatbot.php
ai-engine / classes / modules Last commit date
assistants.php 3 years ago chatbot.php 3 years ago chatbot_legacy.php 3 years ago chatbot_logs.php 3 years ago discussions.php 3 years ago
chatbot.php
217 lines
1 <?php
2
3 define( 'MWAI_CHATBOT_FRONT_PARAMS', [ 'aiName', 'userName', 'guestName', 'textSend', 'textClear',
4 'textInputPlaceholder', 'textInputMaxLength', 'textCompliance', 'startSentence',
5 'themeId', 'window', 'icon', 'iconText', 'iconAlt', 'iconPosition', 'fullscreen', 'copyButton'
6 ] );
7
8 class Meow_MWAI_Modules_Chatbot {
9 private $core = null;
10 private $namespace = 'mwai-bot/v1';
11 private $usingChat = false;
12
13 public function __construct() {
14 global $mwai_core;
15 $this->core = $mwai_core;
16 //if ( is_admin() ) { return; }
17 add_shortcode( 'mwai_chatbot_v2', array( $this, 'chat' ) );
18 add_action( 'rest_api_init', array( $this, 'rest_api_init' ) );
19 add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
20 // if ( $this->core->get_option( 'shortcode_chat_inject' ) ) {
21 // add_action( 'wp_footer', array( $this, 'inject_chat' ) );
22 // }
23 // if ( $this->core->get_option( 'shortcode_chat_styles' ) ) {
24 // add_filter( 'mwai_chatbot_style', [ $this, 'apply_chat_styles' ], 10, 2 );
25 // }
26 }
27
28 public function enqueue_scripts() {
29 // if ( $this->core->get_option( 'shortcode_chat_syntax_highlighting' ) ) {
30 // wp_enqueue_script( 'mwai_chatbot', MWAI_URL . 'vendor/highlightjs/highlight.min.js', [], '11.7', false );
31 // wp_enqueue_style( 'mwai_chatbot', MWAI_URL . '/vendor/highlightjs/stackoverflow-dark.min.css', [], '11.7' );
32 // }
33 // if ( $this->core->get_option( 'shortcode_chat_typewriter' ) ) {
34 // wp_enqueue_script( 'mwai_chatbot_typewriter', MWAI_URL . 'vendor/typewriterjs/typewriter.min.js', [], '2.0', true );
35 // }
36 if ( $this->usingChat ) {
37 // $physical_file = MWAI_PATH . '/app/chatbot-vendor.js';
38 // $cache_buster = file_exists( $physical_file ) ? filemtime( $physical_file ) : MWAI_VERSION;
39 // wp_register_script( 'mwai_chatbot_vendor', MWAI_URL . '/app/chatbot-vendor.js', [ 'wp-element' ], $cache_buster, false );
40
41 $physical_file = MWAI_PATH . '/app/chatbot.js';
42 $cache_buster = file_exists( $physical_file ) ? filemtime( $physical_file ) : MWAI_VERSION;
43 wp_enqueue_script( 'mwai_chatbot', MWAI_URL . '/app/chatbot.js', [ 'wp-element' ], $cache_buster, false );
44 }
45 }
46
47 public function rest_api_init() {
48 register_rest_route( $this->namespace, '/chat', array(
49 'methods' => 'POST',
50 'callback' => array( $this, 'rest_chat' ),
51 'permission_callback' => '__return_true'
52 ) );
53 register_rest_route( $this->namespace, '/images', array(
54 'methods' => 'POST',
55 'callback' => array( $this, 'rest_images' ),
56 'permission_callback' => '__return_true'
57 ) );
58 }
59
60 public function basics_security_check( $params ) {
61 if ( empty( $params['newMessage'] ) ) {
62 return false;
63 }
64 if ( empty( $params['chatId'] ) ) {
65 return false;
66 }
67 $length = strlen( trim( $params['newMessage'] ) );
68 if ( $length < 1 || $length > ( 4096 - 512 ) ) {
69 return false;
70 }
71 return true;
72 }
73
74 public function rest_chat( $request ) {
75 try {
76 $params = $request->get_json_params();
77 if ( !$this->basics_security_check( $params )) {
78 return new WP_REST_Response( [
79 'success' => false,
80 'message' => 'Sorry, your query has been rejected.' ], 403
81 );
82 }
83 $chatbot = $this->core->getChatbot( $params['chatId'] );
84 if ( !$chatbot ) {
85 return new WP_REST_Response( [
86 'success' => false,
87 'message' => 'Sorry, your query has been rejected.' ], 403
88 );
89 }
90
91 // Create the QueryText
92 $query = new Meow_MWAI_QueryText( $params['newMessage'], 1024 );
93 $query->setIsChat( true );
94
95 // Take care of the parameters
96 $newParams = [];
97 foreach ( $chatbot as $key => $value ) {
98 $newParams[$key] = $value;
99 }
100 foreach ( $params as $key => $value ) {
101 $newParams[$key] = $value;
102 }
103 $params = apply_filters( 'mwai_chatbot_params', $newParams );
104 $query->injectParams( $params );
105
106 $takeoverAnswer = apply_filters( 'mwai_chatbot_takeover', null, $query, $params );
107 if ( !empty( $takeoverAnswer ) ) {
108 return new WP_REST_Response( [ 'success' => true, 'answer' => $takeoverAnswer,
109 'html' => $takeoverAnswer, 'usage' => null ], 200 );
110 }
111
112 // Moderation
113 if ( $this->core->get_option( 'shortcode_chat_moderation' ) ) {
114 global $mwai;
115 $isFlagged = $mwai->moderationCheck( $query->prompt );
116 if ( $isFlagged ) {
117 return new WP_REST_Response( [
118 'success' => false,
119 'message' => 'Sorry, your message has been rejected by moderation.' ], 403
120 );
121 }
122 }
123
124 // Awareness & Embeddings
125 $context = null;
126 $embeddingsIndex = $params['embeddingsIndex'];
127 if ( $query->mode === 'chat' && !empty( $embeddingsIndex ) ) {
128 $context = apply_filters( 'mwai_context_search', $query, $embeddingsIndex );
129 if ( !empty( $context ) ) {
130 $query->injectContext( $context['content'] );
131 }
132 }
133
134 $answer = $this->core->ai->run( $query );
135 $rawText = $answer->result;
136 $extra = [];
137 if ( $context ) {
138 $extra = [ 'embeddings' => $context['embeddings'] ];
139 }
140 $html = apply_filters( 'mwai_chatbot_reply', $rawText, $query, $params, $extra );
141 if ( $this->core->get_option( 'shortcode_chat_formatting' ) ) {
142 $html = $this->core->markdown_to_html( $html );
143 }
144 return new WP_REST_Response( [ 'success' => true, 'answer' => $rawText,
145 'html' => $html, 'usage' => $answer->usage ], 200 );
146 }
147 catch ( Exception $e ) {
148 return new WP_REST_Response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
149 }
150 }
151
152 public function rest_images( $request ) {
153 try {
154 $params = $request->get_json_params();
155 $query = new Meow_MWAI_QueryImage( $params['prompt'] );
156 $query->injectParams( $params );
157 $answer = $this->core->ai->run( $query );
158 return new WP_REST_Response( [ 'success' => true, 'images' => $answer->results, 'usage' => $answer->usage ], 200 );
159 }
160 catch ( Exception $e ) {
161 return new WP_REST_Response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
162 }
163 }
164
165 public function inject_chat() {
166 $params = $this->core->get_option( 'shortcode_chat_params' );
167 echo $this->chat( $params );
168 }
169
170 public function imageschat( $atts ) {
171 $atts['mode'] = 'images';
172 return $this->chat( $atts );
173 }
174
175 public function getCurrentUser() {
176 if ( is_user_logged_in() ) {
177 return wp_get_current_user();
178 }
179 return null;
180 }
181
182 public function chat( $atts ) {
183 $chatId = isset( $atts['id'] ) ? $atts['id'] : 'default';
184 $chatbot = $this->core->getChatbot( $chatId );
185 if ( !$chatbot ) {
186 return "Chatbot not found.";
187 }
188
189 $frontParams = [];
190 foreach ( MWAI_CHATBOT_FRONT_PARAMS as $param ) {
191 if ( isset( $chatbot[$param] ) ) {
192 $frontParams[$param] = $chatbot[$param];
193 }
194 }
195
196 $frontSystem = [
197 'chatId' => $chatId,
198 'userData' => $this->core->getUserData(),
199 'sessionId' => $this->core->get_session_id(),
200 'restNonce' => wp_create_nonce( 'wp_rest' ),
201 'pluginUrl' => MWAI_URL,
202 'restUrl' => untrailingslashit( rest_url() ),
203 'debugMode' => $this->core->get_option( 'debug_mode' ),
204 'typewriter' => $this->core->get_option( 'shortcode_chat_typewriter' )
205 ];
206
207 $theme = isset( $frontParams['themeId'] ) ? $this->core->getTheme( $frontParams['themeId'] ) : null;
208
209 $this->usingChat = true;
210 $jsonFrontParams = htmlspecialchars(json_encode($frontParams), ENT_QUOTES, 'UTF-8');
211 $jsonFrontSystem = htmlspecialchars(json_encode($frontSystem), ENT_QUOTES, 'UTF-8');
212 $jsonFrontTheme = htmlspecialchars(json_encode($theme), ENT_QUOTES, 'UTF-8');
213 return "<div class='mwai-chatbot-container' data-params='{$jsonFrontParams}' data-system='{$jsonFrontSystem}' data-theme='{$jsonFrontTheme}'></div>";
214 }
215
216 }
217