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