feature: chatbot
This commit is contained in:
84
app/Http/Controllers/Api/ChatbotController.php
Normal file
84
app/Http/Controllers/Api/ChatbotController.php
Normal file
@@ -0,0 +1,84 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
17
app/Http/Controllers/Chatbot/ChatbotController.php
Normal file
17
app/Http/Controllers/Chatbot/ChatbotController.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Chatbot;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ChatbotController extends Controller
|
||||
{
|
||||
/**
|
||||
* Displya a listing of the resource
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return view('chatbot.index');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user