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