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