PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 0.3.5
AI Engine – The Chatbot, AI Framework & MCP for WordPress v0.3.5
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
209 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 markdown_to_html( $content ) {
154 $Parsedown = new Parsedown();
155 $content = $Parsedown->text( $content );
156 return $content;
157 }
158 #endregion
159
160 #region Options
161 function get_all_options() {
162 $options = get_option( $this->option_name, null );
163 foreach ( MWAI_OPTIONS as $key => $value ) {
164 if ( !isset( $options[$key] ) ) {
165 $options[$key] = $value;
166 }
167 if ( $key === 'languages' ) {
168 $options[$key] = apply_filters( 'mwai_languages', $options[$key] );
169 }
170 }
171 return $options;
172 }
173
174 // Validate and keep the options clean and logical.
175 function sanitize_options() {
176 $options = $this->get_all_options();
177 $needs_update = false;
178
179 // We can sanitize our future options here, let's always remember it.
180 // Now, it is empty...
181
182 if ( $needs_update ) {
183 update_option( $this->option_name, $options, false );
184 }
185 return $options;
186 }
187
188 function update_options( $options ) {
189 if ( !update_option( $this->option_name, $options, false ) ) {
190 return false;
191 }
192 $options = $this->sanitize_options();
193 return $options;
194 }
195
196 function update_option( $option, $value ) {
197 $options = $this->get_all_options();
198 $options[$option] = $value;
199 return $this->update_options( $options );
200 }
201
202 function get_option( $option, $default = null ) {
203 $options = $this->get_all_options();
204 return $options[$option] ?? $default;
205 }
206 #endregion
207 }
208
209 ?>