File size: 2,058 Bytes
b389aae
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import logging
import subprocess
import sys
from typing import Dict, Any

class CodeGenerationNeuron:
    """
    Neurone de génération et d'exécution de code.
    Attention: en production, il faut sandboxer l'exécution (Docker).
    """

    def __init__(self):
        self.logger = logging.getLogger("code_generation_neuron")

    async def initialize(self):
        self.logger.info("💻 Initialisation du neurone de génération de code...")
        return True

    async def generate_and_execute(self, problem: str, context: Dict[str, Any]) -> Dict[str, Any]:
        """
        Génère et exécute du code pour résoudre un problème.
        """
        # Génération du code
        code = await self._generate_code(problem, context)

        # Exécution du code
        execution_result = await self._execute_code(code)

        return {
            'generated_code': code,
            'execution_result': execution_result
        }

    async def _generate_code(self, problem: str, context: Dict[str, Any]) -> str:
        # Pour l'instant, on génère un code simple basé sur le problème
        # Dans une version future, on utilisera un modèle de langage
        if "calcul" in problem.lower():
            return "print(2 + 2)"
        else:
            return "print('Hello, World!')"

    async def _execute_code(self, code: str) -> Dict[str, Any]:
        try:
            # Exécution dans un processus séparé
            result = subprocess.run([sys.executable, "-c", code], capture_output=True, text=True, timeout=30)
            return {
                'stdout': result.stdout,
                'stderr': result.stderr,
                'returncode': result.returncode
            }
        except subprocess.TimeoutExpired:
            return {
                'stdout': '',
                'stderr': 'Timeout',
                'returncode': -1
            }
        except Exception as e:
            return {
                'stdout': '',
                'stderr': str(e),
                'returncode': -1
            }