idpromogroup / laravel-gemini
Laravel package for Gemini generateContent with the same request API as laravel-openai-responses
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.0
- illuminate/database: ^10.0|^11.0|^12.0
- illuminate/support: ^10.0|^11.0|^12.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0|^10.0
- phpunit/phpunit: ^10.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
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).