PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 0.6.7
AI Engine – The Chatbot, AI Framework & MCP for WordPress v0.6.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
229 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
132 #region Helpers
133 function can_access_settings() {
134 return apply_filters( 'mwai_allow_setup', current_user_can( 'manage_options' ) );
135 }
136
137 function can_access_features() {
138 return apply_filters( 'mwai_allow_usage', current_user_can( 'administrator' ) );
139 }
140
141 function isUrl( $url ) {
142 return strpos( $url, 'http' ) === 0 ? true : false;
143 }
144
145 function get_text_from_postId( $postId ) {
146 $post = get_post( $postId );
147 if ( !$post ) {
148 return false;
149 }
150 $post->post_content = apply_filters( 'the_content', $post->post_content );
151 $text = strip_tags( $post->post_content );
152 $text = preg_replace( '/^\h*\v+/m', '', $text );
153 $text = html_entity_decode( $text );
154 return $text;
155 }
156
157 function get_session_id() {
158 if ( !isset( $_SESSION ) ) {
159 error_log("AI Engine: There is no session.");
160 return uniqid();
161 }
162 if ( isset( $_SESSION['mwai_session_id'] ) ) {
163 return $_SESSION['mwai_session_id'];
164 }
165 else {
166 $session_id = uniqid();
167 $_SESSION['mwai_session_id'] = $session_id;
168 return $session_id;
169 }
170 }
171
172 function markdown_to_html( $content ) {
173 $Parsedown = new Parsedown();
174 $content = $Parsedown->text( $content );
175 return $content;
176 }
177 #endregion
178
179 #region Options
180 function get_all_options() {
181 $options = get_option( $this->option_name, null );
182 foreach ( MWAI_OPTIONS as $key => $value ) {
183 if ( !isset( $options[$key] ) ) {
184 $options[$key] = $value;
185 }
186 if ( $key === 'languages' ) {
187 $options[$key] = apply_filters( 'mwai_languages', $options[$key] );
188 }
189 }
190 $options['shortcode_chat_default_params'] = MWAI_CHATBOT_PARAMS;
191 return $options;
192 }
193
194 // Validate and keep the options clean and logical.
195 function sanitize_options() {
196 $options = $this->get_all_options();
197 $needs_update = false;
198
199 // We can sanitize our future options here, let's always remember it.
200 // Now, it is empty...
201
202 if ( $needs_update ) {
203 update_option( $this->option_name, $options, false );
204 }
205 return $options;
206 }
207
208 function update_options( $options ) {
209 if ( !update_option( $this->option_name, $options, false ) ) {
210 return false;
211 }
212 $options = $this->sanitize_options();
213 return $options;
214 }
215
216 function update_option( $option, $value ) {
217 $options = $this->get_all_options();
218 $options[$option] = $value;
219 return $this->update_options( $options );
220 }
221
222 function get_option( $option, $default = null ) {
223 $options = $this->get_all_options();
224 return $options[$option] ?? $default;
225 }
226 #endregion
227 }
228
229 ?>