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