PHP code example of liteopensource / gemini-lite-laravel

1. Go to this page and download the library: Download liteopensource/gemini-lite-laravel library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

liteopensource / gemini-lite-laravel example snippets

 artisan vendor:publish --tag="geminilite-config"

use LiteOpenSource\GeminiLiteLaravel\Src\Facades\Gemini;

$chat = Gemini::newChat();

$response = $chat->newPrompt("Your prompt here");

$chat->setGeminiModelConfig($temperature, $topK, $topP, $maxOutputTokens, $returnMimeType);

$responseSchema = [
    // Your JSON schema here
];

$chat->setGeminiModelConfig(
    temperature: 1,
    topK: 40,
    topP: 0.95,
    maxOutputTokens: 8192,
    responseMimeType: 'application/json',
    responseSchema: $responseSchema
);

$chat->changeGeminiModel("gemini-2.0-flash"); // Example using new model

$currentConfig = $chat->getGeminiModelConfig();

$gemini = Gemini::newChat();

// Make some prompts
$response1 = $gemini->newPrompt('Hello');
$response2 = $gemini->newPrompt('How are you?');

// Get the full chat history
$history = $gemini->getHistory();

// The history contains all messages exchanged, including both user prompts and model responses
// Each message contains:
// - role: "user" or "model"
// - parts: array containing the text or file data

use LiteOpenSource\GeminiLiteLaravel\Src\Facades\UploadFileToGemini;

$filePath = storage_path('your/file/path.file');
$fileProcessed = UploadFileToGemini::processFileFromPath($filePath);

$uri = $fileProcessed->getUri();
$mimeType = $fileProcessed->getMimeType();


use LiteOpenSource\GeminiLiteLaravel\Src\Facades\UploadFileToGemini;

$file = $request->file($yourFile);
$fileProcessed = UploadFileToGemini::processFileFromUpload($file);

$uri = $fileProcessed->getUri();
$mimeType = $fileProcessed->getMimeType();

$tokens = GeminiTokenCount::coutTextTokens("Input text");

use LiteOpenSource\GeminiLiteLaravel\Src\Traits\HasGeminiRoles;

class User extends Authenticatable
{
    use  HasGeminiRoles;

}

$testUser = User::create([
    'name' => 'John',
    'email' => '[email protected]',
    'password'=> Hash::make("password"),
]);
/*
You can assign the role by the 
index or name of the role in the database 

$testUser2->assignGeminiRole('limited_user');

*/
$testUser->assignGeminiRole(1);


// $user MUST BE an instance of model User
$user = User::find(1); 
$canMakeRequest = $user->canMakeRequestToGemini();

// $user MUST BE an instance of model User
$user = User::find(1); 
$canMakeRequest = $user->isActiveInGemini();

// $user MUST BE an instance of model User
$user = User::find(1); 
$user->updateUsageTracking($tokens);

$testUser->storeGeminiRequest(requestType: "Test",
 consumedTokens: $tokens, 
 requestSuccessful: true, 
 requestData: ["request"=> $prompt],
 responseData: ["response"=> $response]); 

use LiteOpenSource\GeminiLiteLaravel\Src\Facades\Embedding;

// Generate embedding for a single text
$embedding = Embedding::embedText("Hello world");

// Generate batch embeddings
$embeddings = Embedding::embedBatch([
    "First text",
    "Second text",
    "Third text"
]);

// With additional options
$embedding = Embedding::embedText($text, [
    'taskType' => 'SEMANTIC_SIMILARITY',
    'title' => 'Document Title'
]);

$gemini = Gemini::newChat();
$response = $gemini->newPrompt('How much is 1 + 1?');
$followUp = $gemini->newPrompt('Add 8 to the previous result');

$testImagePath = storage_path('app/public/test_image.jpeg');
$uploadedFile = UploadFileToGemini::processFileFromPath($testImagePath);

$gemini = Gemini::newChat();
$response = $gemini->newPrompt(
    "What do you see in this image?",
    $uploadedFile->getUri(),
    $uploadedFile->getMimeType()
);


$gemini = Gemini::newChat();
$gemini->setGeminiModelConfig(1, 40, 0.95, 8192, 'text/plain');
$response = $gemini->newPrompt('Generate a creative story');

$responseSchema = [
    "responseSchema" => [
        "type" => "object",
        "description" => "Return some of the most popular cookie recipes",
        "properties" => [
            "recipes" => [
                "type" => "array",
                "items" => [
                    "type" => "object",
                    "properties" => [
                        "recipe_name" => [
                            "type" => "string",
                            "description" => "name of recipe using upper case"
                        ],
                        "ingredients_number" => [
                            "type" => "number"
                        ]
                    ],
                    "                          "200",
                                "400"
                            ]
                        ]
                    ],
                    "

$geminiChat1 = Gemini::newChat();
$geminiChat1->changeGeminiModel("gemini-1.5-flash-8b");
$response1 = $geminiChat1->newPrompt("Your prompt here");

$geminiChat2 = Gemini::newChat();
$geminiChat2->changeGeminiModel("gemini-1.5-pro-002");
$response2 = $geminiChat2->newPrompt("Your prompt here");

// Compare $response1 and $response2

use LiteOpenSource\GeminiLiteLaravel\Src\Facades\Gemini;

$geminiChat = Gemini::newChat();

// Get initial configuration
$initialModelConfig = $geminiChat->getGeminiModelConfig();

// Change configuration
$geminiChat->setGeminiModelConfig(2, 64, 1, 8192, 'text/plain');

// Get updated configuration
$updatedModelConfig = $geminiChat->getGeminiModelConfig();

// Now you can compare or use these configurations

$tokens = GeminiTokenCount::coutTextTokens("Hello Gemini can you write a funny story");

$user = User::find(1);
$canMakeRequest = $user->canMakeRequestToGemini();

return response()->json([
    'success'=> true,
    'message'=> 'Everything okay',
    'User can make request ' => $canMakeRequest
],200);

$user = User::find(1);
$isActive = $user->isActiveInGemini();

return response()->json([
    'success'=> true,
    'message'=> 'Everything okay',
    'User is active' => $isActive
],200);

$tokens = GeminiTokenCount::coutTextTokens("Write a teror story for my class");
$user = User::find(1);

if(!$user->canMakeRequestToGemini()){
    return response()->json([
        "success"=> false,
        "message"=> "User unauthorized",
    ],403);
}

$user->updateUsageTracking($tokens);

$faker = Faker::create();
$testUser = User::create([
    'name' => $faker->name,
    'email' => $faker->unique()->safeEmail,
    'password'=> Hash::make("1234"),
]);

$role = $testUser->assignGeminiRole(1);

$testUser2 = User::create([
    'name' => $faker->name,
    'email' => $faker->unique()->safeEmail,
    'password'=> Hash::make("1234"),
]);

$role = $testUser2->assignGeminiRole('limited_user');


$prompt = "Write my tesis please";
$gemini = Gemini::newChat();

if(!$testUser->canMakeRequestToGemini()){
    return response()->json([
        'code' => 403,
        "success"=> true,
        "message"=> "The user cannot make requests to gemini",
    ],403);
}

$response = $gemini->newPrompt($prompt);
$tokens = GeminiTokenCount::coutTextTokens($prompt);
$testUser->updateUsageTracking($tokens);
$testUser->storeGeminiRequest(requestType: "Test", consumedTokens: $tokens, requestSuccessful: true, requestData: ["request"=> $prompt],responseData: ["response"=> $response]); 
geminilite.php
bash
php artisan vendor:publish --tag="geminilite-limit-tokes"