X7ROOT File Manager
Current Path:
/home/gfecatvj/4abetter.us/wp-content/plugins/kubio/lib/AI
home
/
gfecatvj
/
4abetter.us
/
wp-content
/
plugins
/
kubio
/
lib
/
AI
/
📁
..
📁
Blog
📄
PostImage.php
(1.69 KB)
📁
SDApi
📁
Shop
📁
admin-tab
📄
api.php
(29.51 KB)
📁
filters
📄
index.php
(1.19 KB)
📄
utils.php
(15.33 KB)
Editing: utils.php
<?php use IlluminateAgnostic\Arr\Support\Arr; use Kubio\Core\LodashBasic; use Kubio\Core\Utils; use Kubio\FileLog; use Kubio\Flags; function kubio_ai_content_languages() { return array( 'ar_AR' => 'العربية (Arabic)', 'az_AZ' => 'Azərbaycan dili (Azerbaijani)', 'bn_BD' => 'বাংলা (Bengali)', 'cs_CZ' => 'Čeština (Czech)', 'cy_GB' => 'Cymraeg (Welsh)', 'da_DK' => 'Dansk (Danish)', 'de_DE' => 'Deutsch (German)', 'el_GR' => 'Ελληνικά (Greek)', 'en_US' => 'English US', 'en_GB' => 'English GB (United Kingdom English)', 'en_AU' => 'English AU (Australian English)', 'en_CA' => 'English CA (Canadian English)', 'es_ES' => 'Español (Spanish)', 'es_MX' => 'Español MX (Mexican Spanish)', 'et_EE' => 'Eesti keel (Estonian)', 'fa_IR' => 'فارسی (Persian)', 'fi_FI' => 'Suomi (Finnish)', 'fr_FR' => 'Français (French)', 'fr_CA' => 'Français CA (Canadian French)', 'ga_IE' => 'Gaeilge (Irish)', 'he_IL' => 'עברית (Hebrew)', 'hi_IN' => 'हिन्दी (Hindi)', 'hr_HR' => 'Hrvatski (Croatian)', 'hu_HU' => 'Magyar (Hungarian)', 'hy_AM' => 'Հայերեն (Armenian)', 'id_ID' => 'Bahasa Indonesia (Indonesian)', 'is_IS' => 'Íslenska (Icelandic)', 'it_IT' => 'Italiano (Italian)', 'ja_JP' => '日本語 (Japanese)', 'ka_GE' => 'ქართული (Georgian)', 'kk_KZ' => 'Қазақ тілі (Kazakh)', 'ko_KR' => '한국어 (Korean)', 'lt_LT' => 'Lietuvių kalba (Lithuanian)', 'lv_LV' => 'Latviešu valoda (Latvian)', 'ms_MY' => 'Bahasa Melayu (Malay)', 'nb_NO' => 'Norsk bokmål (Norwegian Bokmål)', 'nl_NL' => 'Nederlands (Dutch)', 'pl_PL' => 'Polski (Polish)', 'pt_PT' => 'Português (Portuguese)', 'pt_BR' => 'Português BR (Portuguese Brasil)', 'ro_RO' => 'Română (Romanian)', 'ru_RU' => 'Русский (Russian)', 'sk_SK' => 'Slovenčina (Slovak)', 'sl_SI' => 'Slovenščina (Slovenian)', 'sq_AL' => 'Shqip (Albanian)', 'sr_RS' => 'Српски (Serbian)', 'sv_SE' => 'Svenska (Swedish)', 'ta_IN' => 'தமிழ் (Tamil)', 'th_TH' => 'ไทย (Thai)', 'tr_TR' => 'Türkçe (Turkish)', 'uk_UA' => 'Українська (Ukrainian)', 'ur_PK' => 'اردو (Urdu)', 'vi_VN' => 'Tiếng Việt (Vietnamese)', 'zh_CN' => '中文 (Chinese Simplified)', 'zh_TW' => '中文 (Chinese Traditional)', ); } function kubio_ai_content_language_styles() { return array( 'natural' => array( 'label' => __( 'Natural', 'kubio' ), 'description' => __( 'Is the default language style. It can adapt to some extent depending on the cues from the user\'s input.', 'kubio' ), ), 'formal' => array( 'label' => __( 'Formal', 'kubio' ), 'description' => __( 'Used in official documents, academic papers, and professional communication, characterized by complex sentence structures, precise vocabulary, and avoidance of contractions and slang.', 'kubio' ), ), 'informal' => array( 'label' => __( 'Informal', 'kubio' ), 'description' => __( 'Casual and relaxed style used in everyday conversations, personal emails, and informal writing. It often includes contractions, colloquialisms, and a more relaxed sentence structure.', 'kubio' ), ), 'technical' => array( 'label' => __( 'Technical', 'kubio' ), 'description' => __( 'Specific to a particular field or industry, this style uses terminology and jargon understood by experts in that field. It aims for clear and precise communication within that domain.', 'kubio' ), ), 'persuasive' => array( 'label' => __( 'Persuasive', 'kubio' ), 'description' => __( "Used to convince or influence the reader's opinion, often employing rhetoric, emotional appeals, and strong arguments to present a particular viewpoint.", 'kubio' ), ), 'humorous' => array( 'label' => __( 'Humorous', 'kubio' ), 'description' => __( 'Intended to amuse the reader, this style uses wit, sarcasm, irony, and clever wordplay to evoke laughter or amusement.', 'kubio' ), ), ); } function kubio_ai_business_types() { return array( array( 'label' => __( 'Business', 'kubio' ), 'value' => 'Business', 'description' => __( 'Resources and insights for starting, managing, and growing businesses.', 'kubio' ), ), array( 'label' => __( 'Services', 'kubio' ), 'value' => 'Services', 'description' => __( 'Promoting and detailing services offered by professionals or businesses.', 'kubio' ), ), array( 'label' => __( 'Consulting', 'kubio' ), 'value' => 'Consulting', 'description' => __( 'Offering expert advice, insights, and solutions in specialized fields.', 'kubio' ), ), array( 'label' => __( 'Art / Design Portfolio', 'kubio' ), 'value' => 'Art / Design Portfolio', 'description' => __( 'Showcasing artistic and design work, including portfolios, projects, and creative endeavors.', 'kubio' ), ), array( 'label' => __( 'Community & Non-profit', 'kubio' ), 'value' => 'Community & Non-profit', 'description' => __( 'Highlighting community initiatives, nonprofit organizations, and philanthropic efforts for social good.', 'kubio' ), ), array( 'label' => __( 'Personal', 'kubio' ), 'value' => 'Personal', 'description' => __( 'A platform for sharing personal experiences, thoughts, and interests.', 'kubio' ), ), array( 'label' => __( 'Event', 'kubio' ), 'value' => 'Event', 'description' => __( 'Information and details about upcoming events, conferences, or gatherings.', 'kubio' ), ), array( 'label' => __( 'Educational', 'kubio' ), 'value' => 'Educational', 'description' => __( 'Online presence for educational institutions, showcasing courses, programs, and achievements.', 'kubio' ), ), array( 'label' => __( 'Food & Drink', 'kubio' ), 'value' => 'Food & Drink', 'description' => __( 'Exploring culinary delights, recipes, and beverage-related content.', 'kubio' ), ), array( 'label' => __( 'Health & Fitness', 'kubio' ), 'value' => 'Health & Fitness', 'description' => __( 'Promoting a healthy lifestyle, fitness routines, and well-being tips.', 'kubio' ), ), array( 'label' => __( 'Fashion & Beauty', 'kubio' ), 'value' => 'Fashion & Beauty', 'description' => __( 'Showcasing the latest fashion trends, beauty tips, and style advice.', 'kubio' ), ), array( 'label' => __( 'Technology & Gadgets', 'kubio' ), 'value' => 'Technology & Gadgets', 'description' => __( 'Exploring the world of tech, gadgets, and digital innovations.', 'kubio' ), ), array( 'label' => __( 'Gaming', 'kubio' ), 'value' => 'Gaming', 'description' => __( 'Exploring the world of gaming, video games, and esports.', 'kubio' ), ), ); } function kubio_ai_log( $type, $code, $prompts, $completion, $usage = array(), $call_id = null ) { if ( defined( 'KUBIO_AI_LOG' ) && KUBIO_AI_LOG ) { kubio_replace_base64_strings( $completion ); return FileLog::with_type( FileLog::JSONL_LOG )->$type( 'AI', array( 'call_id' => $call_id, 'code' => $code, 'prompts' => $prompts, 'completion' => $completion, 'start_time' => Arr::get( $usage, 'start_time', 0 ), 'usage' => array_merge( array( 'prompt_tokens' => 0, 'completion_tokens' => 0, 'total_tokens' => 0, ), $usage ), ) ); } } function kubio_replace_base64_strings( &$array, $max_length = 500, $replace_with = '[blob]' ) { if ( ! is_array( $array ) ) { return false; } foreach ( $array as $key => &$value ) { if ( is_array( $value ) ) { kubio_replace_base64_strings( $value, $max_length, $replace_with ); } elseif ( is_string( $value ) && strlen( $value ) > $max_length && kubio_is_base64( $value ) ) { $array[ $key ] = $replace_with; } } } function kubio_is_base64( $string ) { return base64_decode( $string, true ) !== false; } function kubio_ai_sd_xl_determine_appropriate_size( $width, $height ) { $ar_range = 0.2; $aspect_ratio = $width / $height; $sizes = array( 640 => 1536, 768 => 1344, 832 => 1216, 896 => 1152, 1024 => 1024, 1152 => 896, 1216 => 832, ); $heights_in_range = array(); foreach ( $sizes as $possible_height => $possible_width ) { $possible_ar = $possible_width / $possible_height; $ar_is_in_range = $aspect_ratio * ( 1 - $ar_range ) <= $possible_ar && $possible_ar <= $aspect_ratio * ( 1 + $ar_range ); if ( $ar_is_in_range ) { $heights_in_range[] = $possible_height; } } $final_height = empty( $heights_in_range ) ? 1024 : array_shift( $heights_in_range ); foreach ( $heights_in_range as $possible_height ) { if ( $possible_height > $height ) { break; } $final_height = $height; } return array( $sizes[ $final_height ], $final_height ); } function kubio_ai_get_original_image_dimensions( $imag_url ) { if ( ! function_exists( 'download_url' ) ) { require_once ABSPATH . '/wp-admin/includes/file.php'; } $temp_file = download_url( $imag_url ); $image_threshold = 0.2; if ( is_wp_error( $temp_file ) ) { return array( 'width' => 1920, 'height' => 1080, 'orientation' => 'landscape', ); } $image_size = getimagesize( $temp_file ); if ( $image_size === false ) { return array( 'width' => 1920, 'height' => 1080, 'orientation' => 'landscape', ); } list($width, $height) = $image_size; wp_delete_file( $temp_file ); $ratio = floor( $width / $height * 100 ) / 100; $orientation = $ratio < 1 ? 'portrait' : 'landscape'; if ( ( 1 - $image_threshold ) < $ratio && $ratio < ( 1 + $image_threshold ) ) { $orientation = 'square'; } return array( 'width' => $width, 'height' => $height, 'orientation' => $orientation, ); } /** * * @param string $path * @param array $payload * @param array $extra * @return mixed|null|WP_Error */ function kubio_ai_call_api( $path, $payload = array(), $extra = array() ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $is_guest = isset( $_GET['is_guest'] ) && ! ! $_GET['is_guest']; // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $skip_ai_cache = isset( $_GET['skip_ai_cache'] ) && ! ! $_GET['skip_ai_cache']; $timeout = 120; // phpcs:ignore Squiz.PHP.DiscouragedFunctions.Discouraged ini_set( 'max_execution_time', $timeout ); // phpcs:ignore Squiz.PHP.DiscouragedFunctions.Discouraged set_time_limit( $timeout ); $log = defined( 'KUBIO_AI_LOG' ) ? KUBIO_AI_LOG : false; if ( ! $is_guest ) { $base_url = Utils::getCloudURL( "/api/ai/$path" ); } else { $base_url = Utils::getCloudURL( "/api/ai-guest/$path" ); } $url = add_query_arg( array( 'ai_debug' => $log ? 1 : 0, ), $base_url ); $start_time = microtime( true ); $filter = "kubio_ai_response_{$path}"; // add a filter if ( has_filter( $filter ) ) { $response = apply_filters( $filter, $payload ); return $response; } $extra_headers = array(); if ( $skip_ai_cache ) { $extra_headers['X-Kubio-AI-Skip-Cache'] = '1'; } $response = wp_remote_post( $url, array( 'timeout' => $timeout - 1, 'sslverify' => false, 'headers' => array_merge( array( 'Content-Type' => 'application/json', 'Accept' => 'application/json', 'X-Kubio-AI-Key' => kubio_ai_get_key(), 'X-Kubio-Site-UUID' => Flags::getSiteUUID(), 'X-Kubio-Site-URL' => get_bloginfo( 'url' ), ), $extra_headers ), 'body' => json_encode( array_merge( array( 'params' => $payload, ), $extra ) ), ) ); if ( is_wp_error( $response ) ) { return $response; } $code = wp_remote_retrieve_response_code( $response ); $result = null; $debug_content = array(); $response_content = null; if ( $code !== 200 ) { $response_content = wp_remote_retrieve_body( $response ); $body = json_decode( $response_content, true ); $error = Arr::get( (array) $body, 'error', null ); if ( $error ) { $result = new \WP_Error( Arr::get( $error, 'code', '' ), Arr::get( $error, 'message', '' ), $response_content ); } else { $result = new \WP_Error( $code, // translators: %s is the error message sprintf( __( 'AI Server error: %s', 'kubio' ), Arr::get( $error, 'message', '' ) ), $response_content ); } } else { $response_content = wp_remote_retrieve_body( $response ); $body = json_decode( $response_content, true ); $result = array( 'content' => Arr::get( is_array( $body ) ? $body : array(), 'content', null ), 'service_info' => (object) Arr::get( $body, 'service_info', array() ), ); if ( ! is_array( $body ) ) { $result = new WP_Error( 'ai_response_not_json', __( 'AI response is invalid', 'kubio' ), $response_content ); } else { $error = $body['error']; $debug_content = Arr::get( $body, 'debug', array() ); if ( $error ) { $result = new WP_Error( $error['code'], $error['message'], array_merge( array( 'debug' => LodashBasic::omit( $debug_content, array( 'messages' ) ) ), $result ) ); } } } if ( $log ) { $messages = array_merge( array( array( 'role' => 'api payload', 'content' => json_encode( $payload, JSON_PRETTY_PRINT ), ), ), Arr::get( $debug_content, 'messages', array() ) ); $log_response = Arr::get( $debug_content, 'response_raw', array() ); if ( is_wp_error( $result ) ) { $response_messages = array(); foreach ( $result->get_all_error_data() as $error_data ) { $error_data = Utils::maybeJSONDecode( $error_data ); if ( is_array( $error_data ) ) { $response_messages[] = Arr::get( $error_data, 'debug', $error_data ); } else { $response_messages[] = $error_data; } } $log_response = array( 'error_codes' => $result->get_error_codes(), 'error_messages' => $result->get_error_messages(), 'response_messages' => $response_messages, ); } if ( $result === null ) { $result = new WP_Error( 'ai_response_not_json', __( 'AI response is invalid ( Empty response )', 'kubio' ) ); $log_response = wp_remote_retrieve_body( $response ); } $log_code = $path; if ( strpos( $path, '/generate-page-section' ) !== false || strpos( $path, '/rephrase-page-section' ) !== false ) { $log_code = sprintf( '%s ( %s )', $log_code, Arr::get( $payload, 'category', 'N/A' ) ); } kubio_ai_log( is_wp_error( $result ) ? 'error' : 'info', $log_code, $messages, $log_response, array( 'start_time' => $start_time, 'total_tokens' => Arr::get( $debug_content, 'total_tokens', 0 ), 'prompt_tokens' => Arr::get( $debug_content, 'prompt_tokens', 0 ), 'completion_tokens' => Arr::get( $debug_content, 'completion_tokens', 0 ), ), // phpcs:ignore WordPress.Security.NonceVerification.Recommended sanitize_text_field( Arr::get( $_REQUEST, '__kubio_call_id', null ) ) ); } if ( is_array( $result ) ) { $result['upgrade_key'] = sprintf( 'ai:%s', apply_filters( 'kubio/ai/upgrade-key', base64_encode( kubio_ai_get_key() ) ) ); } return $result; }
Upload File
Create Folder