Passed
Pull Request — master (#6087)
by
unknown
07:41
created

AiController::generateAiken()   A

Complexity

Conditions 5
Paths 15

Size

Total Lines 39
Code Lines 29

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 5
eloc 29
nc 15
nop 1
dl 0
loc 39
rs 9.1448
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
/* For licensing terms, see /license.txt */
6
7
namespace Chamilo\CoreBundle\Controller;
8
9
use Chamilo\CoreBundle\Service\AI\AiProviderFactory;
10
use Symfony\Component\HttpFoundation\JsonResponse;
11
use Symfony\Component\HttpFoundation\Request;
12
use Symfony\Component\Routing\Annotation\Route;
13
14
/**
15
 * Controller to handle AI-related functionalities.
16
 */
17
#[Route('/ai')]
18
class AiController
19
{
20
    private AiProviderFactory $aiProviderFactory;
21
22
    public function __construct(AiProviderFactory $aiProviderFactory)
23
    {
24
        $this->aiProviderFactory = $aiProviderFactory;
25
    }
26
27
    /**
28
     * Generate Aiken questions using AI.
29
     */
30
    #[Route('/generate_aiken', name: 'chamilo_core_ai_generate_aiken', methods: ['POST'])]
31
    public function generateAiken(Request $request): JsonResponse
32
    {
33
        try {
34
            $data = json_decode($request->getContent(), true);
35
            $nQ = (int) ($data['nro_questions'] ?? 0);
36
            $language = (string) ($data['language'] ?? 'en');
37
            $topic = trim((string) ($data['quiz_name'] ?? ''));
38
            $questionType = $data['question_type'] ?? 'multiple_choice';
39
            $aiProvider = $data['ai_provider'] ?? null;
40
41
            if ($nQ <= 0 || empty($topic)) {
42
                return new JsonResponse([
43
                    'success' => false,
44
                    'text' => 'Invalid request parameters. Ensure all fields are filled correctly.',
45
                ], 400);
46
            }
47
48
            $aiService = $this->aiProviderFactory->getProvider($aiProvider);
49
            $questions = $aiService->generateQuestions($topic, $nQ, $questionType, $language);
50
51
            if (str_starts_with($questions, 'Error:')) {
52
                return new JsonResponse([
53
                    'success' => false,
54
                    'text' => $questions,
55
                ], 500);
56
            }
57
58
            return new JsonResponse([
59
                'success' => true,
60
                'text' => trim($questions),
61
            ]);
62
63
        } catch (\Exception $e) {
64
            error_log("AI Request failed: " . $e->getMessage());
65
            return new JsonResponse([
66
                'success' => false,
67
                'text' => "An error occurred while generating questions. Please contact the administrator.",
68
            ], 500);
69
        }
70
    }
71
}
72