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