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