idpromogroup / laravel-deepseek
Laravel package for DeepSeek chat completions with the LOR-compatible LdsService contract
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0
- phpunit/phpunit: ^10.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-09 19:45:12 UTC
README
Laravel-пакет для DeepSeek Chat Completions. Внешний контракт совпадает с LorService (setMessage, setModel, execute, шаблоны, function calls, биллинг). Внутри — POST /chat/completions на https://api.deepseek.com.
Installation
composer require idpromogroup/laravel-deepseek
Опубликовать конфиг и миграции:
php artisan vendor:publish --provider="Idpromogroup\LaravelDeepseek\LaravelDeepseekServiceProvider"
php artisan migrate
В .env:
DEEPSEEK_API_KEY=sk-...
DEEPSEEK_MODEL=deepseek-v4-flash
Usage
use Idpromogroup\LaravelDeepseek\Services\LdsService; $service = new LdsService($externalKey, 'Your message here'); $result = $service->setModel('deepseek-v4-flash') ->setInstructions('You are a helpful assistant') ->execute(); if ($result->success) { echo $result->getMsg(); }
Images
DeepSeek не имеет Files API. JPG/PNG/WEBP уходят как image_url (data-URL). Нужна vision-модель:
$service = new LdsService($externalKey, 'Describe this image') ->setModel('deepseek-v4-flash-vision-exp') ->attachLocalFile(storage_path('app/photo.jpg')); $result = $service->execute();
PDF не поддерживается API — attachLocalFile() для PDF бросит исключение.
Templates
$service = new LdsService($externalKey, 'Your message') ->useTemplate('analysis_template') ->execute(); $service->useTemplate(1);
Conversation mode
У DeepSeek нет server-side conversations: история хранится в lds_conversations.messages и пересылается целиком.
$service = new LdsService($externalKey, 'Hello') ->setConversation('user123') ->execute(); $service = new LdsService($externalKey, 'Follow up question') ->setConversation('user123') ->execute();
Function calls
В config/deepseek.php:
'function_handler' => App\Services\MyFunctionHandler::class,
class MyFunctionHandler { public function execute(string $functionName, array $args) { switch ($functionName) { case 'get_weather': return $this->getWeather($args['location']); default: return ['error' => 'Unknown function']; } } }
Advanced
$service = new LdsService($externalKey, 'Your message') ->setModel('deepseek-v4-pro') ->setInstructions('Custom instructions') ->setTemperature(0.7) ->setTools([ ['type' => 'function', 'function' => [...]] ]) ->setJSONSchema([ 'type' => 'object', 'properties' => [...] ]) ->execute();
file_search, vector store и OpenAI Files API в DeepSeek нет — из пакета убраны.
Usage and cost tracking
После успешного вызова токены и оценка USD (peak rates) пишутся в lds_request_logs. Цены — config/deepseek.php → prices.
- Выключить:
DEEPSEEK_BILLING=false. - Контекст биллинга:
$service->setBillingContext(billingSourceCode: 0, billingUser: 42) ->setApiKey($userDeepSeekKey) ->execute();
use Idpromogroup\LaravelDeepseek\Facades\Lds; $sum = Lds::usage() ->forExternalKey($externalKey) ->betweenDates(now()->startOfMonth(), now()) ->whereNotNull('total_cost') ->sum('total_cost');
License
MIT License