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