PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 1.3.79
AI Engine – The Chatbot, AI Framework & MCP for WordPress v1.3.79
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
193 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 $chatId = $params['chatId'];
55 $this->wpdb->delete( $this->table_chats, [ 'chatId' => $chatId ] );
56 return new WP_REST_Response([ 'success' => true ], 200 );
57 }
58 catch ( Exception $e ) {
59 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
60 }
61 }
62
63 function chats_query( $chats = [], $offset = 0, $limit = null, $filters = null, $sort = null ) {
64 $this->check_db();
65 $offset = !empty( $offset ) ? intval( $offset ) : 0;
66 $limit = !empty( $limit ) ? intval( $limit ) : 5;
67 $filters = !empty( $filters ) ? $filters : [];
68 $sort = !empty( $sort ) ? $sort : [ "accessor" => "time", "by" => "desc" ];
69 $query = "SELECT * FROM $this->table_chats";
70
71 // Filters
72 $where = array();
73 if ( isset( $filters['from'] ) ) {
74 $where[] = "time >= '" . esc_sql( $filters['from'] ) . "'";
75 }
76 if ( isset( $filters['to'] ) ) {
77 $where[] = "time <= '" . esc_sql( $filters['to'] ) . "'";
78 }
79 if ( count( $where ) > 0 ) {
80 $query .= " WHERE " . implode( " AND ", $where );
81 }
82
83 // Count based on this query
84 $chats['total'] = $this->wpdb->get_var( "SELECT COUNT(*) FROM ($query) AS t" );
85
86 // Order by
87 $query .= " ORDER BY " . esc_sql( $sort['accessor'] ) . " " . esc_sql( $sort['by'] );
88
89 // Limits
90 if ( $limit > 0 ) {
91 $query .= " LIMIT $offset, $limit";
92 }
93
94 $chats['rows'] = $this->wpdb->get_results( $query, ARRAY_A );
95 return $chats;
96 }
97
98 function chatbot_reply( $rawText, $query, $params, $extra ) {
99 global $mwai_core;
100 $userIp = $mwai_core->get_ip_address();
101 $userId = $mwai_core->get_user_id();
102 $chatClientId = isset( $params['clientId'] ) ? $params['clientId'] : $query->session;
103 $ssChatId = hash( 'sha256', $userIp . $userId . $chatClientId );
104 $this->check_db();
105 $chat = $this->wpdb->get_row( $this->wpdb->prepare( "SELECT * FROM $this->table_chats WHERE chatId = %s", $ssChatId ) );
106 $extra = [
107 'embedding' => isset( $extra['embedding'] ) ? [
108 'id' => $extra['embedding']['id'],
109 'type' => $extra['embedding']['type'],
110 'title' => $extra['embedding']['title'],
111 'refId' => $extra['embedding']['refId'],
112 'score' => $extra['embedding']['score']
113 ] : null
114 ];
115 if ( $chat ) {
116 $chat->messages = json_decode( $chat->messages );
117 $chat->messages[] = [
118 'type' => 'user',
119 'text' => $params['rawInput']
120 ];
121 $chat->messages[] = [
122 'type' => 'ai',
123 'text' => $rawText,
124 'extra' => $extra
125 ];
126 $chat->messages = json_encode( $chat->messages );
127 $this->wpdb->update( $this->table_chats, [
128 'messages' => $chat->messages,
129 'updated' => date( 'Y-m-d H:i:s' )
130 ], [ 'id' => $chat->id ] );
131 }
132 else {
133 $chat = [
134 'chatId' => $ssChatId,
135 'messages' => json_encode( [
136 [
137 'type' => 'user',
138 'text' => $params['rawInput']
139 ],
140 [
141 'type' => 'ai',
142 'text' => $rawText,
143 'extra' => $extra
144 ]
145 ] ),
146 'extra' => json_encode( [
147 'ip' => $userIp,
148 'userId' => $userId,
149 'session' => $query->session,
150 'model' => $query->model,
151 'temperature' => $query->temperature
152 ] ),
153 'created' => date( 'Y-m-d H:i:s' ),
154 'updated' => date( 'Y-m-d H:i:s' )
155 ];
156 $this->wpdb->insert( $this->table_chats, $chat );
157 }
158 return $rawText;
159 }
160
161 function check_db() {
162 if ( $this->db_check ) {
163 return true;
164 }
165 $this->db_check = !( strtolower(
166 $this->wpdb->get_var( "SHOW TABLES LIKE '$this->table_chats'" ) ) != strtolower( $this->table_chats )
167 );
168 if ( !$this->db_check ) {
169 $this->create_db();
170 $this->db_check = !( strtolower(
171 $this->wpdb->get_var( "SHOW TABLES LIKE '$this->table_chats'" ) ) != strtolower( $this->table_chats )
172 );
173 }
174 return $this->db_check;
175 }
176
177 function create_db() {
178 $charset_collate = $this->wpdb->get_charset_collate();
179 $sqlLogs = "CREATE TABLE $this->table_chats (
180 id BIGINT(20) NOT NULL AUTO_INCREMENT,
181 chatId VARCHAR(64) NOT NULL NULL,
182 messages TEXT NOT NULL NULL,
183 extra TEXT NOT NULL NULL,
184 created DATETIME NOT NULL,
185 updated DATETIME NOT NULL,
186 PRIMARY KEY (id),
187 INDEX chatId (chatId)
188 ) $charset_collate;";
189 require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
190 dbDelta( $sqlLogs );
191 }
192
193 }