mvp.5
This commit is contained in:
parent
e1227cfbcd
commit
6d001f8a7f
33
api/generate_process_suggestion.php
Normal file
33
api/generate_process_suggestion.php
Normal file
@ -0,0 +1,33 @@
|
||||
<?php
|
||||
header('Content-Type: application/json');
|
||||
|
||||
require_once __DIR__ . '/../ai/LocalAIApi.php';
|
||||
|
||||
$keyword = $_GET['keyword'] ?? 'new process';
|
||||
|
||||
$prompt = "Generate a creative and concise name and a short description for a process related to '" . htmlspecialchars($keyword) . "'. Respond in JSON format with 'name' and 'description' keys. Example: {"name": "Automated Workflow Orchestrator", "description": "Manages and streamlines complex business workflows."}";
|
||||
|
||||
$params = [
|
||||
'input' => [
|
||||
['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]);
|
||||
}
|
||||
?>
|
||||
43
index.php
43
index.php
@ -107,6 +107,12 @@ $project_image_url = htmlspecialchars($_SERVER['PROJECT_IMAGE_URL'] ?? '');
|
||||
<label for="description" class="form-label">Description</label>
|
||||
<textarea class="form-control" id="description" name="description" rows="4" required></textarea>
|
||||
</div>
|
||||
<div class="mb-3 text-end">
|
||||
<button type="button" class="btn btn-sm btn-outline-secondary" id="aiSuggestBtn">
|
||||
<span id="aiSuggestSpinner" class="spinner-border spinner-border-sm d-none" role="status" aria-hidden="true"></span>
|
||||
Suggest with AI
|
||||
</button>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary w-100">Add Process</button>
|
||||
</form>
|
||||
</div>
|
||||
@ -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 = '<div class="alert alert-success alert-dismissible fade show" role="alert">AI suggestion generated successfully!<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>';
|
||||
} else {
|
||||
messageArea.innerHTML = `<div class="alert alert-danger alert-dismissible fade show" role="alert">Failed to get AI suggestion: ${data.error}<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>`;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error fetching AI suggestion:', error);
|
||||
messageArea.innerHTML = '<div class="alert alert-danger alert-dismissible fade show" role="alert">An error occurred while fetching AI suggestion. Please try again.<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>';
|
||||
} finally {
|
||||
aiSuggestBtn.disabled = false;
|
||||
aiSuggestSpinner.classList.add('d-none');
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
x
Reference in New Issue
Block a user