Search by

idpromogroup / laravel-deepseek

iljainc

Laravel package for DeepSeek chat completions with the LOR-compatible LdsService contract

Package info

github.com/iljainc/laravel_deepseek

pkg:composer/idpromogroup/laravel-deepseek

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2026-09-09 19:39 UTC

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.phpprices.

  • Выключить: 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