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