diff --git a/app/Http/Controllers/Api/ChatbotController.php b/app/Http/Controllers/Api/ChatbotController.php index 0f95776..6432317 100644 --- a/app/Http/Controllers/Api/ChatbotController.php +++ b/app/Http/Controllers/Api/ChatbotController.php @@ -34,7 +34,7 @@ class ChatbotController extends Controller }; $chatHistory = $request->input('chatHistory'); - // Log::info('Chat history sebelum disimpan:', ['history' => $chatHistory]); + Log::info('Chat history sebelum disimpan:', ['history' => $chatHistory]); if ($main_content === "UNKNOWN") { return response()->json(['response' => 'Invalid tab_active value.'], 400); @@ -43,15 +43,16 @@ class ChatbotController extends Controller // info($main_content); $queryResponse = $this->openAIService->generateQueryBasedMainContent($request->input('prompt'), $main_content, $chatHistory); - - $firstValidation = $this->openAIService->validateSyntaxQuery($queryResponse); - $secondValidation = $this->openAIService->validateSyntaxQuery($queryResponse); + + if (str_contains($queryResponse, 'tidak relevan') || str_contains($queryResponse, 'tidak valid') || str_starts_with($queryResponse, 'Prompt')) { + return response()->json(['response' => $queryResponse], 400); + } $formattedResultQuery = "[]"; $queryResponse = str_replace(['```sql', '```'], '', $queryResponse); $resultQuery = DB::select($queryResponse); $formattedResultQuery = json_encode($resultQuery, JSON_PRETTY_PRINT); - // info($formattedResultQuery); + info($formattedResultQuery); $nlpResult = $this->openAIService->generateNLPFromQuery($request->input('prompt'), $formattedResultQuery); $finalGeneratedText =$this->openAIService->generateFinalText($nlpResult); @@ -92,9 +93,6 @@ class ChatbotController extends Controller $queryResponse = $this->openAIService->createMainQuery($classifyResponse, $request->input('prompt'), $chatHistory); info($queryResponse); - $firstValidation = $this->openAIService->validateSyntaxQuery($queryResponse); - $secondValidation = $this->openAIService->validateSyntaxQuery($queryResponse); - $formattedResultQuery = "[]"; $queryResponse = str_replace(['```sql', '```'], '', $queryResponse); diff --git a/app/Services/OpenAIService.php b/app/Services/OpenAIService.php index 25626b4..f511b7b 100644 --- a/app/Services/OpenAIService.php +++ b/app/Services/OpenAIService.php @@ -27,6 +27,11 @@ class OpenAIService return "Template prompt tidak ditemukan."; } + $validationResponse = $this->validatePromptTopic($prompt); + if ($validationResponse !== 'VALID') { + return "Prompt yang Anda masukkan tidak relevan dengan data PUPR/SIMBG/DPUTR atau pekerjaan sejenis."; + } + // Ambil template berdasarkan kategori $promptTemplate = $jsonData[$mainContent]['prompt']; @@ -273,4 +278,26 @@ class OpenAIService // return trim($response['choices'][0]['message']['content'] ?? 'No response'); // } + + public function validatePromptTopic($prompt) + { + $messages = [ + [ + 'role' => 'system', + 'content' => "You are a classification expert. Determine if the user's request is related to the Indonesian Ministry of Public Works and Public Housing (PUPR), DPUTR, SIMBG, or construction-related tasks managed by these institutions. + + Only respond with: + - VALID → if it's relevant to those topics + - INVALID → if not related at all" + ], + ['role' => 'user', 'content' => $prompt], + ]; + + $response = $this->client->chat()->create([ + 'model' => 'gpt-4o-mini', + 'messages' => $messages, + ]); + + return trim($response['choices'][0]['message']['content'] ?? 'INVALID'); + } }