middleware('auth'); $this->geminiService = $geminiService; } public function index() { $user = Auth::user(); $recentRecommendation = session('recomendation_data', null); // Jika session kosong, ambil rekomendasi terakhir dari database if (!$recentRecommendation) { $lastRec = \App\Models\Recommendation::where('user_id', $user->id) ->latest() ->first(); if ($lastRec) { $hasil = json_decode($lastRec->hasil_rekomendasi, true); $topJurusan = $hasil[0] ?? null; $recentRecommendation = [ 'jurusan' => $topJurusan['jurusan'] ?? null, 'skor' => $topJurusan['skor'] ?? null, 'nilai' => $lastRec->nilai_akademik, 'minat' => $lastRec->minat, 'pref_studi' => $lastRec->preferensi_studi, ]; } } return view('chatbot.index', [ 'recommendation' => $recentRecommendation ]); } public function send(Request $request) { $request->validate([ 'message' => 'required|string|max:1000', 'chatHistory' => 'nullable|array|max:20', 'chatHistory.*.role' => 'required|string|in:user,ai', 'chatHistory.*.text' => 'required|string|max:2000', ]); $message = $request->input('message'); $chatHistory = $request->input('chatHistory', []); $user = Auth::user(); $recentRecommendation = session('recomendation_data', []); // Jika session kosong, ambil rekomendasi terakhir dari database if (empty($recentRecommendation)) { $lastRec = \App\Models\Recommendation::where('user_id', $user->id) ->latest() ->first(); if ($lastRec) { $hasil = json_decode($lastRec->hasil_rekomendasi, true); $topJurusan = $hasil[0] ?? null; $recentRecommendation = [ 'jurusan' => $topJurusan['jurusan'] ?? null, 'skor' => $topJurusan['skor'] ?? null, 'nilai' => $lastRec->nilai_akademik, 'minat' => $lastRec->minat, 'pref_studi' => $lastRec->preferensi_studi, ]; } } // Siapkan context untuk Gemini $context = [ 'recommendation' => $recentRecommendation['jurusan'] ?? null, 'score' => isset($recentRecommendation['skor']) ? number_format($recentRecommendation['skor'] * 100, 1) : null, 'profile' => [ 'nama' => $user->name, 'kelompok' => $user->kelompok_asal, 'nilai' => $recentRecommendation['nilai'] ?? null, 'minat' => $recentRecommendation['minat'] ?? null, 'pref' => $recentRecommendation['pref_studi'] ?? null, ] ]; // Panggil Gemini API dengan conversation history $response = $this->geminiService->chat($message, $context, $chatHistory); // Simpan chat ke database if ($user && isset($response['message'])) { ChatHistory::create([ 'user_id' => $user->id, 'prompt' => $message, 'response' => $response['message'], ]); } return response()->json($response); } /** * Tampilkan history chat */ public function historyChat() { $user = Auth::user(); $chatHistories = ChatHistory::where('user_id', $user->id) ->orderBy('created_at', 'desc') ->get(); return view('history.chat', compact('chatHistories')); } }