client = OpenAI::client(env('OPENAI_API_KEY')); } public function generateGeneralText($prompt, $mainContent) { $response = $this->client->chat()->create([ 'model' => 'gpt-4o-mini', 'messages' => [ [ 'role' => 'system', 'content' => "You are an expert assistant. Your task is to generate a concise response based on the provided prompt and main content. Guidelines: - Summarize the key points in exactly 5 bullet points. - Ensure the response is clear and relevant to the prompt. - Use simple and professional language." ], ['role' => 'user', 'content' => "Prompt: $prompt \nMain Content: $mainContent"], ], ]); return trim($response['choices'][0]['message']['content'] ?? 'No response'); } public function generateClassifyMainContent($prompt, $mainContent) { $response = $this->client->chat()->create([ 'model' => 'gpt-4o-mini', 'messages' => [ [ 'role' => 'system', 'content' => "You are an expert assistant in classifying questions based on whether their answers must be retrieved from a database or can be explained generally. Your task is to return one of the following two labels: - \"DATABASE\" → If the question requires specific data that can only be obtained from a database. - \"GENERAL\" → If the question can be answered without accessing a database. Consider the following context: \"$mainContent\" Respond with only one of the labels: \"DATABASE\" or \"GENERAL\"." ], ['role' => 'user', 'content' => $prompt], ], ]); return trim($response['choices'][0]['message']['content'] ?? 'No response'); } public function generateQueryBasedMainContent($prompt, $mainContent) { // Load file JSON $jsonPath = public_path('templates/contentTemplatePrompt.json'); // Sesuaikan path $jsonData = json_decode(file_get_contents($jsonPath), true); // Periksa apakah kategori ada dalam JSON if (!isset($jsonData[$mainContent])) { return "Template prompt tidak ditemukan."; } // Ambil template berdasarkan kategori $promptTemplate = $jsonData[$mainContent]['prompt']; $response = $this->client->chat()->create([ 'model' => 'gpt-4o-mini', 'messages' => [ ['role' => 'system', 'content' => $promptTemplate], ['role' => 'user', 'content' => $prompt], ], ]); return trim($response['choices'][0]['message']['content'] ?? 'No response'); } public function validateSyntaxQuery($queryResponse) { $response = $this->client->chat()->create([ 'model' => 'gpt-4o-mini', 'messages' => [ [ 'role' => 'system', 'content' => "You are a MariaDB SQL expert. Your task is to validate the syntax of an SQL query to ensure it follows proper MariaDB syntax rules. Guidelines: - Check for any syntax errors, missing keywords, or incorrect clause usage. - Ensure the query is well-structured and adheres to best practices. - Verify that all SQL keywords are used correctly and in the right order. - If the query is valid, respond with: \"VALID\". - If the query has issues, respond with: \"INVALID\". Always respond with either \"VALID\" or \"INVALID\"." ], ['role' => 'user', 'content' => $queryResponse], ], ]); return trim($response['choices'][0]['message']['content'] ?? 'No response'); } public function generateNLPFromQuery($inputUser, $resultQuery) { $response = $this->client->chat()->create([ 'model' => 'gpt-4o-mini', 'messages' => [ [ 'role' => 'system', 'content' => "You are an expert assistant. Your task is to analyze the database query results and transform them into a human-readable answer based on the user's question. Guidelines: - Understand the user's question and extract the key intent. - Summarize or format the query results to directly answer the user's question. - Ensure the response is clear, concise, and relevant. - If the query result is empty or does not match the question, provide a polite response indicating that no data is available. Always provide a well-structured response that makes sense based on the input question." ], ['role' => 'user', 'content' => "User's question: $inputUser \nDatabase result: $resultQuery"], ], ]); return trim($response['choices'][0]['message']['content'] ?? 'No response'); } public function generateFinalText($nlpResult) { $response = $this->client->chat()->create([ 'model' => 'gpt-4o-mini', 'messages' => [ [ 'role' => 'system', 'content' => "You are an expert text formatter. Your task is to take the given NLP result and format it into a structured, human-readable text suitable for rendering inside an HTML
. Guidelines: - Preserve the meaning and clarity of the content. - Use proper line breaks for readability. - If the text contains lists, convert them into bullet points. - Emphasize important keywords using tags if necessary. - Ensure the response remains clean and concise without extra explanations." ], ['role' => 'user', 'content' => "Here is the NLP result that needs formatting:\n\n$nlpResult"], ], ]); return trim($response['choices'][0]['message']['content'] ?? 'No response'); } public function classifyMainGenerateText($prompt) { $response = $this->client->chat()->create([ 'model' => 'gpt-4o-mini', 'messages' => [ [ 'role' => 'system', 'content' => "You are an assistant that classifies text into one of the following categories: - reklame (ads or product/service promotions) - business_or_industries (business or industries in general) - customers (customers, consumers, or service users) - pbg (tasks related to Building Approval) - retribusi (retributions related to PBG) - spatial_plannings (spatial planning) - tourisms (tourism and tourist destinations) - umkms (Micro, Small, and Medium Enterprises) Respond with only one of the categories above without any additional explanation." ], [ 'role' => 'user', 'content' => "Classify the following text:\n\n" . $prompt ], ], ]); return trim($response['choices'][0]['message']['content'] ?? 'No response'); } public function createMainQuery($classify, $prompt) { // Load file JSON $jsonPath = public_path('templates/table_config.json'); $jsonConfig = json_decode(file_get_contents($jsonPath), true); // Pastikan kategori tersedia dalam konfigurasi if (!isset($jsonConfig[$classify])) { return "Error: Kategori tidak ditemukan dalam konfigurasi."; } // Ambil nama tabel dan kolom $tableName = $jsonConfig[$classify]['table_name']; $columns = implode(', ', $jsonConfig[$classify]['list_column']); $response = $this->client->chat()->create([ 'model' => 'gpt-4o-mini', 'messages' => [ [ 'role' => 'system', 'content' => "You are an AI assistant that generates only valid MariaDB queries based on user requests. Use the following table information to construct the SQL query: - Table Name: $tableName - Available Columns: $columns Generate only the SQL query without any explanation or additional text." ], [ 'role' => 'user', 'content' => $prompt ], ], ]); return trim($response['choices'][0]['message']['content'] ?? 'No response'); } public function mainGenerateText($prompt) { $response = $this->client->chat()->create([ 'model' => 'gpt-4o-mini', 'messages' => [ [ 'role' => 'system', 'content' => "You are an expert assistant with deep knowledge in multiple fields, including programming, data science, and business strategy. Provide clear, concise, and accurate responses." ], [ 'role' => 'user', 'content' => $prompt ], ], ]); return trim($response['choices'][0]['message']['content'] ?? 'No response'); } // 1. Buat fungsi untuk akses data advertisements // 2. Buat fungsi untuk akses data business_or_industries // 3. Buat fungsi untuk akses data customers // 4. Buat fungsi untuk akses data pbg_task // 5. Buat fungsi untuk akses data pbg_task_retribution // 6. Buat fungsi untuk akses data spatial_plannings // 7. Buat fungsi untuk akses data tourisms // 8. Buat fungsi untuk akses data umkms }