Skip to content

Commit 9c03391

Browse files
committed
count properly
1 parent 04ff30a commit 9c03391

3 files changed

Lines changed: 13 additions & 25 deletions

File tree

codeflash/api/aiservice.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import os
55
import platform
66
import time
7+
from itertools import count
78
from typing import TYPE_CHECKING, Any, cast
89

910
import requests
@@ -39,6 +40,11 @@ class AiServiceClient:
3940
def __init__(self) -> None:
4041
self.base_url = self.get_aiservice_base_url()
4142
self.headers = {"Authorization": f"Bearer {get_codeflash_api_key()}", "Connection": "close"}
43+
self.llm_call_counter = count(1)
44+
45+
def get_next_sequence(self) -> int:
46+
"""Get the next LLM call sequence number."""
47+
return next(self.llm_call_counter)
4248

4349
def get_aiservice_base_url(self) -> str:
4450
if os.environ.get("CODEFLASH_AIS_SERVER", default="prod").lower() == "local":
@@ -151,7 +157,7 @@ def optimize_python_code( # noqa: D417
151157
"repo_name": git_repo_name,
152158
"is_async": is_async,
153159
"lsp_mode": is_LSP_enabled(),
154-
"call_sequence": 1,
160+
"call_sequence": self.get_next_sequence(),
155161
}
156162
logger.debug(f"Sending optimize request: trace_id={trace_id}, lsp_mode={payload['lsp_mode']}")
157163

@@ -218,7 +224,7 @@ def optimize_python_code_line_profiler( # noqa: D417
218224
"experiment_metadata": experiment_metadata,
219225
"codeflash_version": codeflash_version,
220226
"lsp_mode": is_LSP_enabled(),
221-
"call_sequence": 1,
227+
"call_sequence": self.get_next_sequence(),
222228
}
223229

224230
try:
@@ -269,7 +275,7 @@ def optimize_python_code_refinement(self, request: list[AIServiceRefinerRequest]
269275
"trace_id": opt.trace_id,
270276
"function_references": opt.function_references,
271277
"python_version": platform.python_version(),
272-
"call_sequence": opt.call_sequence,
278+
"call_sequence": self.get_next_sequence(),
273279
}
274280
for opt in request
275281
]
@@ -359,7 +365,6 @@ def get_new_explanation( # noqa: D417
359365
throughput_improvement: str | None = None,
360366
function_references: str | None = None,
361367
codeflash_version: str = codeflash_version,
362-
call_sequence: int | None = None,
363368
) -> str:
364369
"""Optimize the given python code for performance by making a request to the Django endpoint.
365370
@@ -405,7 +410,7 @@ def get_new_explanation( # noqa: D417
405410
"throughput_improvement": throughput_improvement,
406411
"function_references": function_references,
407412
"codeflash_version": codeflash_version,
408-
"call_sequence": call_sequence,
413+
"call_sequence": self.get_next_sequence(),
409414
}
410415
logger.info("loading|Generating explanation")
411416
console.rule()
@@ -533,7 +538,6 @@ def generate_regression_tests( # noqa: D417
533538
test_timeout: int,
534539
trace_id: str,
535540
test_index: int,
536-
call_sequence: int | None = None,
537541
) -> tuple[str, str, str] | None:
538542
"""Generate regression tests for the given function by making a request to the Django endpoint.
539543
@@ -569,7 +573,7 @@ def generate_regression_tests( # noqa: D417
569573
"python_version": platform.python_version(),
570574
"codeflash_version": codeflash_version,
571575
"is_async": function_to_optimize.is_async,
572-
"call_sequence": call_sequence,
576+
"call_sequence": self.get_next_sequence(),
573577
}
574578
try:
575579
response = self.make_ai_service_request("/testgen", payload=payload, timeout=90)
@@ -610,7 +614,6 @@ def get_optimization_review(
610614
replay_tests: str,
611615
concolic_tests: str, # noqa: ARG002
612616
calling_fn_details: str,
613-
call_sequence: int | None = None,
614617
) -> str:
615618
"""Compute the optimization review of current Pull Request.
616619
@@ -626,7 +629,6 @@ def get_optimization_review(
626629
root_dir: Path -> path of git directory
627630
concolic_tests: str -> concolic_tests (not used)
628631
calling_fn_details: str -> filenames and definitions of functions which call the function_to_optimize
629-
call_sequence: int | None -> sequence number for multi-model calls
630632
631633
Returns:
632634
-------
@@ -658,7 +660,7 @@ def get_optimization_review(
658660
"codeflash_version": codeflash_version,
659661
"calling_fn_details": calling_fn_details,
660662
"python_version": platform.python_version(),
661-
"call_sequence": call_sequence,
663+
"call_sequence": self.get_next_sequence(),
662664
}
663665
console.rule()
664666
try:

codeflash/optimization/function_optimizer.py

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -327,8 +327,6 @@ def __init__(
327327
self.optimization_review = ""
328328
self.future_all_code_repair: list[concurrent.futures.Future] = []
329329
self.repair_counter = 0 # track how many repairs we did for each function
330-
# Counter for post-optimization LLM calls (explanation, review) - optimization calls are handled by backend
331-
self.post_optimization_call_count = 0
332330

333331
def can_be_optimized(self) -> Result[tuple[bool, CodeOptimizationContext, dict[Path, str]], str]:
334332
should_run_experiment = self.experiment_id is not None
@@ -1655,10 +1653,6 @@ def process_review(
16551653
)
16561654
throughput_improvement_str = f"{throughput_improvement_value * 100:.1f}%"
16571655

1658-
# Explanation call sequence for tracking
1659-
self.post_optimization_call_count += 1
1660-
explanation_call_sequence = self.post_optimization_call_count
1661-
16621656
new_explanation_raw_str = self.aiservice_client.get_new_explanation(
16631657
source_code=code_context.read_writable_code.flat,
16641658
dependency_code=code_context.read_only_context_code,
@@ -1676,7 +1670,6 @@ def process_review(
16761670
optimized_throughput=optimized_throughput_str,
16771671
throughput_improvement=throughput_improvement_str,
16781672
function_references=function_references,
1679-
call_sequence=explanation_call_sequence,
16801673
)
16811674
new_explanation = Explanation(
16821675
raw_explanation_message=new_explanation_raw_str or explanation.raw_explanation_message,
@@ -1712,13 +1705,9 @@ def process_review(
17121705
staging_review = self.args.staging_review
17131706
opt_review_response = ""
17141707
# this will now run regardless of pr, staging review flags
1715-
# Review call sequence for tracking
1716-
self.post_optimization_call_count += 1
1717-
review_call_sequence = self.post_optimization_call_count
1718-
17191708
try:
17201709
opt_review_response = self.aiservice_client.get_optimization_review(
1721-
**data, calling_fn_details=function_references, call_sequence=review_call_sequence
1710+
**data, calling_fn_details=function_references
17221711
)
17231712
except Exception as e:
17241713
logger.debug(f"optimization review response failed, investigate {e}")
@@ -2223,7 +2212,6 @@ def submit_test_generation_tasks(
22232212
test_index,
22242213
test_path,
22252214
test_perf_path,
2226-
call_sequence=test_index + 1,
22272215
)
22282216
for test_index, (test_path, test_perf_path) in enumerate(
22292217
zip(generated_test_paths, generated_perf_test_paths)

codeflash/verification/verifier.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ def generate_tests(
2727
test_index: int,
2828
test_path: Path,
2929
test_perf_path: Path,
30-
call_sequence: int | None = None,
3130
) -> tuple[str, str, Path] | None:
3231
# TODO: Sometimes this recreates the original Class definition. This overrides and messes up the original
3332
# class import. Remove the recreation of the class definition
@@ -43,7 +42,6 @@ def generate_tests(
4342
test_timeout=test_timeout,
4443
trace_id=function_trace_id,
4544
test_index=test_index,
46-
call_sequence=call_sequence,
4745
)
4846
if response and isinstance(response, tuple) and len(response) == 3:
4947
generated_test_source, instrumented_behavior_test_source, instrumented_perf_test_source = response

0 commit comments

Comments
 (0)