PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 0.9.2
AI Engine – The Chatbot, AI Framework & MCP for WordPress v0.9.2
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 / core.php
ai-engine / classes Last commit date
modules 3 years ago admin.php 3 years ago ai.php 3 years ago answer.php 3 years ago core.php 3 years ago init.php 3 years ago openai.php 3 years ago query.php 3 years ago queryimage.php 3 years ago querytext.php 3 years ago rest.php 3 years ago ui.php 3 years ago
core.php
257 lines
1 <?php
2
3 require_once( MWAI_PATH . '/vendor/autoload.php' );
4
5 #region Constants
6
7 // Price as of January 2023: https://openai.com/api/pricing/
8 define( 'MWAI_OPENAI_PRICING', [
9 // Base models:
10 [ "model" => "davinci", "price" => 0.02, "type" => "token", "unit" => 1 / 1000 ],
11 [ "model" => "curie", "price" => 0.002, "type" => "token", "unit" => 1 / 1000 ],
12 [ "model" => "babbage", "price" => 0.0005, "type" => "token", "unit" => 1 / 1000 ],
13 [ "model" => "ada", "price" => 0.0004, "type" => "token", "unit" => 1 / 1000 ],
14 // Image models:
15 [ "model" => "dall-e", "type" => "image", "unit" => 1, "options" => [
16 [ "option" => "1024x1024", "price" => 0.02 ],
17 [ "option" => "512x512", "price" => 0.018 ],
18 [ "option" => "256x256", "price" => 0.016 ]
19 ],
20 ],
21 // Fine-tuned models:
22 [ "model" => "fn-davinci", "price" => 0.12, "type" => "token", "unit" => 1 / 1000 ],
23 [ "model" => "fn-curie", "price" => 0.012, "type" => "token", "unit" => 1 / 1000 ],
24 [ "model" => "fn-babbage", "price" => 0.0024, "type" => "token", "unit" => 1 / 1000 ],
25 [ "model" => "fn-ada", "price" => 0.0016, "type" => "token", "unit" => 1 / 1000 ],
26 ]);
27
28 define( 'MWAI_CHATBOT_PARAMS', [
29 // UI Parameters
30 'id' => '',
31 'env' => 'chatbot',
32 'mode' => 'chat',
33 'context' => "Converse as if you were an AI assistant. Be friendly, creative.",
34 'ai_name' => "AI: ",
35 'user_name' => "User: ",
36 'guest_name' => "Guest: ",
37 'sys_name' => "System: ",
38 'start_sentence' => "Hi! How can I help you?",
39 'text_send' => 'Send',
40 'text_clear' => 'Clear',
41 'text_input_placeholder' => 'Type your message...',
42 'style' => 'chatgpt',
43 'window' => false,
44 'icon' => null,
45 'icon_text' => '',
46 'icon_position' => 'bottom-right',
47 'fullscreen' => false,
48 // Chatbot System Parameters
49 'casually_fine_tuned' => false,
50 'content_aware' => false,
51 'prompt_ending' => null,
52 'completion_ending' => null,
53 // AI Parameters
54 'model' => 'text-davinci-003',
55 'temperature' => 0.8,
56 'max_tokens' => 1024,
57 'max_results' => 3,
58 'api_key' => null
59 ] );
60
61 define( 'MWAI_LANGUAGES', [
62 'en' => 'English',
63 'es' => 'Spanish',
64 'fr' => 'French',
65 'de' => 'German',
66 'it' => 'Italian',
67 'pt' => 'Portuguese',
68 'ru' => 'Russian',
69 'ja' => 'Japanese',
70 'zh' => 'Chinese',
71 ] );
72
73 define ( 'MWAI_LIMITS', [
74 'enabled' => true,
75 'guests' => [
76 'credits' => 3,
77 'creditType' => 'queries',
78 'timeFrame' => 'day',
79 'isAbsolute' => false,
80 'overLimitMessage' => "You have reached the limit.",
81 ],
82 'users' => [
83 'credits' => 10,
84 'creditType' => 'price',
85 'timeFrame' => 'month',
86 'isAbsolute' => false,
87 'overLimitMessage' => "You have reached the limit.",
88 'ignoredUsers' => "administrator,editor",
89 ],
90 ] );
91
92 define( 'MWAI_OPTIONS', [
93 'module_titles' => true,
94 'module_excerpts' => true,
95 'module_woocommerce' => true,
96 'module_forms' => false,
97 'module_blocks' => false,
98 'module_playground' => true,
99 'module_generator_content' => true,
100 'module_generator_images' => true,
101 'shortcode_chat' => true,
102 'shortcode_chat_params' => MWAI_CHATBOT_PARAMS,
103 'shortcode_chat_params_override' => false,
104 'shortcode_chat_html' => true,
105 'shortcode_chat_formatting' => true,
106 'shortcode_chat_syntax_highlighting' => false,
107 'shortcode_chat_inject' => false,
108 'limits' => MWAI_LIMITS,
109 'openai_apikey' => false,
110 'openai_usage' => [],
111 'openai_finetunes' => [],
112 'openai_finetunes_deleted' => [],
113 'extra_models' => "",
114 'debug_mode' => true,
115 'languages' => MWAI_LANGUAGES
116 ]);
117 #endregion
118
119 class Meow_MWAI_Core
120 {
121 public $admin = null;
122 public $is_rest = false;
123 public $is_cli = false;
124 public $site_url = null;
125 public $ai = null;
126 private $option_name = 'mwai_options';
127 public $defaultChatbotParams = MWAI_CHATBOT_PARAMS;
128
129 public function __construct() {
130 $this->site_url = get_site_url();
131 $this->is_rest = MeowCommon_Helpers::is_rest();
132 $this->is_cli = defined( 'WP_CLI' ) && WP_CLI;
133 $this->ai = new Meow_MWAI_AI( $this );
134 add_action( 'plugins_loaded', array( $this, 'init' ) );
135 }
136
137 function init() {
138 if ( $this->is_rest ) {
139 new Meow_MWAI_Rest( $this );
140 }
141 if ( is_admin() ) {
142 new Meow_MWAI_Admin( $this );
143 new Meow_MWAI_Modules_Assistants( $this );
144 }
145 else {
146 //new Meow_MWAI_UI( $this );
147 if ( $this->get_option( 'shortcode_chat' ) ) {
148 new Meow_MWAI_Modules_Chatbot();
149 }
150 }
151
152 // Advanced core
153 if ( class_exists( 'MeowPro_MWAI_Core' ) ) {
154 new MeowPro_MWAI_Core( $this );
155 }
156 }
157
158 #region Helpers
159 function can_access_settings() {
160 return apply_filters( 'mwai_allow_setup', current_user_can( 'manage_options' ) );
161 }
162
163 function can_access_features() {
164 $editor_or_admin = current_user_can( 'editor' ) || current_user_can( 'administrator' );
165 return apply_filters( 'mwai_allow_usage', $editor_or_admin );
166 }
167
168 function isUrl( $url ) {
169 return strpos( $url, 'http' ) === 0 ? true : false;
170 }
171
172 function get_text_from_postId( $postId ) {
173 $post = get_post( $postId );
174 if ( !$post ) {
175 return false;
176 }
177 $post->post_content = apply_filters( 'the_content', $post->post_content );
178 $text = strip_tags( $post->post_content );
179 $text = preg_replace( '/^\h*\v+/m', '', $text );
180 $text = html_entity_decode( $text );
181 return $text;
182 }
183
184 function get_session_id() {
185 if ( !isset( $_SESSION ) ) {
186 error_log("AI Engine: There is no session.");
187 return uniqid();
188 }
189 if ( isset( $_SESSION['mwai_session_id'] ) ) {
190 return $_SESSION['mwai_session_id'];
191 }
192 else {
193 $session_id = uniqid();
194 $_SESSION['mwai_session_id'] = $session_id;
195 return $session_id;
196 }
197 }
198
199 function markdown_to_html( $content ) {
200 $Parsedown = new Parsedown();
201 $content = $Parsedown->text( $content );
202 return $content;
203 }
204 #endregion
205
206 #region Options
207 function get_all_options() {
208 $options = get_option( $this->option_name, null );
209 foreach ( MWAI_OPTIONS as $key => $value ) {
210 if ( !isset( $options[$key] ) ) {
211 $options[$key] = $value;
212 }
213 if ( $key === 'languages' ) {
214 $options[$key] = apply_filters( 'mwai_languages', $options[$key] );
215 }
216 }
217 $options['shortcode_chat_default_params'] = MWAI_CHATBOT_PARAMS;
218 $options['default_limits'] = MWAI_LIMITS;
219 return $options;
220 }
221
222 // Validate and keep the options clean and logical.
223 function sanitize_options() {
224 $options = $this->get_all_options();
225 $needs_update = false;
226
227 // We can sanitize our future options here, let's always remember it.
228 // Now, it is empty...
229
230 if ( $needs_update ) {
231 update_option( $this->option_name, $options, false );
232 }
233 return $options;
234 }
235
236 function update_options( $options ) {
237 if ( !update_option( $this->option_name, $options, false ) ) {
238 return false;
239 }
240 $options = $this->sanitize_options();
241 return $options;
242 }
243
244 function update_option( $option, $value ) {
245 $options = $this->get_all_options();
246 $options[$option] = $value;
247 return $this->update_options( $options );
248 }
249
250 function get_option( $option, $default = null ) {
251 $options = $this->get_all_options();
252 return $options[$option] ?? $default;
253 }
254 #endregion
255 }
256
257 ?>