35819-vm/api/chat.php
2025-11-18 11:13:02 +00:00

92 lines
3.4 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
session_start();
require_once __DIR__ . '/../ai/LocalAIApi.php';
require_once __DIR__ . '/../db/config.php';
header('Content-Type: application/json');
$questions = [
"I wake up feeling tired, even after a full nights sleep.",
"By midday, I already feel mentally drained and out of energy.",
"I feel emotionally numb, detached, or on autopilot most of the time.",
"Things that used to excite me now feel pointless or like a chore.",
"I feel irritated or cynical about people I work or study with.",
"I struggle to focus and constantly procrastinate, even on important tasks.",
"I feel guilty for not doing enough, no matter how much I actually do.",
"I often think about quitting everything for a while or disappearing from social media and work.",
"I use caffeine, sugar, nicotine, alcohol, or scrolling to numb out instead of resting.",
"I feel like my life is just surviving, not really living"
];
if (!isset($_SESSION['question_index'])) {
$_SESSION['question_index'] = 0;
$_SESSION['answers'] = [];
}
$response = [];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$data = json_decode(file_get_contents('php://input'), true);
$answer = $data['answer'] ?? null;
if ($answer !== null && $_SESSION['question_index'] < count($questions)) {
$_SESSION['answers'][$_SESSION['question_index']] = $answer;
$_SESSION['question_index']++;
}
}
if ($_SESSION['question_index'] < count($questions)) {
$response['question'] = $questions[$_SESSION['question_index']];
} else {
// Survey is complete, analyze the answers
$formatted_answers = [];
foreach ($_SESSION['answers'] as $index => $answer) {
$formatted_answers[] = "Q: " . $questions[$index] . "\nA: " . $answer;
}
$prompt = <<<EOT
Analyze the user's survey answers and return ONLY a raw JSON object with the specified structure. Do not include any other text or formatting.
User's Answers:
EOT;
$prompt .= "\n" . implode("\n", $formatted_answers);
error_log('Attempting to call AI API for burnout analysis.');
$ai_response = LocalAIApi::createResponse([
'input' => [
['role' => 'system', 'content' => 'You are a burnout analysis expert.'],
['role' => 'user', 'content' => $prompt],
],
]);
error_log('AI API Response: ' . print_r($ai_response, true));
if (!empty($ai_response['success'])) {
$decoded_response = LocalAIApi::decodeJsonFromResponse($ai_response);
$_SESSION['results'] = $decoded_response;
if (isset($_SESSION['user_id'])) {
try {
$pdo = db();
$stmt = $pdo->prepare('INSERT INTO survey_results (user_id, results_json) VALUES (:user_id, :results_json)');
$stmt->execute([
':user_id' => $_SESSION['user_id'],
':results_json' => json_encode($decoded_response)
]);
} catch (PDOException $e) {
// Optionally handle or log the database error
}
}
} else {
// Handle AI API error, maybe provide default results
$_SESSION['results'] = [
'scores' => ['Exhaustion' => 0, 'Cynicism' => 0, 'Inefficacy' => 0],
'recommendations' => ['Could not analyze results at this time. Please try again later.']
];
}
$response['redirect'] = 'results.php';
}
echo json_encode($response);