PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 1.3.98
AI Engine – The Chatbot, AI Framework & MCP for WordPress v1.3.98
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_logs.php 3 years ago discussions.php 3 years ago
discussions.php
191 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 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 'embeddings' => isset( $extra['embeddings'] ) ? $extra['embeddings'] : null
112 ];
113 if ( $chat ) {
114 $chat->messages = json_decode( $chat->messages );
115 $chat->messages[] = [
116 'type' => 'user',
117 'text' => $params['newMessage']
118 ];
119 $chat->messages[] = [
120 'type' => 'ai',
121 'text' => $rawText,
122 'extra' => $extra
123 ];
124 $chat->messages = json_encode( $chat->messages );
125 $this->wpdb->update( $this->table_chats, [
126 'messages' => $chat->messages,
127 'updated' => date( 'Y-m-d H:i:s' )
128 ], [ 'id' => $chat->id ] );
129 }
130 else {
131 $chat = [
132 'chatId' => $ssChatId,
133 'messages' => json_encode( [
134 [
135 'type' => 'user',
136 'text' => $params['newMessage']
137 ],
138 [
139 'type' => 'ai',
140 'text' => $rawText,
141 'extra' => $extra
142 ]
143 ] ),
144 'extra' => json_encode( [
145 'ip' => $userIp,
146 'userId' => $userId,
147 'session' => $query->session,
148 'model' => $query->model,
149 'temperature' => $query->temperature
150 ] ),
151 'created' => date( 'Y-m-d H:i:s' ),
152 'updated' => date( 'Y-m-d H:i:s' )
153 ];
154 $this->wpdb->insert( $this->table_chats, $chat );
155 }
156 return $rawText;
157 }
158
159 function check_db() {
160 if ( $this->db_check ) {
161 return true;
162 }
163 $this->db_check = !( strtolower(
164 $this->wpdb->get_var( "SHOW TABLES LIKE '$this->table_chats'" ) ) != strtolower( $this->table_chats )
165 );
166 if ( !$this->db_check ) {
167 $this->create_db();
168 $this->db_check = !( strtolower(
169 $this->wpdb->get_var( "SHOW TABLES LIKE '$this->table_chats'" ) ) != strtolower( $this->table_chats )
170 );
171 }
172 return $this->db_check;
173 }
174
175 function create_db() {
176 $charset_collate = $this->wpdb->get_charset_collate();
177 $sqlLogs = "CREATE TABLE $this->table_chats (
178 id BIGINT(20) NOT NULL AUTO_INCREMENT,
179 chatId VARCHAR(64) NOT NULL NULL,
180 messages TEXT NOT NULL NULL,
181 extra TEXT NOT NULL NULL,
182 created DATETIME NOT NULL,
183 updated DATETIME NOT NULL,
184 PRIMARY KEY (id),
185 INDEX chatId (chatId)
186 ) $charset_collate;";
187 require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
188 dbDelta( $sqlLogs );
189 }
190
191 }