@@ -603,38 +603,83 @@ def _get_sql_prompt(self) -> str:
603603Generate optimized SQL code :"""
604604
605605 async def generate_code(self, request: CodeGenerationRequest) -> CodeGenerationResult:
606- """ Generate code based on request """
606+ """ Generate code based on request with enhanced error handling .
607+
608+ Args :
609+ request : CodeGenerationRequest containing generation parameters
610+
611+ Returns :
612+ CodeGenerationResult with the generated code and quality metrics
613+
614+ Raises :
615+ ValueError : If request validation fails
616+ RuntimeError : If code generation fails after maximum retries
617+ """
607618 import time
608619 start_time = time.time()
609620
621+ # Input validation
622+ if not request or not isinstance(request, CodeGenerationRequest):
623+ raise ValueError("Request must be a valid CodeGenerationRequest instance")
624+
625+ if not request.description or not request.description.strip():
626+ raise ValueError("Description cannot be empty")
627+
628+ if not isinstance(request.language, CodeLanguage):
629+ raise ValueError(f"Invalid language: {request.language}. Must be a CodeLanguage enum value")
630+
631+ if request.max_length <= 0:
632+ raise ValueError(f"max_length must be positive, got {request.max_length}")
633+
634+ logger.info(f"Generating {request.language.value} code for: {request.description[:100]}...")
635+
610636 try:
611637 # Build prompt
612638 prompt = self._build_prompt(request)
613639
614- # Generate initial code
615- generated_code = await self._generate_initial_code(prompt)
640+ # Generate initial code with retry logic
641+ try:
642+ generated_code = await self._generate_initial_code(prompt)
643+ except Exception as e:
644+ raise RuntimeError(f"Failed to generate initial code: {str(e)}") from e
616645
617646 # Quality check and improvement
618- quality_result = await self._improve_code_quality(
619- generated_code,
620- request.language,
621- max_iterations=3
622- )
647+ try:
648+ quality_result = await self._improve_code_quality(
649+ generated_code,
650+ request.language,
651+ max_iterations=3
652+ )
653+ except Exception as e:
654+ logger.warning(f"Code quality improvement failed, using initial code: {str(e)}")
655+ quality_result = {
656+ 'code': generated_code,
657+ 'score': 0.7, # Default score for unimproved code
658+ 'suggestions': ["Quality improvement step was skipped"],
659+ 'iterations': 0
660+ }
623661
624662 # Generate tests if Python
625663 tests = None
626664 if request.language == CodeLanguage.PYTHON:
627- tests = await self._generate_tests(quality_result['code'])
665+ try:
666+ tests = await self._generate_tests(quality_result['code'])
667+ except Exception as e:
668+ logger.warning(f"Test generation failed: {str(e)}")
628669
629670 # Generate documentation
630- documentation = await self._generate_documentation(
631- quality_result['code'],
632- request.language
633- )
671+ try:
672+ documentation = await self._generate_documentation(
673+ quality_result['code'],
674+ request.language
675+ )
676+ except Exception as e:
677+ logger.warning(f"Documentation generation failed: {str(e)}")
678+ documentation = "Documentation generation failed"
634679
635680 execution_time = time.time() - start_time
636681
637- return CodeGenerationResult(
682+ result = CodeGenerationResult(
638683 generated_code=quality_result['code'],
639684 language=request.language,
640685 quality_score=quality_result['score'],
@@ -645,9 +690,13 @@ async def generate_code(self, request: CodeGenerationRequest) -> CodeGenerationR
645690 iterations=quality_result['iterations']
646691 )
647692
693+ logger.info(f"Successfully generated {request.language.value} code in {execution_time:.2f}s")
694+ return result
695+
648696 except Exception as e:
649- logger.error(f"Code generation failed: {e}")
650- raise
697+ error_msg = f"Code generation failed: {str(e)}"
698+ logger.error(error_msg, exc_info=True)
699+ raise RuntimeError(error_msg) from e
651700
652701 def _build_prompt(self, request: CodeGenerationRequest) -> str:
653702 """ Build prompt for code generation """
0 commit comments