PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 0.7.7
AI Engine – The Chatbot, AI Framework & MCP for WordPress v0.7.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
231 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_fine_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_forms' => false,
76 'module_blocks' => false,
77 'module_statistics' => false,
78 'shortcode_chat' => true,
79 'shortcode_chat_params' => MWAI_CHATBOT_PARAMS,
80 'shortcode_chat_params_override' => false,
81 'shortcode_chat_html' => true,
82 'shortcode_chat_formatting' => true,
83 'shortcode_chat_syntax_highlighting' => false,
84 'shortcode_chat_inject' => false,
85 'openai_apikey' => false,
86 'openai_usage' => [],
87 'openai_finetunes' => [],
88 'openai_finetunes_deleted' => [],
89 'extra_models' => "",
90 'languages' => MWAI_LANGUAGES
91 ]);
92 #endregion
93
94 class Meow_MWAI_Core
95 {
96 public $admin = null;
97 public $is_rest = false;
98 public $is_cli = false;
99 public $site_url = null;
100 public $ai = null;
101 private $option_name = 'mwai_options';
102 public $defaultChatbotParams = MWAI_CHATBOT_PARAMS;
103
104 public function __construct() {
105 $this->site_url = get_site_url();
106 $this->is_rest = MeowCommon_Helpers::is_rest();
107 $this->is_cli = defined( 'WP_CLI' ) && WP_CLI;
108 $this->ai = new Meow_MWAI_AI( $this );
109 add_action( 'plugins_loaded', array( $this, 'init' ) );
110 }
111
112 function init() {
113 if ( $this->is_rest ) {
114 new Meow_MWAI_Rest( $this );
115 }
116 if ( is_admin() ) {
117 new Meow_MWAI_Admin( $this );
118 new Meow_MWAI_Modules_Assistants( $this );
119 }
120 else {
121 //new Meow_MWAI_UI( $this );
122 if ( $this->get_option( 'shortcode_chat' ) ) {
123 new Meow_MWAI_Modules_Chatbot();
124 }
125 }
126
127 // Advanced core
128 if ( class_exists( 'MeowPro_MWAI_Core' ) ) {
129 new MeowPro_MWAI_Core( $this );
130 }
131 }
132
133 #region Helpers
134 function can_access_settings() {
135 return apply_filters( 'mwai_allow_setup', current_user_can( 'manage_options' ) );
136 }
137
138 function can_access_features() {
139 $editor_or_admin = current_user_can( 'editor' ) || current_user_can( 'administrator' );
140 return apply_filters( 'mwai_allow_usage', $editor_or_admin );
141 }
142
143 function isUrl( $url ) {
144 return strpos( $url, 'http' ) === 0 ? true : false;
145 }
146
147 function get_text_from_postId( $postId ) {
148 $post = get_post( $postId );
149 if ( !$post ) {
150 return false;
151 }
152 $post->post_content = apply_filters( 'the_content', $post->post_content );
153 $text = strip_tags( $post->post_content );
154 $text = preg_replace( '/^\h*\v+/m', '', $text );
155 $text = html_entity_decode( $text );
156 return $text;
157 }
158
159 function get_session_id() {
160 if ( !isset( $_SESSION ) ) {
161 error_log("AI Engine: There is no session.");
162 return uniqid();
163 }
164 if ( isset( $_SESSION['mwai_session_id'] ) ) {
165 return $_SESSION['mwai_session_id'];
166 }
167 else {
168 $session_id = uniqid();
169 $_SESSION['mwai_session_id'] = $session_id;
170 return $session_id;
171 }
172 }
173
174 function markdown_to_html( $content ) {
175 $Parsedown = new Parsedown();
176 $content = $Parsedown->text( $content );
177 return $content;
178 }
179 #endregion
180
181 #region Options
182 function get_all_options() {
183 $options = get_option( $this->option_name, null );
184 foreach ( MWAI_OPTIONS as $key => $value ) {
185 if ( !isset( $options[$key] ) ) {
186 $options[$key] = $value;
187 }
188 if ( $key === 'languages' ) {
189 $options[$key] = apply_filters( 'mwai_languages', $options[$key] );
190 }
191 }
192 $options['shortcode_chat_default_params'] = MWAI_CHATBOT_PARAMS;
193 return $options;
194 }
195
196 // Validate and keep the options clean and logical.
197 function sanitize_options() {
198 $options = $this->get_all_options();
199 $needs_update = false;
200
201 // We can sanitize our future options here, let's always remember it.
202 // Now, it is empty...
203
204 if ( $needs_update ) {
205 update_option( $this->option_name, $options, false );
206 }
207 return $options;
208 }
209
210 function update_options( $options ) {
211 if ( !update_option( $this->option_name, $options, false ) ) {
212 return false;
213 }
214 $options = $this->sanitize_options();
215 return $options;
216 }
217
218 function update_option( $option, $value ) {
219 $options = $this->get_all_options();
220 $options[$option] = $value;
221 return $this->update_options( $options );
222 }
223
224 function get_option( $option, $default = null ) {
225 $options = $this->get_all_options();
226 return $options[$option] ?? $default;
227 }
228 #endregion
229 }
230
231 ?>