sanjarani / gemini
A professional Laravel package for working with Google Gemini API
v1.0.6
2025-05-18 13:09 UTC
Requires
- php: ^8.2
- guzzlehttp/guzzle: ^7.8
- illuminate/cache: ^12.0
- illuminate/config: ^12.0
- illuminate/console: ^12.0
- illuminate/contracts: ^12.0
- illuminate/http: ^12.0
- illuminate/queue: ^12.0
- illuminate/support: ^12.0
Requires (Dev)
- laravel/pint: ^1.13
- mockery/mockery: ^1.6
- orchestra/testbench: ^9.0
- phpunit/phpunit: ^11.0
README
یک پکیج حرفهای، توسعهپذیر و مقیاسپذیر برای کار با Google Gemini API در فریمورک Laravel.
ویژگیها
- پشتیبانی از تمامی مدلهای Gemini (gemini-pro، gemini-pro-vision و غیره)
- قابلیت تغییر مدل در runtime
- استفاده از Laravel HTTP Client با مدیریت خطای دقیق
- طراحی بر اساس سرویسمحور بودن و Dependency Injection
- پشتیبانی از Prompt Caching برای صرفهجویی در توکنها و پاسخدهی سریعتر
- شمارش توکن ورودی و خروجی با تخمین هزینه
- پشتیبانی از اجرای async با Queue و Job اختصاصی
- کنترل دقیق نرخ ارسال درخواستها و خطاهای مرتبط با Rate Limit
- فاساد برای دسترسی آسانتر
- میدلور برای مدیریت درخواستها
- سیستم لاگینگ قابل تنظیم
- پشتیبانی از ایجاد embedding و محاسبه شباهت متنها
نصب
این پکیج را میتوانید با Composer نصب کنید:
composer require sanjarani/gemini ```php سپس فایل پیکربندی را منتشر کنید: ```bash php artisan vendor:publish --tag=gemini-config ```php ## پیکربندی پس از انتشار فایل پیکربندی، میتوانید تنظیمات را در فایل `config/gemini.php` انجام دهید. همچنین میتوانید از متغیرهای محیطی در فایل `.env` استفاده کنید: ```env GEMINI_API_KEY=your-api-key GEMINI_DEFAULT_MODEL=gemini-pro GEMINI_REQUEST_TIMEOUT=30 GEMINI_ENABLE_CACHE=false GEMINI_CACHE_TTL=3600 GEMINI_ENABLE_LOGGING=false ```php ## نحوه استفاده ### تولید متن با مدل Gemini ```php use Sanjarani\Gemini\Facades\Gemini; // استفاده ساده $response = Gemini::generate('به من در مورد هوش مصنوعی بگو'); echo $response->content(); // استفاده با تنظیمات بیشتر $response = Gemini::generate('به من در مورد هوش مصنوعی بگو', [ 'temperature' => 0.7, 'top_p' => 0.9, 'top_k' => 40, 'max_tokens' => 500, ]); ```php ### گفتگو با مدل Gemini ```php use Sanjarani\Gemini\Facades\Gemini; $messages = [ ['role' => 'user', 'content' => 'سلام، حالت چطوره؟'], ['role' => 'model', 'content' => 'سلام! من خوبم، چطور میتونم کمکت کنم؟'], ['role' => 'user', 'content' => 'میخوام در مورد برنامهنویسی PHP بیشتر یاد بگیرم.'], ]; $response = Gemini::chat($messages); echo $response->content(); ```php ### استفاده از مدل Vision برای تحلیل تصاویر ```php use Sanjarani\Gemini\Facades\Gemini; // تحلیل یک تصویر $response = Gemini::generateFromImage( '/path/to/image.jpg', 'این تصویر را توصیف کن' ); // تحلیل چند تصویر $response = Gemini::generateFromMultipleImages( ['/path/to/image1.jpg', '/path/to/image2.jpg'], 'این دو تصویر را مقایسه کن' ); ### استفاده از تصویر base64 $base64Image = 'data:image/jpeg;base64,...'; $response = Gemini::generateFromBase64Image( $base64Image, 'این تصویر را توصیف کن' ); ### ایجاد embedding برای متن $response = Gemini::embedText('این یک متن نمونه است'); $embedding = $response->raw()['embedding']['values']; ### ایجاد embedding برای چندین متن $texts = ['متن اول', 'متن دوم', 'متن سوم']; $response = Gemini::embedBatch($texts); ### محاسبه شباهت بین دو embedding $embedding1 = $response1->raw()['embedding']['values']; $embedding2 = $response2->raw()['embedding']['values']; $similarity = Gemini::calculateSimilarity($embedding1, $embedding2); echo "Similarity score: {$similarity}"; // عددی بین 0 تا 1`` ### تغییر مدل در runtime ```php use Sanjarani\Gemini\Facades\Gemini; $response = Gemini::setModel('gemini-ultra') ->generate('یک داستان کوتاه بنویس'); ```php ### استفاده از اجرای غیرهمزمان ```php use Sanjarani\Gemini\Facades\Gemini; use App\Handlers\GeminiResponseHandler; // اجرای غیرهمزمان با callback Gemini::generateAsync( 'یک مقاله در مورد هوش مصنوعی بنویس', [], GeminiResponseHandler::class, 'handleResponse', ['article_id' => 123] ); ```php ### دسترسی به اطلاعات پاسخ ```php use Sanjarani\Gemini\Facades\Gemini; $response = Gemini::generate('سلام، حالت چطوره؟'); // دسترسی به متن پاسخ echo $response->content(); // دسترسی به دادههای خام پاسخ $rawData = $response->raw(); // دسترسی به اطلاعات توکن $tokenUsage = $response->tokenUsage(); echo "Prompt tokens: {$tokenUsage['prompt_tokens']}\n"; echo "Completion tokens: {$tokenUsage['completion_tokens']}\n"; echo "Total tokens: {$tokenUsage['total_tokens']}\n"; // دسترسی به هزینه تخمینی echo "Estimated cost: \${$response->estimatedCost()}\n"; // دسترسی به مدل استفاده شده echo "Model: {$response->model()}\n"; // دسترسی به دلیل پایان پاسخ echo "Finish reason: {$response->finishReason()}\n"; // بررسی موفقیتآمیز بودن درخواست if ($response->successful()) { echo "Request was successful!\n"; } ```php ### استفاده از تزریق وابستگی ```php use Sanjarani\Gemini\Contracts\TextGenerationServiceInterface; class MyService { protected $textService; public function __construct(TextGenerationServiceInterface $textService) { $this->textService = $textService; } public function generateContent($prompt) { return $this->textService->generate($prompt); } } ```php ### استفاده از میدلور Rate Limiting در فایل `app/Http/Kernel.php`: ```php protected $routeMiddleware = [ // ... 'gemini.limit' => \Sanjarani\Gemini\Middleware\GeminiRateLimitMiddleware::class, ]; ```php در روتها: ```php Route::post('/generate', [GeminiController::class, 'generate']) ->middleware('gemini.limit:60,1'); // 60 درخواست در هر دقیقه ```php ## دستورات Artisan ### تست Gemini API ```bash php artisan gemini:test "سلام، حالت چطوره؟" ```php ### پاک کردن کش Gemini ```bash php artisan gemini:cache-clear ```php ## مدیریت خطاها این پکیج خطاهای مختلف را با استثناهای اختصاصی مدیریت میکند: ```php use Sanjarani\Gemini\Facades\Gemini; use Sanjarani\Gemini\Exceptions\GeminiApiException; use Sanjarani\Gemini\Exceptions\GeminiApiRateLimitException; use Sanjarani\Gemini\Exceptions\GeminiModelNotFoundException; use Sanjarani\Gemini\Exceptions\GeminiNetworkException; use Sanjarani\Gemini\Exceptions\GeminiConfigurationException; try { $response = Gemini::generate('سلام، حالت چطوره؟'); } catch (GeminiApiRateLimitException $e) { // مدیریت خطای محدودیت نرخ درخواست echo "Rate limit exceeded: {$e->getMessage()}"; } catch (GeminiModelNotFoundException $e) { // مدیریت خطای عدم وجود مدل echo "Model not found: {$e->getMessage()}"; } catch (GeminiNetworkException $e) { // مدیریت خطای شبکه echo "Network error: {$e->getMessage()}"; } catch (GeminiConfigurationException $e) { // مدیریت خطای پیکربندی echo "Configuration error: {$e->getMessage()}"; } catch (GeminiApiException $e) { // مدیریت سایر خطاهای API echo "API error: {$e->getMessage()}"; } ```php ## تستها برای اجرای تستها: ```bash composer test ```php ## مشارکت مشارکتها با آغوش باز پذیرفته میشوند! لطفاً قبل از ارسال pull request، تستها را اجرا کنید. ## لایسنس این پکیج تحت لایسنس MIT منتشر شده است. برای اطلاعات بیشتر، فایل [LICENSE](LICENSE) را مشاهده کنید.