PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 0.5.6
AI Engine – The Chatbot, AI Framework & MCP for WordPress v0.5.6
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 'avatar' => null,
44 'avatar_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_blocks' => false,
75 'module_statistics' => false,
76 'shortcode_chat' => true,
77 'shortcode_chat_params' => MWAI_CHATBOT_PARAMS,
78 'shortcode_chat_params_override' => false,
79 'shortcode_chat_html' => true,
80 'shortcode_chat_formatting' => true,
81 'shortcode_chat_syntax_highlighting' => false,
82 'shortcode_chat_inject' => false,
83 'openai_apikey' => false,
84 'openai_usage' => [],
85 'openai_finetunes' => [],
86 'openai_finetunes_deleted' => [],
87 'extra_models' => "",
88 'languages' => MWAI_LANGUAGES
89 ]);
90 #endregion
91
92 class Meow_MWAI_Core
93 {
94 public $admin = null;
95 public $is_rest = false;
96 public $is_cli = false;
97 public $site_url = null;
98 public $ai = null;
99 private $option_name = 'mwai_options';
100 public $defaultChatbotParams = MWAI_CHATBOT_PARAMS;
101
102 public function __construct() {
103 $this->site_url = get_site_url();
104 $this->is_rest = MeowCommon_Helpers::is_rest();
105 $this->is_cli = defined( 'WP_CLI' ) && WP_CLI;
106 $this->ai = new Meow_MWAI_AI( $this );
107 add_action( 'plugins_loaded', array( $this, 'init' ) );
108 }
109
110 function init() {
111 if ( $this->is_rest ) {
112 new Meow_MWAI_Rest( $this );
113 }
114 if ( is_admin() ) {
115 new Meow_MWAI_Admin( $this );
116 }
117 else {
118 new Meow_MWAI_UI( $this );
119 if ( $this->get_option( 'shortcode_chat' ) ) {
120 new Meow_MWAI_Modules_Chatbot();
121 }
122 }
123
124 // Advanced core
125 if ( class_exists( 'MeowPro_MWAI_Core' ) ) {
126 new MeowPro_MWAI_Core( $this );
127 }
128
129 if ( session_status() == PHP_SESSION_NONE ) {
130 session_start( ['read_and_close' => true] );
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 return apply_filters( 'mwai_allow_usage', current_user_can( 'administrator' ) );
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 ?>