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