🚧This is an Archive of LearnWithHasan. We updated our platformCheck Here
Skip to content

Forum in maintenance, we will back soon 🙂

AI tools in WP usin...
 
Notifications
Clear all

AI tools in WP using Gemini api

25 Posts
5 Users
3 Reactions
288 Views
(@sonu-choudhary)
Posts: 26
Eminent Member Customer
 

@admin can you provide same code as chatgpt api integration thats working fine in aws 

 
Posted : 06/22/2024 7:43 am
Hasan Aboul Hasan
(@admin)
Posts: 1276
Member Admin
 

@sonu-choudhary sorry what do you mean by in AWS?

Do you want to host the WP site on Amazon web services?

Please clarify your question.

 

 
Posted : 06/22/2024 8:26 am
Hasan Aboul Hasan
(@admin)
Posts: 1276
Member Admin
 

@sonu-choudhary please try first to test the function without the UI, check if it is working, and then we move to fix the UI

 
Posted : 06/22/2024 8:26 am
(@sonu-choudhary)
Posts: 26
Eminent Member Customer
 

@admin yes i want to host wp on aws ur chatgpt api code is working fine in aws i want same working code for gemini

 
Posted : 06/22/2024 8:53 am
(@husein)
Posts: 550
Member Moderator
 

@sonu-choudhary Try testing the backend php function alone using a third party service like thunderclient extension on vs code. And if it didn't work please send your PHP code so we can check it.

 
Posted : 06/22/2024 8:53 am
(@sonu-choudhary)
Posts: 26
Eminent Member Customer
 
// Your Inputs
function setApiKey() {
    return "AIzaSyBKFJF";
}

function setPrompt($input) {
    return "Generate 5 catchy blog titles for a blog post about " . $input;
}


// Define your "model" as an associative array
function createTitlesModel($titles) {
    return ["titles" => $titles];
}

// Helper JSON Functions
function modelToJson($modelInstance) {
    return json_encode($modelInstance);
}

function extractJson($textResponse) {
    $pattern = '/\{[^{}]*\}/';

    preg_match_all($pattern, $textResponse, $matches);
    $jsonObjects = [];

    foreach ($matches[0] as $jsonStr) {
        try {
            $jsonObj = json_decode($jsonStr, true, 512, JSON_THROW_ON_ERROR);
            array_push($jsonObjects, $jsonObj);
        } catch (JsonException $e) {
            // Extend the search for nested structures
            $extendedJsonStr = extendSearch($textResponse, $jsonStr);
            try {
                $jsonObj = json_decode($extendedJsonStr, true, 512, JSON_THROW_ON_ERROR);
                array_push($jsonObjects, $jsonObj);
            } catch (JsonException $e) {
                // Handle cases where the extraction is not valid JSON
                continue;
            }
        }
    }

    return !empty($jsonObjects) ? $jsonObjects : null;
}

function extendSearch($text, $jsonStr) {
    // Extend the search to try to capture nested structures
    $start = strpos($text, $jsonStr);
    $end = $start + strlen($jsonStr);
    $nestCount = 0;

    for ($i = $start; $i < strlen($text); $i++) {
        if ($text[$i] === '{') {
            $nestCount++;
        } elseif ($text[$i] === '}') {
            $nestCount--;
            if ($nestCount === 0) {
                return substr($text, $start, $i - $start + 1);
            }
        }
    }

    return substr($text, $start, $end - $start);
}

function jsonToModel($modelClass, $jsonData) {
    try {
        return $modelClass($jsonData);
    } catch (Exception $e) {
        echo "Validation error: " . $e->getMessage();
        return null;
    }
}

function validateJsonWithModel($modelClass, $jsonData) {
    $validatedData = [];
    $validationErrors = [];

    if (is_array($jsonData)) {
        foreach ($jsonData as $item) {
            try {
                $modelInstance = $modelClass($item);
                array_push($validatedData, $modelInstance);
            } catch (Exception $e) {
                array_push($validationErrors, ["error" => $e->getMessage(), "data" => $item]);
            }
        }
    } elseif (is_assoc($jsonData)) {
        try {
            $modelInstance = $modelClass($jsonData);
            array_push($validatedData, $modelInstance);
        } catch (Exception $e) {
            array_push($validationErrors, ["error" => $e->getMessage(), "data" => $jsonData]);
        }
    } else {
        throw new ValueError("Invalid JSON data type. Expected associative array or array.");
    }

    return [$validatedData, $validationErrors];
}

function is_assoc(array $arr) {
    if (array() === $arr) return false;
    return array_keys($arr) !== range(0, count($arr) - 1);
}

function generate_response_with_gemini($prompt) {
    
    $api_key = setApiKey();
    $api_url = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=' . $api_key ;


    // Headers for the Gemini API
    $headers = [
        'Content-Type' => 'application/json'
    ];

    // Body for the Gemini API
    $body = [
        'contents' => [
            [
                'parts' => [
                    ['text' => $prompt]
                ]
            ]
        ]
    ];

    // Args for the WordPress HTTP API
    $args = [
        'method' => 'POST',
        'headers' => $headers,
        'body' => json_encode($body),
        'timeout' => 120
    ];

    // Send the request
    $response = wp_remote_request($api_url, $args);
    
    // Extract the body from the response
    $responseBody = wp_remote_retrieve_body($response);

    // Decode the JSON response body
    $decoded = json_decode($responseBody, true);
    
    // Extract the text
    if (isset($decoded['candidates'][0]['content']['parts'][0]['text'])) {
        $extractedText = $decoded['candidates'][0]['content']['parts'][0]['text'];
        return $extractedText;
    } else {
        return 'Text not found in response';
    }


}

function custom_tool_run() {
    
    
         // Add CORS headers
         header('Access-Control-Allow-Origin: *'); // Allows all origins
         header('Access-Control-Allow-Methods: GET, POST, OPTIONS'); // Specifies the allowed methods
         header('Access-Control-Allow-Headers: Content-Type, Authorization'); // Specifies the allowed headers 
    
    
        // Variables
        $input = $_POST['input'];

        $basePrompt = setPrompt($input);
    
        
        // Creating an instance of your model
        $titlesModel = createTitlesModel(['title1', 'title2']);
    
        // Convert model instance to JSON
        $jsonModel = modelToJson($titlesModel);
    
        
        // Create optimized prompt
        $optimizedPrompt = $basePrompt . ". Please provide a response in a structured JSON format that matches the following model: " . $jsonModel;

    
        // Generate content using the modified prompt
        $gemeniResponse = generate_response_with_gemini($optimizedPrompt);
    
        // Extract and validate the JSON from the response
        $jsonObjects = extractJson($gemeniResponse);
    
        wp_send_json_success($jsonObjects);

        // Always die in functions echoing AJAX content
        wp_die();
}

add_action('wp_ajax_custom_tool_run', 'custom_tool_run');
add_action('wp_ajax_nopriv_custom_tool_run', 'custom_tool_run');
 
Posted : 06/22/2024 9:12 am
(@sonu-choudhary)
Posts: 26
Eminent Member Customer
 

@husein php code can you test this

 
Posted : 06/22/2024 9:13 am
SSAdvisor
(@ssadvisor)
Posts: 1139
Noble Member
 

@sonu-choudhary https://learnwithhasan.com/premium-forum/?wpfs=oops+something+went+wrong

Regards,
Earnie Boyd, CEO
Seasoned Solutions Advisor LLC
Schedule 1-on-1 help
Join me on Slack

 
Posted : 06/22/2024 12:35 pm
(@husein)
Posts: 550
Member Moderator
 

@sonu-choudhary can you please send the link of the tool so that i can test it from my end.

 
Posted : 06/23/2024 11:58 am
Hasan Aboul Hasan
(@admin)
Posts: 1276
Member Admin
 

@sonu-choudhary, I don't understand the relationship with AWS here.

Anyway, which guide you are following?

 
Posted : 06/24/2024 5:03 pm
Page 2 / 2
Share:
[the_ad_group id="312"]