SetChatTitleJob.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <?php
  2. namespace App\Jobs;
  3. use App\Models\Chat;
  4. use Illuminate\Bus\Batchable;
  5. use Illuminate\Contracts\Queue\ShouldQueue;
  6. use Illuminate\Foundation\Queue\Queueable;
  7. use Illuminate\Support\Facades\Http;
  8. class SetChatTitleJob implements ShouldQueue
  9. {
  10. use Batchable;
  11. use Queueable;
  12. public int $tries = 5;
  13. /**
  14. * Create a new job instance.
  15. */
  16. public function __construct(private readonly Chat $chat)
  17. {
  18. $this->onQueue('secondary');
  19. $this->afterCommit();
  20. }
  21. /**
  22. * Execute the job.
  23. */
  24. public function handle(): void
  25. {
  26. if ($this->batch()?->cancelled() || $this->chat->title) {
  27. return;
  28. }
  29. $response = Http::inference()->throw()->post('/generate', [
  30. 'message' => 'Кратко выдели суть обсуждения (2-4 слова) из сообщения пользователя для именования чата. ' . ' ' .
  31. 'Это необходимо, чтобы пользователь выдел список своих чатов и мог быстро понять что обсуждалось в данном чате.' . ' ' .
  32. 'Название должно быть ёмким, отражать суть сообщения, без лишних слов.' . ' ' .
  33. 'Ответ дай только в виде текста названия, без пояснений и кавычек.' . ' ' .
  34. 'Сообщение пользователя: ' . $this->chat->messages()->first()->content,
  35. ]);
  36. $result = $response->json();
  37. $this->chat->update(['title' => $result['content']]);
  38. }
  39. }