Skip to content

Commit 522e474

Browse files
committed
quick todos, modify prompts and function arguments
1 parent eb3274a commit 522e474

File tree

3 files changed

+82
-2
lines changed

3 files changed

+82
-2
lines changed

codeflash/api/aiservice.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,65 @@ def optimize_python_code_line_profiler(
204204
console.rule()
205205
return []
206206

207+
def get_new_explanation(
208+
self,
209+
source_code: str,
210+
dependency_code: str,
211+
trace_id: str,
212+
num_candidates: int = 10,
213+
experiment_metadata: ExperimentMetadata | None = None,
214+
existing_explanation: str = "",
215+
) -> str:
216+
"""Optimize the given python code for performance by making a request to the Django endpoint.
217+
218+
Parameters
219+
----------
220+
- source_code (str): The python code to optimize.
221+
- dependency_code (str): The dependency code used as read-only context for the optimization
222+
- trace_id (str): Trace id of optimization run
223+
- num_candidates (int): Number of optimization variants to generate. Default is 10.
224+
- experiment_metadata (Optional[ExperimentalMetadata, None]): Any available experiment metadata for this optimization
225+
- existing_explanation (str): Existing explanation from AIservice call
226+
227+
Returns
228+
-------
229+
- List[OptimizationCandidate]: A list of Optimization Candidates.
230+
231+
"""
232+
payload = {
233+
"source_code": source_code,
234+
"dependency_code": dependency_code,
235+
"num_variants": num_candidates,
236+
"trace_id": trace_id,
237+
"python_version": platform.python_version(),
238+
"experiment_metadata": experiment_metadata,
239+
"codeflash_version": codeflash_version,
240+
"existing_explanation": existing_explanation,
241+
}
242+
243+
logger.info("Generating optimized candidates…")
244+
console.rule()
245+
try:
246+
response = self.make_ai_service_request("/explain", payload=payload, timeout=600)
247+
except requests.exceptions.RequestException as e:
248+
logger.exception(f"Error generating optimized candidates: {e}")
249+
ph("cli-optimize-error-caught", {"error": str(e)})
250+
return ""
251+
252+
if response.status_code == 200:
253+
explanation = response.json()["explanation"]
254+
logger.info(f"New Explanation: {explanation}")
255+
console.rule()
256+
return explanation
257+
try:
258+
error = response.json()["error"]
259+
except Exception:
260+
error = response.text
261+
logger.error(f"Error generating optimized candidates: {response.status_code} - {error}")
262+
ph("cli-optimize-error-response", {"response_status_code": response.status_code, "error": error})
263+
console.rule()
264+
return ""
265+
207266

208267
def log_results(
209268
self,

codeflash/optimization/function_optimizer.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -261,9 +261,14 @@ def optimize_function(self) -> Result[BestOptimization, str]:
261261
best_optimization.candidate.explanation, title="Best Candidate Explanation", border_style="blue"
262262
)
263263
)
264-
get_new_explanation = "abc"
264+
#could possibly have it in the best optimization dataclass
265+
new_explanation = self.aiservice_client.get_new_explanation(source_code=code_context.read_writable_code,
266+
dependency_code=code_context.read_only_context_code,
267+
trace_id=self.function_trace_id,
268+
num_candidates=1,
269+
experiment_metadata=None, existing_explanation=best_optimization.candidate.explanation)
265270
explanation = Explanation(
266-
raw_explanation_message=best_optimization.candidate.explanation,
271+
raw_explanation_message=new_explanation if new_explanation!="" else best_optimization.candidate.explanation,
267272
winning_behavioral_test_results=best_optimization.winning_behavioral_test_results,
268273
winning_benchmarking_test_results=best_optimization.winning_benchmarking_test_results,
269274
original_runtime_ns=original_code_baseline.runtime,

tests/test_explain_api.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from codeflash.api.aiservice import AiServiceClient
2+
from codeflash.models.ExperimentMetadata import ExperimentMetadata
3+
def test_explain_api():
4+
aiservice = AiServiceClient()
5+
source_code: str = "a"
6+
dependency_code: str = "b"
7+
trace_id: str = "d5822364-7617-4389-a4fc-64602a00b714"
8+
num_candidates: int = 1
9+
experiment_metadata: ExperimentMetadata | None = None
10+
existing_explanation: str = "some explanation"
11+
new_explanation = aiservice.get_new_explanation(source_code=source_code,
12+
dependency_code=dependency_code,
13+
trace_id=trace_id,
14+
num_candidates=num_candidates,
15+
experiment_metadata=experiment_metadata, existing_explanation=existing_explanation)
16+
assert new_explanation.__len__()>0

0 commit comments

Comments
 (0)