Search by

idpromogroup / laravel-gemini

iljainc

Laravel package for Gemini generateContent with the same request API as laravel-openai-responses

Package info

github.com/iljainc/laravel-gemini

pkg:composer/idpromogroup/laravel-gemini

Statistics

Installs: 3

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2026-09-09 13:01 UTC

This package is auto-updated.

Last update: 2026-09-09 13:02:06 UTC


README

Laravel-пакет для Gemini (generateContent). Снаружи те же методы, что были у LorService: setModel, execute, attachLocalFile и т.д.

Install

Пакет: idpromogroup/laravel-gemini. Провайдер подхватывается сам (Laravel package discovery).

Если пакет ещё не на Packagist — из GitHub:

composer require idpromogroup/laravel-gemini:dev-main

в composer.json хоста:

{
  "repositories": [
    {
      "type": "vcs",
      "url": "https://github.com/iljainc/laravel-gemini.git"
    }
  ]
}

.env:

GEMINI_API_KEY=
GEMINI_MODEL=gemini-3.8-flash

Миграции грузятся из пакета, публиковать их не обязательно:

php artisan migrate

Конфиг — только если хотите править у себя в config/gemini.php:

php artisan vendor:publish --tag=config --provider="Idpromogroup\LaravelGemini\LaravelGeminiServiceProvider"

Usage

use Idpromogroup\LaravelGemini\LgService;

$service = new LgService($externalKey, 'Your message here');
$result = $service->setModel('gemini-3.8-flash')
    ->setInstructions('You are a helpful assistant')
    ->execute();

if ($result->success) {
    echo $result->getMsg();
}

LgService создаёте через new, в контейнер он не биндится (нужен $externalKey). Контракт: Idpromogroup\LaravelGemini\Contracts\LlmService.

Файлы: JPG/PNG/WEBP (inline), PDF (Files API).

$service = new LgService($externalKey, 'Analyze this document')
    ->attachLocalFile(storage_path('app/documents/report.pdf'))
    ->execute();

Шаблон: ->useTemplate('name_or_id') (таблица lg_templates).

Диалог (история в lg_conversations, не OpenAI conversation id):

$service = new LgService($externalKey, 'Hello')
    ->setConversation('user123')
    ->execute();

Function handler — config/gemini.php (function_handler) или GEMINI_FUNCTION_HANDLER:

class MyFunctionHandler
{
    public function execute(string $functionName, array $args) { /* ... */ }
}

Биллинг:

use Idpromogroup\LaravelGemini\Facades\Lg;

Lg::usage()->forExternalKey($externalKey)->sum('total_cost');

Выключить: GEMINI_BILLING=false.

HTTP-клиент уже забинжен на GeminiApiService. Менять его нужно только ради своего адаптера:

$this->app->bind(
    \Idpromogroup\LaravelGemini\Contracts\LlmApiClient::class,
    \App\Services\MyGeminiClient::class
);

Класс должен реализовать LlmApiClient (generate, uploadFile, setTimeout, getApiKey).