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