ChatController.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Chat;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\Http;
  6. class ChatController extends Controller
  7. {
  8. public function index(?Chat $chat = null)
  9. {
  10. $chat?->load('messages');
  11. return inertia("Chat", [
  12. 'chat' => $chat?->toResource(),
  13. "chats" => fn() => Chat::all(),
  14. ]);
  15. }
  16. public function message(Request $request)
  17. {
  18. $chat = $request->filled('uuid') ? Chat::find($request->input('uuid')) : Chat::create();
  19. $chat->messages()->create(['text' => $request->input('message')]);
  20. //TODO: Send To LLM
  21. $response = Http::inference()->post('/chat', [
  22. 'prompt' => $request->input('message')
  23. ]);
  24. $result = $response->json();
  25. $chat->messages()->create([
  26. 'text' => $result['message']['content'],
  27. 'thinking' => $result['message']['thinking'],
  28. 'from' => $result['message']['role']
  29. ]);
  30. if (!$chat->title) {
  31. $response = Http::inference()->post('/generate', [
  32. 'prompt' => 'На основе первого сообщения пользователя предложи короткое название для чата длиной 2-4 слова.' . ' ' .
  33. 'Название должно быть ёмким, отражать суть сообщения, без лишних слов.' . ' ' .
  34. 'Ответ дай только в виде текста названия, без пояснений и кавычек.' . ' ' .
  35. 'Первое сообщение: ' . $request->input('message')
  36. ]);
  37. $result = $response->json();
  38. $chat->update(['title' => $result['response']]);
  39. }
  40. return redirect()->route('chats.view', ['chat' => $chat->id]);
  41. }
  42. public function destroy(Chat $chat)
  43. {
  44. $chat->delete();
  45. return redirect()->route('chats.index');
  46. }
  47. }