fix: inserting chat history into the answer generation process
This commit is contained in:
@@ -7,6 +7,7 @@ use App\Services\OpenAIService;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class ChatbotController extends Controller
|
||||
{
|
||||
@@ -19,7 +20,6 @@ class ChatbotController extends Controller
|
||||
|
||||
public function generateText(Request $request)
|
||||
{
|
||||
info($request);
|
||||
$request->validate([
|
||||
'tab_active' => 'required|string',
|
||||
'prompt' => 'required|string',
|
||||
@@ -33,47 +33,29 @@ class ChatbotController extends Controller
|
||||
default => "UNKNOWN",
|
||||
};
|
||||
|
||||
$chatHistory = $request->input('chatHistory');
|
||||
// Log::info('Chat history sebelum disimpan:', ['history' => $chatHistory]);
|
||||
|
||||
if ($main_content === "UNKNOWN") {
|
||||
return response()->json(['response' => 'Invalid tab_active value.'], 400);
|
||||
}
|
||||
|
||||
info($main_content);
|
||||
// info($main_content);
|
||||
|
||||
// Klasifikasi apakah pertanyaan butuh database atau bisa dijawab langsung
|
||||
$classifyResponse = $this->openAIService->generateClassifyMainContent($request->input('prompt'), $main_content);
|
||||
$queryResponse = $this->openAIService->generateQueryBasedMainContent($request->input('prompt'), $main_content, $chatHistory);
|
||||
|
||||
$firstValidation = $this->openAIService->validateSyntaxQuery($queryResponse);
|
||||
$secondValidation = $this->openAIService->validateSyntaxQuery($queryResponse);
|
||||
|
||||
if ($classifyResponse === "DATABASE") {
|
||||
$queryResponse = $this->openAIService->generateQueryBasedMainContent($request->input('prompt'), $main_content);
|
||||
if (is_array($queryResponse)) {
|
||||
info('Query Response is an array: ', $queryResponse);
|
||||
} else {
|
||||
info('Query Response is a string: ' . $queryResponse);
|
||||
}
|
||||
|
||||
// Validasi query dua kali sebelum eksekusi
|
||||
if (
|
||||
$this->openAIService->validateSyntaxQuery($queryResponse) === "VALID" &&
|
||||
$this->openAIService->validateSyntaxQuery($queryResponse) === "VALID"
|
||||
) {
|
||||
info($queryResponse);
|
||||
$queryResponse = str_replace(['```sql', '```'], '', $queryResponse);
|
||||
$resultQuery = DB::select($queryResponse);
|
||||
$formattedResultQuery = json_encode($resultQuery, JSON_PRETTY_PRINT);
|
||||
$nlpResult = $this->openAIService->generateNLPFromQuery($request->input('prompt'), $formattedResultQuery);
|
||||
$finalGeneratedText =$this->openAIService->generateFinalText($nlpResult);
|
||||
return response()->json(['response' => $finalGeneratedText]);
|
||||
}
|
||||
|
||||
return response()->json(['response' => ''], 400);
|
||||
}
|
||||
|
||||
if ($classifyResponse === "GENERAL") {
|
||||
$nlpResult = $this->openAIService->generateGeneralText($request->input('prompt'), $main_content);
|
||||
$finalGeneratedText =$this->openAIService->generateFinalText($nlpResult);
|
||||
return response()->json(['response' => $finalGeneratedText]);
|
||||
}
|
||||
|
||||
return response()->json(['response' => ''], 500);
|
||||
$formattedResultQuery = "[]";
|
||||
$queryResponse = str_replace(['```sql', '```'], '', $queryResponse);
|
||||
$resultQuery = DB::select($queryResponse);
|
||||
$formattedResultQuery = json_encode($resultQuery, JSON_PRETTY_PRINT);
|
||||
// info($formattedResultQuery);
|
||||
|
||||
$nlpResult = $this->openAIService->generateNLPFromQuery($request->input('prompt'), $formattedResultQuery);
|
||||
$finalGeneratedText =$this->openAIService->generateFinalText($nlpResult);
|
||||
return response()->json(['response' => $finalGeneratedText, 'nlpResponse' => $queryResponse]);
|
||||
}
|
||||
|
||||
public function mainGenerateText(Request $request)
|
||||
@@ -104,7 +86,10 @@ class ChatbotController extends Controller
|
||||
], 400);
|
||||
}
|
||||
|
||||
$queryResponse = $this->openAIService->createMainQuery($classifyResponse, $request->input('prompt'));
|
||||
$chatHistory = $request->input('chatHistory');
|
||||
Log::info('Chat history sebelum disimpan:', ['history' => $chatHistory]);
|
||||
|
||||
$queryResponse = $this->openAIService->createMainQuery($classifyResponse, $request->input('prompt'), $chatHistory);
|
||||
info($queryResponse);
|
||||
|
||||
$firstValidation = $this->openAIService->validateSyntaxQuery($queryResponse);
|
||||
@@ -112,18 +97,15 @@ class ChatbotController extends Controller
|
||||
|
||||
$formattedResultQuery = "[]";
|
||||
|
||||
if($firstValidation === "VALID" && $secondValidation === "VALID")
|
||||
{
|
||||
$queryResponse = str_replace(['```sql', '```'], '', $queryResponse);
|
||||
$queryResult = DB::select($queryResponse);
|
||||
info($queryResult);
|
||||
$formattedResultQuery = json_encode($queryResult, JSON_PRETTY_PRINT);
|
||||
info($formattedResultQuery);
|
||||
}
|
||||
$queryResponse = str_replace(['```sql', '```'], '', $queryResponse);
|
||||
$queryResult = DB::select($queryResponse);
|
||||
|
||||
$formattedResultQuery = json_encode($queryResult, JSON_PRETTY_PRINT);
|
||||
|
||||
$nlpResult = $this->openAIService->generateNLPFromQuery($request->input('prompt'), $formattedResultQuery);
|
||||
$finalGeneratedText =$this->openAIService->generateFinalText($nlpResult);
|
||||
|
||||
return response()->json(['response' => $finalGeneratedText]);
|
||||
return response()->json(['response' => $finalGeneratedText, 'nlpResponse' => $queryResponse]);
|
||||
} catch (\Exception $e) {
|
||||
// Tangani error dan log exception
|
||||
\Log::error("Error generating text: " . $e->getMessage());
|
||||
|
||||
Reference in New Issue
Block a user