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