from schemas import CodeXRequest, CodeXResponse, CodeTaskType from code_router import detect_task_type from prompt_builder import build_prompt from model_client import model_client from response_formatter import build_response, build_error_response from config import settings def should_use_retrieval(task_type: CodeTaskType, request: CodeXRequest) -> bool: if not request.use_retrieval: return False if task_type == CodeTaskType.FIX and settings.ENABLE_RETRIEVAL_FOR_FIX: return True if task_type == CodeTaskType.GENERATE and settings.ENABLE_RETRIEVAL_FOR_GENERATE: return True if task_type == CodeTaskType.EXPLAIN and settings.ENABLE_RETRIEVAL_FOR_EXPLAIN: return True return False def get_retrieved_evidence(task_type: CodeTaskType, request: CodeXRequest): return [] def process_codex_request(request: CodeXRequest) -> CodeXResponse: try: task_type = detect_task_type( message=request.message, code=request.code, error_message=request.error_message, mode_hint=request.mode, ) evidence_list = [] if should_use_retrieval(task_type, request): evidence_list = get_retrieved_evidence(task_type, request) prompt = build_prompt( task_type=task_type, message=request.message, code=request.code, error_message=request.error_message, language=request.language, framework=request.framework, previous_context=request.previous_context, evidence_list=evidence_list, ) model_output, model_used, used_fallback = model_client.generate(prompt) return build_response( task_type=task_type, model_output=model_output, model_used=model_used, used_fallback=used_fallback, ) except Exception as e: fallback_task = request.mode if request.mode else CodeTaskType.UNKNOWN return build_error_response( task_type=fallback_task, error_message=str(e), )