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

AiController   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 33
dl 0
loc 52
rs 10
c 1
b 0
f 0
wmc 6

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A generateAiken() 0 39 5
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