PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 1.5.0
AI Engine – The Chatbot, AI Framework & MCP for WordPress v1.5.0
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
212 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 $isEnqueued = false;
12 private $siteWideChatId = null;
13
14 public function __construct() {
15 global $mwai_core;
16 $this->core = $mwai_core;
17 add_shortcode( 'mwai_chatbot_v2', array( $this, 'chat' ) );
18 add_action( 'rest_api_init', array( $this, 'rest_api_init' ) );
19 $this->siteWideChatId = $this->core->get_option( 'chatId' );
20 if ( !empty( $this->siteWideChatId ) && $this->siteWideChatId !== 'none' ) {
21 $this->registerChatbotScripts();
22 add_action( 'wp_footer', array( $this, 'inject_chat' ) );
23 }
24 }
25
26 public function registerChatbotScripts() {
27 if ( $this->isEnqueued ) {
28 return;
29 }
30 $this->isEnqueued = true;
31 // $physical_file = MWAI_PATH . '/app/chatbot-vendor.js';
32 // $cache_buster = file_exists( $physical_file ) ? filemtime( $physical_file ) : MWAI_VERSION;
33 // wp_register_script( 'mwai_chatbot_vendor', MWAI_URL . '/app/chatbot-vendor.js', [ 'wp-element' ], $cache_buster, false );
34 $physical_file = MWAI_PATH . '/app/chatbot.js';
35 $cache_buster = file_exists( $physical_file ) ? filemtime( $physical_file ) : MWAI_VERSION;
36 wp_enqueue_script( 'mwai_chatbot', MWAI_URL . '/app/chatbot.js', [ 'wp-element' ], $cache_buster, false );
37 }
38
39 public function rest_api_init() {
40 register_rest_route( $this->namespace, '/chat', array(
41 'methods' => 'POST',
42 'callback' => array( $this, 'rest_chat' ),
43 'permission_callback' => '__return_true'
44 ) );
45 register_rest_route( $this->namespace, '/images', array(
46 'methods' => 'POST',
47 'callback' => array( $this, 'rest_images' ),
48 'permission_callback' => '__return_true'
49 ) );
50 }
51
52 public function basics_security_check( $params ) {
53 if ( empty( $params['newMessage'] ) ) {
54 return false;
55 }
56 if ( empty( $params['chatId'] ) ) {
57 return false;
58 }
59 $length = strlen( trim( $params['newMessage'] ) );
60 if ( $length < 1 || $length > ( 4096 - 512 ) ) {
61 return false;
62 }
63 return true;
64 }
65
66 public function rest_chat( $request ) {
67 try {
68 $params = $request->get_json_params();
69 if ( !$this->basics_security_check( $params )) {
70 return new WP_REST_Response( [
71 'success' => false,
72 'message' => 'Sorry, your query has been rejected.' ], 403
73 );
74 }
75 $chatbot = $this->core->getChatbot( $params['chatId'] );
76 if ( !$chatbot ) {
77 return new WP_REST_Response( [
78 'success' => false,
79 'message' => 'Sorry, your query has been rejected.' ], 403
80 );
81 }
82
83 // Create the QueryText
84 $query = new Meow_MWAI_QueryText( $params['newMessage'], 1024 );
85 $query->setIsChat( true );
86
87 // Take care of the parameters
88 $newParams = [];
89 foreach ( $chatbot as $key => $value ) {
90 $newParams[$key] = $value;
91 }
92 foreach ( $params as $key => $value ) {
93 $newParams[$key] = $value;
94 }
95 $params = apply_filters( 'mwai_chatbot_params', $newParams );
96 $query->injectParams( $params );
97
98 $takeoverAnswer = apply_filters( 'mwai_chatbot_takeover', null, $query, $params );
99 if ( !empty( $takeoverAnswer ) ) {
100 return new WP_REST_Response( [ 'success' => true, 'answer' => $takeoverAnswer,
101 'html' => $takeoverAnswer, 'usage' => null ], 200 );
102 }
103
104 // Moderation
105 if ( $this->core->get_option( 'shortcode_chat_moderation' ) ) {
106 global $mwai;
107 $isFlagged = $mwai->moderationCheck( $query->prompt );
108 if ( $isFlagged ) {
109 return new WP_REST_Response( [
110 'success' => false,
111 'message' => 'Sorry, your message has been rejected by moderation.' ], 403
112 );
113 }
114 }
115
116 // Awareness & Embeddings
117 $context = null;
118 $embeddingsIndex = $params['embeddingsIndex'];
119 if ( $query->mode === 'chat' && !empty( $embeddingsIndex ) ) {
120 $context = apply_filters( 'mwai_context_search', $query, $embeddingsIndex );
121 if ( !empty( $context ) ) {
122 $query->injectContext( $context['content'] );
123 }
124 }
125
126 // Query the AI
127 $answer = $this->core->ai->run( $query );
128 $rawText = $answer->result;
129 $extra = [];
130 if ( $context ) {
131 $extra = [ 'embeddings' => $context['embeddings'] ];
132 }
133 $html = apply_filters( 'mwai_chatbot_reply', $rawText, $query, $params, $extra );
134 if ( $this->core->get_option( 'shortcode_chat_formatting' ) ) {
135 $html = $this->core->markdown_to_html( $html );
136 }
137 return new WP_REST_Response( [ 'success' => true, 'answer' => $rawText,
138 'html' => $html, 'usage' => $answer->usage ], 200 );
139 }
140 catch ( Exception $e ) {
141 return new WP_REST_Response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
142 }
143 }
144
145 public function rest_images( $request ) {
146 try {
147 $params = $request->get_json_params();
148 $query = new Meow_MWAI_QueryImage( $params['prompt'] );
149 $query->injectParams( $params );
150 $answer = $this->core->ai->run( $query );
151 return new WP_REST_Response( [ 'success' => true, 'images' => $answer->results, 'usage' => $answer->usage ], 200 );
152 }
153 catch ( Exception $e ) {
154 return new WP_REST_Response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
155 }
156 }
157
158 public function inject_chat() {
159 $params = $this->core->getChatbot( $this->siteWideChatId );
160 if ( !empty( $params ) ) {
161 $params['window'] = true;
162 $params['id'] = $this->siteWideChatId;
163 echo $this->chat( $params );
164 }
165 return null;
166 }
167
168 public function imageschat( $atts ) {
169 $atts['mode'] = 'images';
170 return $this->chat( $atts );
171 }
172
173 public function chat( $atts ) {
174 $chatId = isset( $atts['id'] ) ? $atts['id'] : 'default';
175 $chatbot = $this->core->getChatbot( $chatId );
176 if ( !$chatbot ) {
177 return "Chatbot not found.";
178 }
179
180 $frontParams = [];
181 foreach ( MWAI_CHATBOT_FRONT_PARAMS as $param ) {
182 if ( isset( $atts[$param] ) ) {
183 $frontParams[$param] = $atts[$param];
184 }
185 else if ( isset( $chatbot[$param] ) ) {
186 $frontParams[$param] = $chatbot[$param];
187 }
188 }
189
190 $frontSystem = [
191 'chatId' => $chatId,
192 'userData' => $this->core->getUserData(),
193 'sessionId' => $this->core->get_session_id(),
194 'restNonce' => wp_create_nonce( 'wp_rest' ),
195 'contextId' => get_the_ID(),
196 'pluginUrl' => MWAI_URL,
197 'restUrl' => untrailingslashit( rest_url() ),
198 'debugMode' => $this->core->get_option( 'debug_mode' ),
199 'typewriter' => $this->core->get_option( 'shortcode_chat_typewriter' )
200 ];
201
202 $theme = isset( $frontParams['themeId'] ) ? $this->core->getTheme( $frontParams['themeId'] ) : null;
203 $jsonFrontParams = htmlspecialchars(json_encode($frontParams), ENT_QUOTES, 'UTF-8');
204 $jsonFrontSystem = htmlspecialchars(json_encode($frontSystem), ENT_QUOTES, 'UTF-8');
205 $jsonFrontTheme = htmlspecialchars(json_encode($theme), ENT_QUOTES, 'UTF-8');
206
207 $this->registerChatbotScripts();
208 return "<div class='mwai-chatbot-container' data-params='{$jsonFrontParams}' data-system='{$jsonFrontSystem}' data-theme='{$jsonFrontTheme}'></div>";
209 }
210
211 }
212