Skip to content

Commit 5a7c356

Browse files
author
Codeflash Bot
committed
need to test now
1 parent 142da4c commit 5a7c356

File tree

3 files changed

+84
-1
lines changed

3 files changed

+84
-1
lines changed

codeflash/api/aiservice.py

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
from codeflash.discovery.functions_to_optimize import FunctionToOptimize
2929
from codeflash.models.ExperimentMetadata import ExperimentMetadata
30-
from codeflash.models.models import AIServiceRefinerRequest
30+
from codeflash.models.models import AIServiceCodeRepairRequest, AIServiceRefinerRequest
3131
from codeflash.result.explanation import Explanation
3232

3333

@@ -294,6 +294,59 @@ def optimize_python_code_refinement(self, request: list[AIServiceRefinerRequest]
294294
console.rule()
295295
return []
296296

297+
def optimize_python_code_repair(self, request: list[AIServiceCodeRepairRequest]) -> list[OptimizedCandidate]:
298+
"""Optimize the given python code for performance by making a request to the Django endpoint.
299+
300+
Args:
301+
request: A list of optimization candidate details for refinement
302+
303+
Returns:
304+
-------
305+
- List[OptimizationCandidate]: A list of Optimization Candidates.
306+
307+
"""
308+
payload = [
309+
{
310+
"optimization_id": opt.optimization_id,
311+
"original_source_code": opt.original_source_code,
312+
"modified_source_code": opt.modified_source_code,
313+
"trace_id": opt.trace_id,
314+
}
315+
for opt in request
316+
]
317+
# logger.debug(f"Repair {len(request)} optimizations…")
318+
console.rule()
319+
try:
320+
response = self.make_ai_service_request("/code_repair", payload=payload, timeout=120)
321+
except requests.exceptions.RequestException as e:
322+
logger.exception(f"Error generating optimization repair: {e}")
323+
ph("cli-optimize-error-caught", {"error": str(e)})
324+
return []
325+
326+
if response.status_code == 200:
327+
refined_optimizations = response.json()["code_repairs"]
328+
logger.debug(f"Generated {len(refined_optimizations)} candidate refinements.")
329+
console.rule()
330+
331+
refinements = self._get_valid_candidates(refined_optimizations)
332+
return [
333+
OptimizedCandidate(
334+
source_code=c.source_code,
335+
explanation=c.explanation,
336+
optimization_id=c.optimization_id[:-4] + "cdrp",
337+
)
338+
for c in refinements
339+
]
340+
341+
try:
342+
error = response.json()["error"]
343+
except Exception:
344+
error = response.text
345+
logger.error(f"Error generating optimized candidates: {response.status_code} - {error}")
346+
ph("cli-optimize-error-response", {"response_status_code": response.status_code, "error": error})
347+
console.rule()
348+
return []
349+
297350
def get_new_explanation( # noqa: D417
298351
self,
299352
source_code: str,

codeflash/models/models.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,15 @@ class AIServiceRefinerRequest:
4848
function_references: str | None = None
4949

5050

51+
@dataclass(frozen=True)
52+
class AIServiceCodeRepairRequest:
53+
optimization_id: str
54+
original_source_code: str
55+
modified_source_code: str
56+
test_details: str
57+
trace_id: str
58+
59+
5160
# If the method spam is in the class Ham, which is at the top level of the module eggs in the package foo, the fully
5261
# qualified name of the method is foo.eggs.Ham.spam, its qualified name is Ham.spam, and its name is spam. The full name
5362
# of the module is foo.eggs.

codeflash/optimization/function_optimizer.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
from codeflash.lsp.lsp_message import LspCodeMessage, LspMarkdownMessage, LSPMessageId
7171
from codeflash.models.ExperimentMetadata import ExperimentMetadata
7272
from codeflash.models.models import (
73+
AIServiceCodeRepairRequest,
7374
BestOptimization,
7475
CodeOptimizationContext,
7576
GeneratedTests,
@@ -862,6 +863,26 @@ def refine_optimizations(
862863
]
863864
return executor.submit(ai_service_client.optimize_python_code_refinement, request=request)
864865

866+
def code_repair_optimizations(
867+
self,
868+
original_source_code: str,
869+
modified_source_code: str,
870+
test_details: str,
871+
trace_id: str,
872+
ai_service_client: AiServiceClient,
873+
executor: concurrent.futures.ThreadPoolExecutor,
874+
) -> concurrent.futures.Future:
875+
request = [
876+
AIServiceCodeRepairRequest(
877+
optimization_id="",
878+
original_source_code=original_source_code,
879+
modified_source_code=modified_source_code,
880+
test_details=test_details,
881+
trace_id=trace_id,
882+
)
883+
]
884+
return executor.submit(ai_service_client.optimize_python_code_repair, request=request)
885+
865886
def log_successful_optimization(
866887
self, explanation: Explanation, generated_tests: GeneratedTestsList, exp_type: str
867888
) -> None:

0 commit comments

Comments
 (0)