PluginProbe ʕ •ᴥ•ʔ
Kubio AI Page Builder / 2.2.0
Kubio AI Page Builder v2.2.0
2.8.5 2.8.4 2.8.3 2.8.2 2.8.1 trunk 1.0.0 1.0.1 1.1.0 1.2.0 1.2.1 1.2.2 1.2.3 1.3.0 1.3.1 1.3.2 1.4.0 1.4.1 1.4.2 1.4.3 1.5.0 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.7.3 1.8.0 1.8.1 1.8.2 1.9.0 2.0.0 2.1.1 2.1.2 2.1.3 2.2.0 2.2.3 2.2.4 2.2.5 2.3.0 2.3.1 2.3.3 2.3.4 2.4.0 2.4.1 2.4.2 2.4.3 2.4.5 2.5.0 2.5.1 2.5.2 2.5.3 2.6.0 2.6.1 2.6.2 2.6.3 2.6.5 2.6.6 2.6.7 2.7.0 2.7.1 2.7.2 2.7.3 2.8.0
kubio / lib / AI / api.php
kubio / lib / AI Last commit date
SDApi 2 years ago admin-tab 2 years ago filters 2 years ago api.php 2 years ago index.php 2 years ago utils.php 2 years ago
api.php
647 lines
1 <?php
2
3 use IlluminateAgnostic\Arr\Support\Arr;
4 use Kubio\Core\Importer;
5 use Kubio\Flags;
6
7
8 add_action(
9 'rest_api_init',
10 function () {
11 $namespace = 'kubio/v1';
12
13 register_rest_route(
14 $namespace,
15 '/ai/info',
16 array(
17 'methods' => 'POST',
18 'callback' => 'kubio_ai_get_service_info',
19 'permission_callback' => function () {
20 return current_user_can( 'edit_theme_options' );
21 },
22 )
23 );
24
25 register_rest_route(
26 $namespace,
27 '/ai/usage',
28 array(
29 'methods' => 'POST',
30 'callback' => 'kubio_ai_get_service_usage',
31 'permission_callback' => function () {
32 return current_user_can( 'edit_theme_options' );
33 },
34 )
35 );
36
37 register_rest_route(
38 $namespace,
39 '/ai/set-ai-key',
40 array(
41 'methods' => 'POST',
42 'callback' => 'kubio_ai_store_ai_key',
43 'permission_callback' => function () {
44 return current_user_can( 'edit_theme_options' );
45 },
46 )
47 );
48
49 register_rest_route(
50 $namespace,
51 '/ai/settings',
52 array(
53 'methods' => 'GET',
54 'callback' => 'kubio_ai_get_general_settings',
55 'permission_callback' => function () {
56 return current_user_can( 'edit_theme_options' );
57 },
58 )
59 );
60
61 register_rest_route(
62 $namespace,
63 '/ai/settings',
64 array(
65 'methods' => 'POST',
66 'callback' => 'kubio_ai_store_general_settings',
67 'permission_callback' => function () {
68 return current_user_can( 'edit_theme_options' );
69 },
70 )
71 );
72
73 register_rest_route(
74 $namespace,
75 '/ai/generate-site-structure',
76 array(
77 'methods' => 'POST',
78 'callback' => 'kubio_ai_get_site_structure',
79 'permission_callback' => function () {
80 return current_user_can( 'edit_theme_options' );
81 },
82 )
83 );
84
85 register_rest_route(
86 $namespace,
87 '/ai/determine-site-mood',
88 array(
89 'methods' => 'POST',
90 'callback' => 'kubio_ai_get_site_mood',
91 'permission_callback' => function () {
92 return current_user_can( 'edit_theme_options' );
93 },
94 )
95 );
96
97 register_rest_route(
98 $namespace,
99 '/ai/generate-color-scheme',
100 array(
101 'methods' => 'POST',
102 'callback' => 'kubio_ai_get_color_scheme',
103 'permission_callback' => function () {
104 return current_user_can( 'edit_theme_options' );
105 },
106 )
107 );
108
109 register_rest_route(
110 $namespace,
111 '/ai/generate-page-structure',
112 array(
113 'methods' => 'POST',
114 'callback' => 'kubio_ai_get_page_structure',
115 'permission_callback' => function () {
116 return current_user_can( 'edit_theme_options' );
117 },
118 )
119 );
120
121 register_rest_route(
122 $namespace,
123 '/ai/generate-section-content',
124 array(
125 'methods' => 'POST',
126 'callback' => 'kubio_ai_get_page_section_content',
127 'permission_callback' => function () {
128 return current_user_can( 'edit_theme_options' );
129 },
130 )
131 );
132
133 register_rest_route(
134 $namespace,
135 '/ai/rephrase-section-content',
136 array(
137 'methods' => 'POST',
138 'callback' => 'kubio_ai_get_rephrase_section_content',
139 'permission_callback' => function () {
140 return current_user_can( 'edit_theme_options' );
141 },
142 )
143 );
144
145 register_rest_route(
146 $namespace,
147 '/ai/search-image',
148 array(
149 'methods' => 'POST',
150 'callback' => 'kubio_ai_search_image',
151 'permission_callback' => function () {
152 return current_user_can( 'edit_theme_options' );
153 },
154 )
155 );
156
157 register_rest_route(
158 $namespace,
159 '/ai/search-video',
160 array(
161 'methods' => 'POST',
162 'callback' => 'kubio_ai_search_video',
163 'permission_callback' => function () {
164 return current_user_can( 'edit_theme_options' );
165 },
166 )
167 );
168
169 register_rest_route(
170 $namespace,
171 '/ai/prompt-to-image',
172 array(
173 'methods' => 'POST',
174 'callback' => 'kubio_ai_prompt_search_image',
175 'permission_callback' => function () {
176 return current_user_can( 'edit_theme_options' );
177 },
178 )
179 );
180
181 register_rest_route(
182 $namespace,
183 '/ai/prompt-to-video',
184 array(
185 'methods' => 'POST',
186 'callback' => 'kubio_ai_prompt_search_video',
187 'permission_callback' => function () {
188 return current_user_can( 'edit_theme_options' );
189 },
190 )
191 );
192
193 register_rest_route(
194 $namespace,
195 '/ai/process-text',
196 array(
197 'methods' => 'POST',
198 'callback' => 'kubio_ai_get_processed_text',
199 'permission_callback' => function () {
200 return current_user_can( 'edit_theme_options' );
201 },
202 )
203 );
204
205 register_rest_route(
206 $namespace,
207 '/ai/summarize-prompt',
208 array(
209 'methods' => 'POST',
210 'callback' => 'kubio_ai_get_summarized_prompt',
211 'permission_callback' => function () {
212 return current_user_can( 'edit_theme_options' );
213 },
214 )
215 );
216
217 register_rest_route(
218 $namespace,
219 '/ai/prompt',
220 array(
221 'methods' => 'POST',
222 'callback' => 'kubio_ai_get_prompt',
223 'permission_callback' => function () {
224 return current_user_can( 'edit_theme_options' );
225 },
226 )
227 );
228
229 register_rest_route(
230 $namespace,
231 '/ai/change-text',
232 array(
233 'methods' => 'POST',
234 'callback' => 'kubio_ai_change_text',
235 'permission_callback' => function () {
236 return current_user_can( 'edit_theme_options' );
237 },
238 )
239 );
240
241 register_rest_route(
242 $namespace,
243 '/commercial-flow',
244 array(
245 'methods' => 'GET',
246 'callback' => 'kubio_get_commercial_flow_settings',
247 'permission_callback' => function () {
248 return current_user_can( 'edit_theme_options' );
249 },
250 )
251 );
252
253 register_rest_route(
254 $namespace,
255 '/commercial-flow',
256 array(
257 'methods' => 'POST',
258 'callback' => 'kubio_store_commercial_flow_settings',
259 'permission_callback' => function () {
260 return current_user_can( 'edit_theme_options' );
261 },
262 )
263 );
264
265 }
266 );
267
268
269 function kubio_ai_store_ai_key( $request ) {
270 $key = sanitize_text_field( Arr::get( $request, 'key', '' ) );
271 kubio_ai_set_key( $key );
272
273 return array();
274 }
275
276 function kubio_ai_get_general_settings() {
277 return (object) Flags::get( 'aiSettings', array() );
278 }
279
280
281 function kubio_ai_store_general_settings( WP_REST_Request $request ) {
282 Flags::set( 'aiSettings', $request['settings'] );
283 return true;
284 }
285
286 function kubio_get_commercial_flow_settings() {
287 return (object) Flags::get( 'commercialFlowSettings', array() );
288 }
289
290
291 function kubio_store_commercial_flow_settings(WP_REST_Request $request){
292 Flags::set('commercialFlowSettings',
293 array(
294 'disabled' => $request->get_param('disabled'))
295 );
296 return true;
297 }
298
299 function kubio_utils_data_add_ai_settings( $data ) {
300 $data['aiSettings'] = kubio_ai_get_general_settings();
301 $data['aiLanguages'] = kubio_ai_content_languages();
302 $data['aiLanguageStyles'] = kubio_ai_content_language_styles();
303 $data['aiBusinessTypes'] = kubio_ai_business_types();
304 $data['aiIsConnected'] = ! ! kubio_ai_get_key();
305
306 return $data;
307 }
308
309 add_filter( 'kubio/kubio-utils-data/extras', 'kubio_utils_data_add_ai_settings' );
310
311
312 function kubio_ai_get_service_info() {
313 return kubio_ai_call_api( 'v1/info' );
314 }
315
316 function kubio_ai_get_service_usage( WP_REST_Request $request ) {
317 return kubio_ai_call_api(
318 'v1/usage',
319 array(),
320 array(
321 'page' => Arr::get( $request, 'page', 1 ),
322 'per_page' => Arr::get( $request, 'perPage', 20 ),
323 'order' => json_encode(
324 array(
325 'field' => 'created_at',
326 'direction' => 'DESC',
327 )
328 ),
329 )
330 );
331 }
332
333 function kubio_ai_get_site_structure( WP_REST_Request $request ) {
334 return kubio_ai_call_api(
335 'v1/generate-site-structure',
336 array(
337 'siteContext' => Arr::get( $request, 'siteContext', array() ),
338 'pageContext' => Arr::get( $request, 'pageContext', array() ),
339 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
340 )
341 );
342 }
343
344
345 function kubio_ai_get_site_mood( WP_REST_Request $request ) {
346 return kubio_ai_call_api(
347 'v1/determine-site-mood',
348 array(
349 'siteContext' => Arr::get( $request, 'siteContext', array() ),
350 'pageContext' => Arr::get( $request, 'pageContext', array() ),
351 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
352 )
353 );
354 }
355
356 function kubio_ai_get_color_scheme( WP_REST_Request $request ) {
357 return kubio_ai_call_api(
358 'v1/generate-color-scheme',
359 array(
360 'siteContext' => Arr::get( $request, 'siteContext', array() ),
361 'pageContext' => Arr::get( $request, 'pageContext', array() ),
362 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
363 'mood' => Arr::get( $request, 'mood', 'neutral' ),
364 'primaryColors' => Arr::get( $request, 'primaryColors', array() ),
365 'remainingRetries' => Arr::get( $request, 'remainingRetries', null ),
366 )
367 );
368 }
369
370
371 function kubio_ai_get_page_structure( WP_REST_Request $request ) {
372 return kubio_ai_call_api(
373 'v1/generate-page-structure',
374 array(
375 'siteContext' => Arr::get( $request, 'siteContext', array() ),
376 'pageContext' => Arr::get( $request, 'pageContext', array() ),
377 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
378 'sections' => Arr::get( $request, 'allowedSections', array() ),
379 'rules' => Arr::get( $request, 'rules', array() ),
380 )
381 );
382 }
383
384 function kubio_ai_get_page_section_content( WP_REST_Request $request ) {
385 return kubio_ai_call_api(
386 'v1/generate-page-section',
387 array(
388 'siteContext' => Arr::get( $request, 'siteContext', array() ),
389 'pageContext' => Arr::get( $request, 'pageContext', array() ),
390 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
391
392 'structure' => Arr::get( $request, 'structure', array() ),
393 'category' => Arr::get( $request, 'category', 'section' ),
394 'summary' => Arr::get( $request, 'summary', '' ),
395 'rules' => Arr::get( $request, 'rules', array() ),
396 )
397 );
398 }
399
400 function kubio_ai_get_rephrase_section_content( WP_REST_Request $request ) {
401 return kubio_ai_call_api(
402 'v1/rephrase-page-section',
403 array(
404 'siteContext' => Arr::get( $request, 'siteContext', array() ),
405 'pageContext' => Arr::get( $request, 'pageContext', array() ),
406 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
407
408 'structure' => Arr::get( $request, 'structure', array() ),
409 'category' => Arr::get( $request, 'category', 'section' ),
410 'summary' => Arr::get( $request, 'summary', '' ),
411 'rules' => Arr::get( $request, 'rules', array() ),
412 )
413 );
414 }
415
416
417
418
419 function kubio_ai_search_image( WP_REST_Request $request ) {
420 $dimensions = array();
421
422 if ( Arr::get( $request, 'initialImage', '' ) ) {
423 // original
424 $dimensions = kubio_ai_get_original_image_dimensions( Arr::get( $request, 'initialImage', '' ) );
425 } else {
426 $width = Arr::get( $request, 'width', null );
427 $height = Arr::get( $request, 'height', null );
428
429 if ( $width ) {
430 $dimensions['width'] = $width;
431 }
432
433 if ( $height ) {
434 $dimensions['height'] = $height;
435 }
436 }
437
438 $orientation = Arr::get( $request, 'orientation', null );
439 if ( $orientation ) {
440 $dimensions['orientation'] = $orientation;
441 }
442
443 return kubio_ai_call_api(
444 'v1/search-media',
445 array_merge(
446 $dimensions,
447 array(
448 'type' => 'image',
449 'search' => kubio_shuffle_terms( Arr::get( $request, 'search', '' ) ),
450 'per_page' => Arr::get( $request, 'perPage', 10 ),
451 'page' => Arr::get( $request, 'page', 1 ),
452 'color' => Arr::get( $request, 'color', null ),
453 'media_attrs' => Arr::get( $request, 'mediaAttrs', null ),
454 'skip_orientation' => Arr::get( $request, 'skipOrientation', null ),
455 'crop' => Arr::get( $request, 'crop', null ),
456 )
457 )
458 );
459 }
460
461 function kubio_shuffle_terms( $str ) {
462 // use this to generate more different images between calls
463 $terms = explode( ',', $str );
464 if ( is_array( $terms ) ) {
465 shuffle( $terms );
466 return implode( ',', $terms );
467 }
468
469 return $str;
470 }
471
472 function kubio_ai_search_video( WP_REST_Request $request ) {
473
474 return kubio_ai_call_api(
475 'v1/search-media',
476 array(
477 'type' => 'video',
478 'search' => Arr::get( $request, 'search', '' ),
479 'per_page' => Arr::get( $request, 'perPage', 10 ),
480 'page' => Arr::get( $request, 'page', 1 ),
481 'media_attrs' => Arr::get( $request, 'mediaAttrs', null ),
482 )
483 );
484 }
485
486 function kubio_ai_prompt_search_image( WP_REST_Request $request ) {
487 $dimensions = kubio_ai_get_original_image_dimensions( Arr::get( $request, 'initialImage', '' ) );
488 return kubio_ai_call_api(
489 'v1/prompt-search-media',
490 array_merge(
491 $dimensions,
492 array(
493 'type' => 'image',
494 'prompt' => Arr::get( $request, 'prompt', '' ),
495 'per_page' => Arr::get( $request, 'perPage', 10 ),
496 'page' => Arr::get( $request, 'page', 1 ),
497 'media_attrs' => Arr::get( $request, 'mediaAttrs', null ),
498 )
499 )
500 );
501 }
502
503 function kubio_ai_prompt_search_video( WP_REST_Request $request ) {
504 return kubio_ai_call_api(
505 'v1/prompt-search-media',
506 array(
507 'type' => 'video',
508 'prompt' => Arr::get( $request, 'prompt', '' ),
509 'per_page' => Arr::get( $request, 'perPage', 10 ),
510 'page' => Arr::get( $request, 'page', 1 ),
511 'media_attrs' => Arr::get( $request, 'mediaAttrs', null ),
512 )
513 );
514 }
515
516 // ---------------
517
518
519
520 function kubio_ai_get_processed_text( WP_REST_Request $request ) {
521
522 return kubio_ai_call_api(
523 'v1/process-text',
524 array(
525 'siteContext' => Arr::get( $request, 'siteContext', array() ),
526 'pageContext' => Arr::get( $request, 'pageContext', array() ),
527 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
528 'action' => Arr::get( $request, 'action', '' ),
529 'content' => Arr::get( $request, 'content', '' ),
530 'extras' => Arr::get( $request, 'extras', '' ),
531
532 )
533 );
534
535 }
536
537
538
539 function kubio_ai_get_summarized_prompt( WP_REST_Request $request ) {
540 return kubio_ai_call_api(
541 'v1/process-text',
542 array(
543 'siteContext' => Arr::get( $request, 'siteContext', array() ),
544 'pageContext' => Arr::get( $request, 'pageContext', array() ),
545 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
546 'action' => 'summarize',
547 'content' => Arr::get( $request, 'prompt', '' ),
548 )
549 );
550 }
551 function kubio_ai_get_prompt( WP_REST_Request $request ) {
552 return kubio_ai_call_api(
553 'v1/process-text',
554 array(
555 'siteContext' => Arr::get( $request, 'siteContext', array() ),
556 'pageContext' => Arr::get( $request, 'pageContext', array() ),
557 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
558 'action' => 'prompt',
559 'prompt' => Arr::get( $request, 'prompt', '' ),
560 'original' => Arr::get( $request, 'originalContent', '' ),
561 'short' => Arr::get( $request, 'short', false ),
562 'type' => Arr::get( $request, 'type', 'text' ),
563 )
564 );
565 }
566
567
568 function kubio_ai_change_text( WP_REST_Request $request ) {
569
570 return kubio_ai_call_api(
571 'v1/process-text',
572 array(
573 'siteContext' => Arr::get( $request, 'siteContext', array() ),
574 'pageContext' => Arr::get( $request, 'pageContext', array() ),
575 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
576 'action' => Arr::get( $request, 'type', 'tone' ),
577 'to' => Arr::get( $request, 'promptData', '' ),
578 'content' => Arr::get( $request, 'text', '' ),
579 )
580 );
581
582 }
583
584 function kubio_ai_sd_image_from_text( WP_REST_Request $request ) {
585
586 $image_size = Arr::get( $request, 'imageSize', array( 1024, 1024 ) );
587 list($width,$height) = kubio_ai_sd_xl_determine_appropriate_size( ...$image_size );
588
589 $response = kubio_ai_call_api(
590 'v1/image-generation/text-to-image',
591 array(
592 'steps' => 40,
593 'width' => 512,
594 'height' => 512,
595 'seed' => 0,
596 'cfg_scale' => 5,
597 'samples' => 1,
598 'style_preset' => 'photographic',
599 'text_prompts' => array(
600 array(
601 'text' => Arr::get( $request, 'prompt', '' ),
602 'weight' => 1,
603 ),
604 array(
605 'text' => 'blurry, bad',
606 'weight' => -1,
607 ),
608 ),
609 'width' => $width,
610 'height' => $height,
611 )
612 );
613
614 if ( is_wp_error( $response ) ) {
615 return $response;
616 }
617
618 $artifacts = Arr::get( $response, 'artifacts', array() );
619
620 if ( ! count( $artifacts ) ) {
621 return new \WP_Error(
622 'error_no_image_generate',
623 __( 'No image was generated', 'kubio' )
624 );
625 }
626
627 $images = array();
628 $errors = array();
629 foreach ( $artifacts as $image ) {
630 $filename = wp_generate_uuid4() . '.jpg';
631 $upload = Importer::base64ToImage( $filename, $image['base64'] );
632 if ( is_wp_error( $upload ) ) {
633 $errors[] = $upload;
634 } else {
635 $images[] = $upload;
636 }
637 }
638
639 if ( ! empty( $errors ) ) {
640 return $errors[0];
641 }
642
643 return $images[0]['url'];
644 }
645
646
647