PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 1.3.87
AI Engine – The Chatbot, AI Framework & MCP for WordPress v1.3.87
3.5.8 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_chats.php
ai-engine / classes / modules Last commit date
assistants.php 3 years ago chatbot-chatgpt.css 3 years ago chatbot-chatgpt.scss 3 years ago chatbot.php 3 years ago chatbot_chats.php 3 years ago chatbot_logs.php 3 years ago
chatbot_chats.php
197 lines
1 <?php
2
3 class Meow_MWAI_Modules_Chatbot_Chats {
4 private $wpdb = null;
5 private $core = null;
6 private $table_chats = null;
7 private $db_check = false;
8 private $namespace = 'ai-engine/v1';
9
10 public function __construct() {
11 global $wpdb;
12 global $mwai_core;
13 $this->core = $mwai_core;
14 $this->wpdb = $wpdb;
15 $this->table_chats = $wpdb->prefix . 'mwai_chats';
16
17 if ( $this->core->get_option( 'shortcode_chat_discussions' ) ) {
18 add_filter( 'mwai_chatbot_reply', [ $this, 'chatbot_reply' ], 10, 4 );
19 add_action( 'rest_api_init', array( $this, 'rest_api_init' ) );
20 }
21 }
22
23 public function rest_api_init() {
24 register_rest_route( $this->namespace, '/chats', array(
25 'methods' => 'POST',
26 'callback' => array( $this, 'rest_chats' ),
27 'permission_callback' => '__return_true'
28 ) );
29 register_rest_route( $this->namespace, '/chats_delete', array(
30 'methods' => 'POST',
31 'callback' => array( $this, 'rest_chats_delete' ),
32 'permission_callback' => '__return_true'
33 ) );
34 }
35
36 function rest_chats( $request ) {
37 try {
38 $params = $request->get_json_params();
39 $offset = $params['offset'];
40 $limit = $params['limit'];
41 $filters = $params['filters'];
42 $sort = $params['sort'];
43 $chats = $this->chats_query( [], $offset, $limit, $filters, $sort );
44 return new WP_REST_Response([ 'success' => true, 'total' => $chats['total'], 'chats' => $chats['rows'] ], 200 );
45 }
46 catch ( Exception $e ) {
47 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
48 }
49 }
50
51 function rest_chats_delete( $request ) {
52 try {
53 $params = $request->get_json_params();
54 $chatsIds = $params['chatIds'];
55 if ( is_array( $chatsIds ) ) {
56 foreach( $chatsIds as $chatId ) {
57 $this->wpdb->delete( $this->table_chats, [ 'chatId' => $chatId ] );
58 }
59 }
60 return new WP_REST_Response([ 'success' => true ], 200 );
61 }
62 catch ( Exception $e ) {
63 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
64 }
65 }
66
67 function chats_query( $chats = [], $offset = 0, $limit = null, $filters = null, $sort = null ) {
68 $this->check_db();
69 $offset = !empty( $offset ) ? intval( $offset ) : 0;
70 $limit = !empty( $limit ) ? intval( $limit ) : 5;
71 $filters = !empty( $filters ) ? $filters : [];
72 $sort = !empty( $sort ) ? $sort : [ "accessor" => "time", "by" => "desc" ];
73 $query = "SELECT * FROM $this->table_chats";
74
75 // Filters
76 $where = array();
77 if ( isset( $filters['from'] ) ) {
78 $where[] = "time >= '" . esc_sql( $filters['from'] ) . "'";
79 }
80 if ( isset( $filters['to'] ) ) {
81 $where[] = "time <= '" . esc_sql( $filters['to'] ) . "'";
82 }
83 if ( count( $where ) > 0 ) {
84 $query .= " WHERE " . implode( " AND ", $where );
85 }
86
87 // Count based on this query
88 $chats['total'] = $this->wpdb->get_var( "SELECT COUNT(*) FROM ($query) AS t" );
89
90 // Order by
91 $query .= " ORDER BY " . esc_sql( $sort['accessor'] ) . " " . esc_sql( $sort['by'] );
92
93 // Limits
94 if ( $limit > 0 ) {
95 $query .= " LIMIT $offset, $limit";
96 }
97
98 $chats['rows'] = $this->wpdb->get_results( $query, ARRAY_A );
99 return $chats;
100 }
101
102 function chatbot_reply( $rawText, $query, $params, $extra ) {
103 global $mwai_core;
104 $userIp = $mwai_core->get_ip_address();
105 $userId = $mwai_core->get_user_id();
106 $chatClientId = isset( $params['clientId'] ) ? $params['clientId'] : $query->session;
107 $ssChatId = hash( 'sha256', $userIp . $userId . $chatClientId );
108 $this->check_db();
109 $chat = $this->wpdb->get_row( $this->wpdb->prepare( "SELECT * FROM $this->table_chats WHERE chatId = %s", $ssChatId ) );
110 $extra = [
111 'embedding' => isset( $extra['embedding'] ) ? [
112 'id' => $extra['embedding']['id'],
113 'type' => $extra['embedding']['type'],
114 'title' => $extra['embedding']['title'],
115 'refId' => $extra['embedding']['refId'],
116 'score' => $extra['embedding']['score']
117 ] : null
118 ];
119 if ( $chat ) {
120 $chat->messages = json_decode( $chat->messages );
121 $chat->messages[] = [
122 'type' => 'user',
123 'text' => $params['rawInput']
124 ];
125 $chat->messages[] = [
126 'type' => 'ai',
127 'text' => $rawText,
128 'extra' => $extra
129 ];
130 $chat->messages = json_encode( $chat->messages );
131 $this->wpdb->update( $this->table_chats, [
132 'messages' => $chat->messages,
133 'updated' => date( 'Y-m-d H:i:s' )
134 ], [ 'id' => $chat->id ] );
135 }
136 else {
137 $chat = [
138 'chatId' => $ssChatId,
139 'messages' => json_encode( [
140 [
141 'type' => 'user',
142 'text' => $params['rawInput']
143 ],
144 [
145 'type' => 'ai',
146 'text' => $rawText,
147 'extra' => $extra
148 ]
149 ] ),
150 'extra' => json_encode( [
151 'ip' => $userIp,
152 'userId' => $userId,
153 'session' => $query->session,
154 'model' => $query->model,
155 'temperature' => $query->temperature
156 ] ),
157 'created' => date( 'Y-m-d H:i:s' ),
158 'updated' => date( 'Y-m-d H:i:s' )
159 ];
160 $this->wpdb->insert( $this->table_chats, $chat );
161 }
162 return $rawText;
163 }
164
165 function check_db() {
166 if ( $this->db_check ) {
167 return true;
168 }
169 $this->db_check = !( strtolower(
170 $this->wpdb->get_var( "SHOW TABLES LIKE '$this->table_chats'" ) ) != strtolower( $this->table_chats )
171 );
172 if ( !$this->db_check ) {
173 $this->create_db();
174 $this->db_check = !( strtolower(
175 $this->wpdb->get_var( "SHOW TABLES LIKE '$this->table_chats'" ) ) != strtolower( $this->table_chats )
176 );
177 }
178 return $this->db_check;
179 }
180
181 function create_db() {
182 $charset_collate = $this->wpdb->get_charset_collate();
183 $sqlLogs = "CREATE TABLE $this->table_chats (
184 id BIGINT(20) NOT NULL AUTO_INCREMENT,
185 chatId VARCHAR(64) NOT NULL NULL,
186 messages TEXT NOT NULL NULL,
187 extra TEXT NOT NULL NULL,
188 created DATETIME NOT NULL,
189 updated DATETIME NOT NULL,
190 PRIMARY KEY (id),
191 INDEX chatId (chatId)
192 ) $charset_collate;";
193 require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
194 dbDelta( $sqlLogs );
195 }
196
197 }