|
18 | 18 | from codeflash.code_utils.time_utils import humanize_runtime |
19 | 19 | from codeflash.lsp.helpers import is_LSP_enabled |
20 | 20 | from codeflash.models.ExperimentMetadata import ExperimentMetadata |
21 | | -from codeflash.models.models import AIServiceRefinerRequest, CodeStringsMarkdown, OptimizedCandidate |
| 21 | +from codeflash.models.models import ( |
| 22 | + AIServiceRefinerRequest, |
| 23 | + CodeStringsMarkdown, |
| 24 | + OptimizedCandidate, |
| 25 | + OptimizedCandidateSource, |
| 26 | +) |
22 | 27 | from codeflash.telemetry.posthog_cf import ph |
23 | 28 | from codeflash.version import __version__ as codeflash_version |
24 | 29 |
|
@@ -86,15 +91,20 @@ def make_ai_service_request( |
86 | 91 | # response.raise_for_status() # Will raise an HTTPError if the HTTP request returned an unsuccessful status code |
87 | 92 | return response |
88 | 93 |
|
89 | | - def _get_valid_candidates(self, optimizations_json: list[dict[str, Any]]) -> list[OptimizedCandidate]: |
| 94 | + def _get_valid_candidates( |
| 95 | + self, optimizations_json: list[dict[str, Any]], source: OptimizedCandidateSource |
| 96 | + ) -> list[OptimizedCandidate]: |
90 | 97 | candidates: list[OptimizedCandidate] = [] |
91 | 98 | for opt in optimizations_json: |
92 | 99 | code = CodeStringsMarkdown.parse_markdown_code(opt["source_code"]) |
93 | 100 | if not code.code_strings: |
94 | 101 | continue |
95 | 102 | candidates.append( |
96 | 103 | OptimizedCandidate( |
97 | | - source_code=code, explanation=opt["explanation"], optimization_id=opt["optimization_id"] |
| 104 | + source_code=code, |
| 105 | + explanation=opt["explanation"], |
| 106 | + optimization_id=opt["optimization_id"], |
| 107 | + source=source, |
98 | 108 | ) |
99 | 109 | ) |
100 | 110 | return candidates |
@@ -157,7 +167,7 @@ def optimize_python_code( # noqa: D417 |
157 | 167 | console.rule() |
158 | 168 | end_time = time.perf_counter() |
159 | 169 | logger.debug(f"!lsp|Generating possible optimizations took {end_time - start_time:.2f} seconds.") |
160 | | - return self._get_valid_candidates(optimizations_json) |
| 170 | + return self._get_valid_candidates(optimizations_json, OptimizedCandidateSource.OPTIMIZE) |
161 | 171 | try: |
162 | 172 | error = response.json()["error"] |
163 | 173 | except Exception: |
@@ -222,7 +232,7 @@ def optimize_python_code_line_profiler( # noqa: D417 |
222 | 232 | f"!lsp|Generated {len(optimizations_json)} candidate optimizations using line profiler information." |
223 | 233 | ) |
224 | 234 | console.rule() |
225 | | - return self._get_valid_candidates(optimizations_json) |
| 235 | + return self._get_valid_candidates(optimizations_json, OptimizedCandidateSource.OPTIMIZE_LP) |
226 | 236 | try: |
227 | 237 | error = response.json()["error"] |
228 | 238 | except Exception: |
@@ -275,15 +285,7 @@ def optimize_python_code_refinement(self, request: list[AIServiceRefinerRequest] |
275 | 285 | logger.debug(f"Generated {len(refined_optimizations)} candidate refinements.") |
276 | 286 | console.rule() |
277 | 287 |
|
278 | | - refinements = self._get_valid_candidates(refined_optimizations) |
279 | | - return [ |
280 | | - OptimizedCandidate( |
281 | | - source_code=c.source_code, |
282 | | - explanation=c.explanation, |
283 | | - optimization_id=c.optimization_id[:-4] + "refi", |
284 | | - ) |
285 | | - for c in refinements |
286 | | - ] |
| 288 | + return self._get_valid_candidates(refined_optimizations, OptimizedCandidateSource.REFINE) |
287 | 289 |
|
288 | 290 | try: |
289 | 291 | error = response.json()["error"] |
@@ -324,7 +326,7 @@ def optimize_python_code_repair(self, request: AIServiceCodeRepairRequest) -> Op |
324 | 326 | fixed_optimization = response.json() |
325 | 327 | console.rule() |
326 | 328 |
|
327 | | - valid_candidates = self._get_valid_candidates([fixed_optimization]) |
| 329 | + valid_candidates = self._get_valid_candidates([fixed_optimization], OptimizedCandidateSource.REPAIR) |
328 | 330 | if not valid_candidates: |
329 | 331 | logger.error("Code repair failed to generate a valid candidate.") |
330 | 332 | return None |
|
0 commit comments