diff --git a/api/generate_process_suggestion.php b/api/generate_process_suggestion.php new file mode 100644 index 0000000..0c2f684 --- /dev/null +++ b/api/generate_process_suggestion.php @@ -0,0 +1,33 @@ + [ + ['role' => 'system', 'content' => 'You are a helpful assistant that generates process names and descriptions.'], + ['role' => 'user', 'content' => $prompt], + ], + 'model' => 'gpt-5-mini', // Using the default model from ai/config.php +]; + +$response = LocalAIApi::createResponse($params); + +if (!empty($response['success'])) { + $decoded = LocalAIApi::decodeJsonFromResponse($response); + if ($decoded && isset($decoded['name']) && isset($decoded['description'])) { + echo json_encode(['success' => true, 'data' => $decoded]); + } else { + // Fallback if AI didn't return valid JSON or missing keys + $text = LocalAIApi::extractText($response); + echo json_encode(['success' => false, 'error' => 'AI response not in expected JSON format: ' . substr($text, 0, 200)]); + } +} else { + $error_message = $response['error'] ?? 'Unknown AI error'; + echo json_encode(['success' => false, 'error' => $error_message]); +} +?> \ No newline at end of file diff --git a/index.php b/index.php index 45f8b55..f0ed187 100644 --- a/index.php +++ b/index.php @@ -107,6 +107,12 @@ $project_image_url = htmlspecialchars($_SERVER['PROJECT_IMAGE_URL'] ?? ''); +
+ +
@@ -179,6 +185,43 @@ $project_image_url = htmlspecialchars($_SERVER['PROJECT_IMAGE_URL'] ?? ''); }); feather.replace() + + // AI Suggestion Feature + const aiSuggestBtn = document.getElementById('aiSuggestBtn'); + const aiSuggestSpinner = document.getElementById('aiSuggestSpinner'); + const processNameInput = document.getElementById('name'); + const processDescriptionInput = document.getElementById('description'); + const messageArea = document.getElementById('message-area'); + + if (aiSuggestBtn) { + aiSuggestBtn.addEventListener('click', async () => { + aiSuggestBtn.disabled = true; + aiSuggestSpinner.classList.remove('d-none'); + messageArea.innerHTML = ''; // Clear previous messages + + const keyword = processNameInput.value.trim(); + const queryParam = keyword ? `?keyword=${encodeURIComponent(keyword)}` : ''; + + try { + const response = await fetch(`api/generate_process_suggestion.php${queryParam}`); + const data = await response.json(); + + if (data.success) { + processNameInput.value = data.data.name; + processDescriptionInput.value = data.data.description; + messageArea.innerHTML = ''; + } else { + messageArea.innerHTML = ``; + } + } catch (error) { + console.error('Error fetching AI suggestion:', error); + messageArea.innerHTML = ''; + } finally { + aiSuggestBtn.disabled = false; + aiSuggestSpinner.classList.add('d-none'); + } + }); + } \ No newline at end of file