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