PluginProbe ʕ •ᴥ•ʔ
Kubio AI Page Builder / 2.4.3
Kubio AI Page Builder v2.4.3
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 1 year ago filters 1 year ago api.php 1 year ago index.php 2 years ago utils.php 1 year ago
api.php
741 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 register_rest_route(
121 $namespace,
122 '/ai/get-default-homepage-sections-summaries-by-anchor',
123 array(
124 'methods' => 'POST',
125 'callback' => 'kubio_ai_get_default_homepage_sections_summaries_by_anchor',
126 'permission_callback' => function () {
127 return current_user_can( 'edit_theme_options' );
128 },
129 )
130 );
131 register_rest_route(
132 $namespace,
133 '/ai/update-default-homepage-sections-used-images',
134 array(
135 'methods' => 'POST',
136 'callback' => 'kubio_ai_update_default_homepage_sections_used_images',
137 'permission_callback' => function () {
138 return current_user_can( 'edit_theme_options' );
139 },
140 )
141 );
142 register_rest_route(
143 $namespace,
144 '/ai/get-default-homepage-sections-used-images',
145 array(
146 'methods' => 'POST',
147 'callback' => 'kubio_ai_get_default_homepage_sections_used_images',
148 'permission_callback' => function () {
149 return current_user_can( 'edit_theme_options' );
150 },
151 )
152 );
153 register_rest_route(
154 $namespace,
155 '/ai/generate-section-content',
156 array(
157 'methods' => 'POST',
158 'callback' => 'kubio_ai_get_page_section_content',
159 'permission_callback' => function () {
160 return current_user_can( 'edit_theme_options' );
161 },
162 )
163 );
164
165 register_rest_route(
166 $namespace,
167 '/ai/rephrase-section-content',
168 array(
169 'methods' => 'POST',
170 'callback' => 'kubio_ai_get_rephrase_section_content',
171 'permission_callback' => function () {
172 return current_user_can( 'edit_theme_options' );
173 },
174 )
175 );
176
177 register_rest_route(
178 $namespace,
179 '/ai/search-image',
180 array(
181 'methods' => 'POST',
182 'callback' => 'kubio_ai_search_image',
183 'permission_callback' => function () {
184 return current_user_can( 'edit_theme_options' );
185 },
186 )
187 );
188
189 register_rest_route(
190 $namespace,
191 '/ai/search-video',
192 array(
193 'methods' => 'POST',
194 'callback' => 'kubio_ai_search_video',
195 'permission_callback' => function () {
196 return current_user_can( 'edit_theme_options' );
197 },
198 )
199 );
200
201 register_rest_route(
202 $namespace,
203 '/ai/prompt-to-image',
204 array(
205 'methods' => 'POST',
206 'callback' => 'kubio_ai_prompt_search_image',
207 'permission_callback' => function () {
208 return current_user_can( 'edit_theme_options' );
209 },
210 )
211 );
212
213 register_rest_route(
214 $namespace,
215 '/ai/prompt-to-video',
216 array(
217 'methods' => 'POST',
218 'callback' => 'kubio_ai_prompt_search_video',
219 'permission_callback' => function () {
220 return current_user_can( 'edit_theme_options' );
221 },
222 )
223 );
224
225 register_rest_route(
226 $namespace,
227 '/ai/process-text',
228 array(
229 'methods' => 'POST',
230 'callback' => 'kubio_ai_get_processed_text',
231 'permission_callback' => function () {
232 return current_user_can( 'edit_theme_options' );
233 },
234 )
235 );
236
237 register_rest_route(
238 $namespace,
239 '/ai/summarize-prompt',
240 array(
241 'methods' => 'POST',
242 'callback' => 'kubio_ai_get_summarized_prompt',
243 'permission_callback' => function () {
244 return current_user_can( 'edit_theme_options' );
245 },
246 )
247 );
248
249 register_rest_route(
250 $namespace,
251 '/ai/prompt',
252 array(
253 'methods' => 'POST',
254 'callback' => 'kubio_ai_get_prompt',
255 'permission_callback' => function () {
256 return current_user_can( 'edit_theme_options' );
257 },
258 )
259 );
260
261 register_rest_route(
262 $namespace,
263 '/ai/change-text',
264 array(
265 'methods' => 'POST',
266 'callback' => 'kubio_ai_change_text',
267 'permission_callback' => function () {
268 return current_user_can( 'edit_theme_options' );
269 },
270 )
271 );
272
273 register_rest_route(
274 $namespace,
275 '/commercial-flow',
276 array(
277 'methods' => 'GET',
278 'callback' => 'kubio_get_commercial_flow_settings',
279 'permission_callback' => function () {
280 return current_user_can( 'edit_theme_options' );
281 },
282 )
283 );
284
285 register_rest_route(
286 $namespace,
287 '/remove-auto-start-black-wizard-flag',
288 array(
289 'methods' => 'POST',
290 'callback' => 'kubio_remove_auto_start_black_wizard_onboarding_flag',
291 'permission_callback' => function () {
292 return current_user_can( 'edit_theme_options' );
293 },
294 )
295 );
296
297 register_rest_route(
298 $namespace,
299 '/commercial-flow',
300 array(
301 'methods' => 'POST',
302 'callback' => 'kubio_store_commercial_flow_settings',
303 'permission_callback' => function () {
304 return current_user_can( 'edit_theme_options' );
305 },
306 )
307 );
308
309 }
310 );
311
312
313 function kubio_ai_store_ai_key( $request ) {
314 $key = sanitize_text_field( Arr::get( $request, 'key', '' ) );
315 kubio_ai_set_key( $key );
316
317 return array();
318 }
319
320 function kubio_ai_get_general_settings() {
321 return (object) Flags::get( 'aiSettings', array() );
322 }
323
324
325 function kubio_ai_store_general_settings( WP_REST_Request $request ) {
326 Flags::set( 'aiSettings', $request['settings'] );
327 return true;
328 }
329
330 function kubio_get_commercial_flow_settings() {
331 return (object) Flags::get( 'commercialFlowSettings', array() );
332 }
333
334
335 function kubio_store_commercial_flow_settings( WP_REST_Request $request ) {
336 Flags::set(
337 'commercialFlowSettings',
338 array(
339 'disabled' => $request->get_param( 'disabled' ),
340 )
341 );
342 return true;
343 }
344
345 function kubio_utils_data_add_ai_settings( $data ) {
346 $data['aiSettings'] = kubio_ai_get_general_settings();
347 $data['aiLanguages'] = kubio_ai_content_languages();
348 $data['aiLanguageStyles'] = kubio_ai_content_language_styles();
349 $data['aiBusinessTypes'] = kubio_ai_business_types();
350 $data['aiIsConnected'] = ! ! kubio_ai_get_key();
351
352 return $data;
353 }
354
355 add_filter( 'kubio/kubio-utils-data/extras', 'kubio_utils_data_add_ai_settings' );
356
357
358 function kubio_ai_get_service_info() {
359 return kubio_ai_call_api( 'v1/info' );
360 }
361
362 function kubio_ai_get_service_usage( WP_REST_Request $request ) {
363 return kubio_ai_call_api(
364 'v1/usage',
365 array(),
366 array(
367 'page' => Arr::get( $request, 'page', 1 ),
368 'per_page' => Arr::get( $request, 'perPage', 20 ),
369 'order' => json_encode(
370 array(
371 'field' => 'created_at',
372 'direction' => 'DESC',
373 )
374 ),
375 )
376 );
377 }
378
379 function kubio_ai_get_site_structure( WP_REST_Request $request ) {
380 return kubio_ai_call_api(
381 'v1/generate-site-structure',
382 array(
383 'siteContext' => Arr::get( $request, 'siteContext', array() ),
384 'pageContext' => Arr::get( $request, 'pageContext', array() ),
385 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
386 'theme' => Arr::get( $request, 'theme', null ),
387 'importDesignIndex' => Arr::get( $request, 'importDesignIndex', null ),
388 )
389 );
390 }
391
392
393 function kubio_ai_get_site_mood( WP_REST_Request $request ) {
394 return kubio_ai_call_api(
395 'v1/determine-site-mood',
396 array(
397 'siteContext' => Arr::get( $request, 'siteContext', array() ),
398 'pageContext' => Arr::get( $request, 'pageContext', array() ),
399 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
400 )
401 );
402 }
403
404 function kubio_ai_get_color_scheme( WP_REST_Request $request ) {
405 return kubio_ai_call_api(
406 'v1/generate-color-scheme',
407 array(
408 'siteContext' => Arr::get( $request, 'siteContext', array() ),
409 'pageContext' => Arr::get( $request, 'pageContext', array() ),
410 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
411 'mood' => Arr::get( $request, 'mood', 'neutral' ),
412 'primaryColors' => Arr::get( $request, 'primaryColors', array() ),
413 'remainingRetries' => Arr::get( $request, 'remainingRetries', null ),
414 )
415 );
416 }
417
418
419 function kubio_ai_get_page_structure( WP_REST_Request $request ) {
420 return kubio_ai_call_api(
421 'v1/generate-page-structure',
422 array(
423 'siteContext' => Arr::get( $request, 'siteContext', array() ),
424 'pageContext' => Arr::get( $request, 'pageContext', array() ),
425 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
426 'sections' => Arr::get( $request, 'allowedSections', array() ),
427 'rules' => Arr::get( $request, 'rules', array() ),
428 )
429 );
430 }
431 function kubio_ai_get_default_homepage_sections_summaries_by_anchor( WP_REST_Request $request ) {
432 return kubio_ai_call_api(
433 'v1/get-default-homepage-sections-summaries-by-anchor',
434 array(
435 'siteContext' => Arr::get( $request, 'siteContext', array() ),
436 'pageContext' => Arr::get( $request, 'pageContext', array() ),
437 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
438 'rules' => Arr::get( $request, 'rules', array() ),
439 'theme' => Arr::get( $request, 'theme', null ),
440 'importDesignIndex' => Arr::get( $request, 'importDesignIndex', null ),
441 'colorSchemeAndTypography' => Arr::get( $request, 'colorSchemeAndTypography', null ),
442 )
443 );
444 }
445
446
447 function kubio_ai_get_page_section_content( WP_REST_Request $request ) {
448 return kubio_ai_call_api(
449 'v1/generate-page-section',
450 array(
451 'siteContext' => Arr::get( $request, 'siteContext', array() ),
452 'pageContext' => Arr::get( $request, 'pageContext', array() ),
453 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
454
455 'structure' => Arr::get( $request, 'structure', array() ),
456 'category' => Arr::get( $request, 'category', 'section' ),
457 'summary' => Arr::get( $request, 'summary', '' ),
458 'rules' => Arr::get( $request, 'rules', array() ),
459
460 'sectionParams' => Arr::get( $request, 'sectionParams', array() ),
461 )
462 );
463 }
464
465 function kubio_ai_get_default_homepage_sections_used_images( WP_REST_Request $request ) {
466 return kubio_ai_call_api(
467 'v1/get-default-homepage-sections-used-images',
468 array(
469 'siteContext' => Arr::get( $request, 'siteContext', array() ),
470 'theme' => Arr::get( $request, 'theme', null ),
471 'importDesignIndex' => Arr::get( $request, 'importDesignIndex', null ),
472 )
473 );
474 }
475 function kubio_ai_update_default_homepage_sections_used_images( WP_REST_Request $request ) {
476 return kubio_ai_call_api(
477 'v1/update-default-homepage-sections-used-images',
478 array(
479 'siteContext' => Arr::get( $request, 'siteContext', array() ),
480 'theme' => Arr::get( $request, 'theme', null ),
481 'importDesignIndex' => Arr::get( $request, 'importDesignIndex', null ),
482 'content' => Arr::get( $request, 'content', null ),
483 )
484 );
485 }
486
487
488 function kubio_ai_get_rephrase_section_content( WP_REST_Request $request ) {
489 return kubio_ai_call_api(
490 'v1/rephrase-page-section',
491 array(
492 'siteContext' => Arr::get( $request, 'siteContext', array() ),
493 'pageContext' => Arr::get( $request, 'pageContext', array() ),
494 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
495
496 'structure' => Arr::get( $request, 'structure', array() ),
497 'category' => Arr::get( $request, 'category', 'section' ),
498 'summary' => Arr::get( $request, 'summary', '' ),
499 'rules' => Arr::get( $request, 'rules', array() ),
500
501 'sectionParams' => Arr::get( $request, 'sectionParams', array() ),
502 )
503 );
504 }
505
506
507
508
509 function kubio_ai_search_image( WP_REST_Request $request ) {
510 $dimensions = array();
511
512 if ( Arr::get( $request, 'initialImage', '' ) ) {
513 // original
514 $dimensions = kubio_ai_get_original_image_dimensions( Arr::get( $request, 'initialImage', '' ) );
515 } else {
516 $width = Arr::get( $request, 'width', null );
517 $height = Arr::get( $request, 'height', null );
518
519 if ( $width ) {
520 $dimensions['width'] = $width;
521 }
522
523 if ( $height ) {
524 $dimensions['height'] = $height;
525 }
526 }
527
528 $orientation = Arr::get( $request, 'orientation', null );
529 if ( $orientation ) {
530 $dimensions['orientation'] = $orientation;
531 }
532
533 return kubio_ai_call_api(
534 'v1/search-media',
535 array_merge(
536 $dimensions,
537 array(
538 'type' => 'image',
539 'search' => kubio_shuffle_terms( Arr::get( $request, 'search', '' ) ),
540 'per_page' => Arr::get( $request, 'perPage', 10 ),
541 'page' => Arr::get( $request, 'page', 1 ),
542 'color' => Arr::get( $request, 'color', null ),
543 'media_attrs' => Arr::get( $request, 'mediaAttrs', null ),
544 'skip_orientation' => Arr::get( $request, 'skipOrientation', null ),
545 'crop' => Arr::get( $request, 'crop', null ),
546 )
547 )
548 );
549 }
550
551 function kubio_shuffle_terms( $str ) {
552 // use this to generate more different images between calls
553 $terms = explode( ',', $str );
554 if ( is_array( $terms ) ) {
555 shuffle( $terms );
556 return implode( ',', $terms );
557 }
558
559 return $str;
560 }
561
562 function kubio_ai_search_video( WP_REST_Request $request ) {
563
564 return kubio_ai_call_api(
565 'v1/search-media',
566 array(
567 'type' => 'video',
568 'search' => Arr::get( $request, 'search', '' ),
569 'per_page' => Arr::get( $request, 'perPage', 10 ),
570 'page' => Arr::get( $request, 'page', 1 ),
571 'media_attrs' => Arr::get( $request, 'mediaAttrs', null ),
572 )
573 );
574 }
575
576 function kubio_ai_prompt_search_image( WP_REST_Request $request ) {
577 $dimensions = kubio_ai_get_original_image_dimensions( Arr::get( $request, 'initialImage', '' ) );
578 return kubio_ai_call_api(
579 'v1/prompt-search-media',
580 array_merge(
581 $dimensions,
582 array(
583 'type' => 'image',
584 'prompt' => Arr::get( $request, 'prompt', '' ),
585 'per_page' => Arr::get( $request, 'perPage', 10 ),
586 'page' => Arr::get( $request, 'page', 1 ),
587 'media_attrs' => Arr::get( $request, 'mediaAttrs', null ),
588 )
589 )
590 );
591 }
592
593 function kubio_ai_prompt_search_video( WP_REST_Request $request ) {
594 return kubio_ai_call_api(
595 'v1/prompt-search-media',
596 array(
597 'type' => 'video',
598 'prompt' => Arr::get( $request, 'prompt', '' ),
599 'per_page' => Arr::get( $request, 'perPage', 10 ),
600 'page' => Arr::get( $request, 'page', 1 ),
601 'media_attrs' => Arr::get( $request, 'mediaAttrs', null ),
602 )
603 );
604 }
605
606 // ---------------
607
608
609
610 function kubio_ai_get_processed_text( WP_REST_Request $request ) {
611
612 return kubio_ai_call_api(
613 'v1/process-text',
614 array(
615 'siteContext' => Arr::get( $request, 'siteContext', array() ),
616 'pageContext' => Arr::get( $request, 'pageContext', array() ),
617 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
618 'action' => Arr::get( $request, 'action', '' ),
619 'content' => Arr::get( $request, 'content', '' ),
620 'extras' => Arr::get( $request, 'extras', '' ),
621
622 )
623 );
624
625 }
626
627
628
629 function kubio_ai_get_summarized_prompt( WP_REST_Request $request ) {
630 return kubio_ai_call_api(
631 'v1/process-text',
632 array(
633 'siteContext' => Arr::get( $request, 'siteContext', array() ),
634 'pageContext' => Arr::get( $request, 'pageContext', array() ),
635 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
636 'action' => 'summarize',
637 'content' => Arr::get( $request, 'prompt', '' ),
638 )
639 );
640 }
641 function kubio_ai_get_prompt( WP_REST_Request $request ) {
642 return kubio_ai_call_api(
643 'v1/process-text',
644 array(
645 'siteContext' => Arr::get( $request, 'siteContext', array() ),
646 'pageContext' => Arr::get( $request, 'pageContext', array() ),
647 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
648 'action' => 'prompt',
649 'prompt' => Arr::get( $request, 'prompt', '' ),
650 'original' => Arr::get( $request, 'originalContent', '' ),
651 'short' => Arr::get( $request, 'short', false ),
652 'type' => Arr::get( $request, 'type', 'text' ),
653 )
654 );
655 }
656
657
658 function kubio_ai_change_text( WP_REST_Request $request ) {
659
660 return kubio_ai_call_api(
661 'v1/process-text',
662 array(
663 'siteContext' => Arr::get( $request, 'siteContext', array() ),
664 'pageContext' => Arr::get( $request, 'pageContext', array() ),
665 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
666 'action' => Arr::get( $request, 'type', 'tone' ),
667 'to' => Arr::get( $request, 'promptData', '' ),
668 'content' => Arr::get( $request, 'text', '' ),
669 )
670 );
671
672 }
673
674 function kubio_ai_sd_image_from_text( WP_REST_Request $request ) {
675
676 $image_size = Arr::get( $request, 'imageSize', array( 1024, 1024 ) );
677 list($width,$height) = kubio_ai_sd_xl_determine_appropriate_size( ...$image_size );
678
679 $response = kubio_ai_call_api(
680 'v1/image-generation/text-to-image',
681 array(
682 'steps' => 40,
683 'width' => 512,
684 'height' => 512,
685 'seed' => 0,
686 'cfg_scale' => 5,
687 'samples' => 1,
688 'style_preset' => 'photographic',
689 'text_prompts' => array(
690 array(
691 'text' => Arr::get( $request, 'prompt', '' ),
692 'weight' => 1,
693 ),
694 array(
695 'text' => 'blurry, bad',
696 'weight' => -1,
697 ),
698 ),
699 'width' => $width,
700 'height' => $height,
701 )
702 );
703
704 if ( is_wp_error( $response ) ) {
705 return $response;
706 }
707
708 $artifacts = Arr::get( $response, 'artifacts', array() );
709
710 if ( ! count( $artifacts ) ) {
711 return new \WP_Error(
712 'error_no_image_generate',
713 __( 'No image was generated', 'kubio' )
714 );
715 }
716
717 $images = array();
718 $errors = array();
719 foreach ( $artifacts as $image ) {
720 $filename = wp_generate_uuid4() . '.jpg';
721 $upload = Importer::base64ToImage( $filename, $image['base64'] );
722 if ( is_wp_error( $upload ) ) {
723 $errors[] = $upload;
724 } else {
725 $images[] = $upload;
726 }
727 }
728
729 if ( ! empty( $errors ) ) {
730 return $errors[0];
731 }
732
733 return $images[0]['url'];
734 }
735
736
737 function kubio_remove_auto_start_black_wizard_onboarding_flag() {
738 delete_option( '_kubio_auto_start_black_wizard_onboarding' );
739 return true;
740 }
741