84 lines
3.1 KiB
PHP
84 lines
3.1 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use Illuminate\Http\Request;
|
|
use App\Services\OpenAIService;
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Response;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class ChatbotController extends Controller
|
|
{
|
|
protected $openAIService;
|
|
|
|
public function __construct(OpenAIService $openAIService)
|
|
{
|
|
$this->openAIService = $openAIService;
|
|
}
|
|
|
|
public function generateText(Request $request)
|
|
{
|
|
info($request);
|
|
$request->validate([
|
|
'tab_active' => 'required|string',
|
|
'prompt' => 'required|string',
|
|
]);
|
|
|
|
$tab_active = $request->input('tab_active');
|
|
$main_content = match ($tab_active) {
|
|
"count-retribusi" => "RETRIBUTION",
|
|
"document-validation" => "DOCUMENT VALIDATION",
|
|
"data-information" => "DATA SUMMARY",
|
|
default => "UNKNOWN",
|
|
};
|
|
|
|
if ($main_content === "UNKNOWN") {
|
|
return response()->json(['response' => 'Invalid tab_active value.'], 400);
|
|
}
|
|
|
|
info($main_content);
|
|
|
|
// Klasifikasi apakah pertanyaan butuh database atau bisa dijawab langsung
|
|
$classifyResponse = $this->openAIService->generateClassifyMainContent($request->input('prompt'), $main_content);
|
|
|
|
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);
|
|
}
|
|
|
|
|
|
private function classifyContent(string $prompt) {
|
|
$classifyResponse = $this->openAIService->generateClassifyContent($prompt);
|
|
return $classifyResponse;
|
|
}
|
|
} |