|
32 | 32 |
|
33 | 33 | from codeflash.discovery.functions_to_optimize import FunctionToOptimize |
34 | 34 | from codeflash.models.ExperimentMetadata import ExperimentMetadata |
35 | | - from codeflash.models.models import AIServiceCodeRepairRequest, AIServiceRefinerRequest |
| 35 | + from codeflash.models.models import ( |
| 36 | + AIServiceAdaptiveOptimizeRequest, |
| 37 | + AIServiceCodeRepairRequest, |
| 38 | + AIServiceRefinerRequest, |
| 39 | + ) |
36 | 40 | from codeflash.result.explanation import Explanation |
37 | 41 |
|
38 | 42 |
|
@@ -249,6 +253,38 @@ def optimize_python_code_line_profiler( # noqa: D417 |
249 | 253 | console.rule() |
250 | 254 | return [] |
251 | 255 |
|
| 256 | + def adaptive_optimize(self, request: AIServiceAdaptiveOptimizeRequest) -> OptimizedCandidate | None: |
| 257 | + try: |
| 258 | + payload = { |
| 259 | + "trace_id": request.trace_id, |
| 260 | + "original_source_code": request.original_source_code, |
| 261 | + "candidates": request.candidates, |
| 262 | + } |
| 263 | + response = self.make_ai_service_request("/adaptive_optimize", payload=payload, timeout=120) |
| 264 | + except (requests.exceptions.RequestException, TypeError) as e: |
| 265 | + logger.exception(f"Error generating adaptive optimized candidates: {e}") |
| 266 | + ph("cli-optimize-error-caught", {"error": str(e)}) |
| 267 | + return None |
| 268 | + |
| 269 | + if response.status_code == 200: |
| 270 | + fixed_optimization = response.json() |
| 271 | + console.rule() |
| 272 | + |
| 273 | + valid_candidates = self._get_valid_candidates([fixed_optimization], OptimizedCandidateSource.ADAPTIVE) |
| 274 | + if not valid_candidates: |
| 275 | + logger.error("Adaptive optimization failed to generate a valid candidate.") |
| 276 | + return None |
| 277 | + |
| 278 | + return valid_candidates[0] |
| 279 | + |
| 280 | + try: |
| 281 | + error = response.json()["error"] |
| 282 | + except Exception: |
| 283 | + error = response.text |
| 284 | + logger.error(f"Error generating optimized candidates: {response.status_code} - {error}") |
| 285 | + ph("cli-optimize-error-response", {"response_status_code": response.status_code, "error": error}) |
| 286 | + return None |
| 287 | + |
252 | 288 | def optimize_python_code_refinement(self, request: list[AIServiceRefinerRequest]) -> list[OptimizedCandidate]: |
253 | 289 | """Optimize the given python code for performance by making a request to the Django endpoint. |
254 | 290 |
|
|
0 commit comments