Skip to content

Commit 07a9365

Browse files
send&recieve markdown code
1 parent d53be61 commit 07a9365

File tree

6 files changed

+39
-39
lines changed

6 files changed

+39
-39
lines changed

codeflash/api/aiservice.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ def make_ai_service_request(
7373
url = f"{self.base_url}/ai{endpoint}"
7474
if method.upper() == "POST":
7575
json_payload = json.dumps(payload, indent=None, default=pydantic_encoder)
76+
print(f"========JSON PAYLOAD FOR {url}==============")
77+
print(f"Payload: {json_payload}")
78+
print("======================")
7679
headers = {**self.headers, "Content-Type": "application/json"}
7780
response = requests.post(url, data=json_payload, headers=headers, timeout=timeout)
7881
else:
@@ -136,7 +139,7 @@ def optimize_python_code( # noqa: D417
136139
logger.debug(f"Generating optimizations took {end_time - start_time:.2f} seconds.")
137140
return [
138141
OptimizedCandidate(
139-
source_code=CodeStringsMarkdown.parse_flattened_code(opt["source_code"]),
142+
source_code=CodeStringsMarkdown.parse_markdown_code(opt["source_code"]),
140143
explanation=opt["explanation"],
141144
optimization_id=opt["optimization_id"],
142145
)
@@ -206,7 +209,7 @@ def optimize_python_code_line_profiler( # noqa: D417
206209
console.rule()
207210
return [
208211
OptimizedCandidate(
209-
source_code=CodeStringsMarkdown.parse_flattened_code(opt["source_code"]),
212+
source_code=CodeStringsMarkdown.parse_markdown_code(opt["source_code"]),
210213
explanation=opt["explanation"],
211214
optimization_id=opt["optimization_id"],
212215
)
@@ -263,7 +266,7 @@ def optimize_python_code_refinement(self, request: list[AIServiceRefinerRequest]
263266
console.rule()
264267
return [
265268
OptimizedCandidate(
266-
source_code=CodeStringsMarkdown.parse_flattened_code(opt["source_code"]),
269+
source_code=CodeStringsMarkdown.parse_markdown_code(opt["source_code"]),
267270
explanation=opt["explanation"],
268271
optimization_id=opt["optimization_id"][:-4] + "refi",
269272
)

codeflash/models/models.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ def get_code_block_splitter(file_path: Path) -> str:
165165
return f"{LINE_SPLITTER_MARKER_PREFIX}{file_path}"
166166

167167

168-
splitter_pattern = re.compile(f"^{LINE_SPLITTER_MARKER_PREFIX}([^\n]+)\n", re.MULTILINE | re.DOTALL)
168+
markdown_pattern = re.compile(r"```python:([^\n]+)\n(.*?)\n```", re.DOTALL)
169169

170170

171171
class CodeStringsMarkdown(BaseModel):
@@ -200,15 +200,12 @@ def file_to_path(self) -> dict[str, str]:
200200
return self._cache["file_to_path"]
201201

202202
@staticmethod
203-
def parse_flattened_code(flat_code: str) -> CodeStringsMarkdown:
204-
matches = list(splitter_pattern.finditer(flat_code))
203+
def parse_markdown_code(markdown_code: str) -> CodeStringsMarkdown:
204+
matches = markdown_pattern.findall(markdown_code)
205205
results = CodeStringsMarkdown()
206-
for i, match in enumerate(matches):
207-
start = match.end()
208-
end = matches[i + 1].start() if i + 1 < len(matches) else len(flat_code)
209-
file_path = match.group(1).strip()
210-
code = flat_code[start:end].lstrip("\n")
211-
results.code_strings.append(CodeString(code=code, file_path=Path(file_path)))
206+
for file_path, code in matches:
207+
path = file_path.strip()
208+
results.code_strings.append(CodeString(code=code, file_path=Path(path)))
212209
return results
213210

214211

codeflash/optimization/function_optimizer.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ def determine_best_candidate(
384384
ai_service_client = self.aiservice_client if exp_type == "EXP0" else self.local_aiservice_client
385385
future_line_profile_results = executor.submit(
386386
ai_service_client.optimize_python_code_line_profiler,
387-
source_code=code_context.read_writable_code.flat,
387+
source_code=code_context.read_writable_code.markdown,
388388
dependency_code=code_context.read_only_context_code,
389389
trace_id=self.function_trace_id[:-4] + exp_type if self.experiment_id else self.function_trace_id,
390390
line_profiler_results=original_code_baseline.line_profile_results["str_out"],
@@ -611,10 +611,10 @@ def refine_optimizations(
611611
request = [
612612
AIServiceRefinerRequest(
613613
optimization_id=opt.candidate.optimization_id,
614-
original_source_code=code_context.read_writable_code.flat,
614+
original_source_code=code_context.read_writable_code.markdown,
615615
read_only_dependency_code=code_context.read_only_context_code,
616616
original_code_runtime=humanize_runtime(original_code_baseline.runtime),
617-
optimized_source_code=opt.candidate.source_code.flat,
617+
optimized_source_code=opt.candidate.source_code.markdown,
618618
optimized_explanation=opt.candidate.explanation,
619619
optimized_code_runtime=humanize_runtime(opt.runtime),
620620
speedup=f"{int(performance_gain(original_runtime_ns=original_code_baseline.runtime, optimized_runtime_ns=opt.runtime) * 100)}%",
@@ -894,7 +894,7 @@ def generate_tests_and_optimizations(
894894
)
895895
future_optimization_candidates = executor.submit(
896896
self.aiservice_client.optimize_python_code,
897-
read_writable_code.flat,
897+
read_writable_code.markdown,
898898
read_only_context_code,
899899
self.function_trace_id[:-4] + "EXP0" if run_experiment else self.function_trace_id,
900900
N_CANDIDATES,
@@ -913,7 +913,7 @@ def generate_tests_and_optimizations(
913913
if run_experiment:
914914
future_candidates_exp = executor.submit(
915915
self.local_aiservice_client.optimize_python_code,
916-
read_writable_code.flat,
916+
read_writable_code.markdown,
917917
read_only_context_code,
918918
self.function_trace_id[:-4] + "EXP1",
919919
N_CANDIDATES,

tests/test_code_replacement.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def sorter(arr):
7373
original_helper_code[helper_function_path] = helper_code
7474
func_optimizer.args = Args()
7575
func_optimizer.replace_function_and_helpers_with_optimized_code(
76-
code_context=code_context, optimized_code=CodeStringsMarkdown.parse_flattened_code(optimized_code), original_helper_code=original_helper_code
76+
code_context=code_context, optimized_code=CodeStringsMarkdown.parse_markdown_code(optimized_code), original_helper_code=original_helper_code
7777
)
7878
final_output = code_path.read_text(encoding="utf-8")
7979
assert "inconsequential_var = '123'" in final_output
@@ -1742,7 +1742,7 @@ def new_function2(value):
17421742
original_helper_code[helper_function_path] = helper_code
17431743
func_optimizer.args = Args()
17441744
func_optimizer.replace_function_and_helpers_with_optimized_code(
1745-
code_context=code_context, optimized_code=CodeStringsMarkdown.parse_flattened_code(optimized_code), original_helper_code=original_helper_code
1745+
code_context=code_context, optimized_code=CodeStringsMarkdown.parse_markdown_code(optimized_code), original_helper_code=original_helper_code
17461746
)
17471747
new_code = code_path.read_text(encoding="utf-8")
17481748
code_path.unlink(missing_ok=True)
@@ -1819,7 +1819,7 @@ def new_function2(value):
18191819
original_helper_code[helper_function_path] = helper_code
18201820
func_optimizer.args = Args()
18211821
func_optimizer.replace_function_and_helpers_with_optimized_code(
1822-
code_context=code_context, optimized_code=CodeStringsMarkdown.parse_flattened_code(optimized_code), original_helper_code=original_helper_code
1822+
code_context=code_context, optimized_code=CodeStringsMarkdown.parse_markdown_code(optimized_code), original_helper_code=original_helper_code
18231823
)
18241824
new_code = code_path.read_text(encoding="utf-8")
18251825
code_path.unlink(missing_ok=True)
@@ -1897,7 +1897,7 @@ def new_function2(value):
18971897
original_helper_code[helper_function_path] = helper_code
18981898
func_optimizer.args = Args()
18991899
func_optimizer.replace_function_and_helpers_with_optimized_code(
1900-
code_context=code_context, optimized_code=CodeStringsMarkdown.parse_flattened_code(optimized_code), original_helper_code=original_helper_code
1900+
code_context=code_context, optimized_code=CodeStringsMarkdown.parse_markdown_code(optimized_code), original_helper_code=original_helper_code
19011901
)
19021902
new_code = code_path.read_text(encoding="utf-8")
19031903
code_path.unlink(missing_ok=True)
@@ -1974,7 +1974,7 @@ def new_function2(value):
19741974
original_helper_code[helper_function_path] = helper_code
19751975
func_optimizer.args = Args()
19761976
func_optimizer.replace_function_and_helpers_with_optimized_code(
1977-
code_context=code_context, optimized_code=CodeStringsMarkdown.parse_flattened_code(optimized_code), original_helper_code=original_helper_code
1977+
code_context=code_context, optimized_code=CodeStringsMarkdown.parse_markdown_code(optimized_code), original_helper_code=original_helper_code
19781978
)
19791979
new_code = code_path.read_text(encoding="utf-8")
19801980
code_path.unlink(missing_ok=True)
@@ -2052,7 +2052,7 @@ def new_function2(value):
20522052
original_helper_code[helper_function_path] = helper_code
20532053
func_optimizer.args = Args()
20542054
func_optimizer.replace_function_and_helpers_with_optimized_code(
2055-
code_context=code_context, optimized_code=CodeStringsMarkdown.parse_flattened_code(optimized_code), original_helper_code=original_helper_code
2055+
code_context=code_context, optimized_code=CodeStringsMarkdown.parse_markdown_code(optimized_code), original_helper_code=original_helper_code
20562056
)
20572057
new_code = code_path.read_text(encoding="utf-8")
20582058
code_path.unlink(missing_ok=True)
@@ -2141,7 +2141,7 @@ def new_function2(value):
21412141
original_helper_code[helper_function_path] = helper_code
21422142
func_optimizer.args = Args()
21432143
func_optimizer.replace_function_and_helpers_with_optimized_code(
2144-
code_context=code_context, optimized_code=CodeStringsMarkdown.parse_flattened_code(optimized_code), original_helper_code=original_helper_code
2144+
code_context=code_context, optimized_code=CodeStringsMarkdown.parse_markdown_code(optimized_code), original_helper_code=original_helper_code
21452145
)
21462146
new_code = code_path.read_text(encoding="utf-8")
21472147
code_path.unlink(missing_ok=True)

tests/test_multi_file_code_replacement.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ def _get_string_usage(text: str) -> Usage:
117117

118118
func_optimizer.args = Args()
119119
func_optimizer.replace_function_and_helpers_with_optimized_code(
120-
code_context=code_context, optimized_code=CodeStringsMarkdown.parse_flattened_code(optimized_code), original_helper_code=original_helper_code
120+
code_context=code_context, optimized_code=CodeStringsMarkdown.parse_markdown_code(optimized_code), original_helper_code=original_helper_code
121121
)
122122
new_code = main_file.read_text(encoding="utf-8")
123123
new_helper_code = helper_file.read_text(encoding="utf-8")

tests/test_unused_helper_revert.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ def helper_function_2(x):
121121

122122
# Apply optimization and test reversion
123123
optimizer.replace_function_and_helpers_with_optimized_code(
124-
code_context, CodeStringsMarkdown.parse_flattened_code(optimized_code_with_modified_helper), original_helper_code
124+
code_context, CodeStringsMarkdown.parse_markdown_code(optimized_code_with_modified_helper), original_helper_code
125125
)
126126
# Check final file content
127127
final_content = main_file.read_text()
@@ -140,7 +140,7 @@ def helper_function_2(x):
140140
original_helper_code = {main_file: main_file.read_text()}
141141

142142
# Apply optimization and test reversion
143-
optimizer.replace_function_and_helpers_with_optimized_code(code_context, CodeStringsMarkdown.parse_flattened_code(optimized_code), original_helper_code)
143+
optimizer.replace_function_and_helpers_with_optimized_code(code_context, CodeStringsMarkdown.parse_markdown_code(optimized_code), original_helper_code)
144144

145145
# Check final file content
146146
final_content = main_file.read_text()
@@ -203,7 +203,7 @@ def helper_function_2(x):
203203
# 1. Apply the optimization
204204
# 2. Detect unused helpers
205205
# 3. Revert unused helpers to original definitions
206-
optimizer.replace_function_and_helpers_with_optimized_code(code_context, CodeStringsMarkdown.parse_flattened_code(optimized_code), original_helper_code)
206+
optimizer.replace_function_and_helpers_with_optimized_code(code_context, CodeStringsMarkdown.parse_markdown_code(optimized_code), original_helper_code)
207207

208208
# Check final file content
209209
final_content = main_file.read_text()
@@ -267,7 +267,7 @@ def helper_function_2(x):
267267
assert len(unused_helpers) == 0, "No helpers should be detected as unused"
268268

269269
# Apply optimization
270-
optimizer.replace_function_and_helpers_with_optimized_code(code_context, CodeStringsMarkdown.parse_flattened_code(optimized_code), original_helper_code)
270+
optimizer.replace_function_and_helpers_with_optimized_code(code_context, CodeStringsMarkdown.parse_markdown_code(optimized_code), original_helper_code)
271271

272272
# Check final file content - should contain the optimized versions
273273
final_content = main_file.read_text()
@@ -388,7 +388,7 @@ def helper_function_2(x):
388388
}
389389

390390
# Apply optimization and test reversion
391-
optimizer.replace_function_and_helpers_with_optimized_code(code_context, CodeStringsMarkdown.parse_flattened_code(optimized_code), original_helper_code)
391+
optimizer.replace_function_and_helpers_with_optimized_code(code_context, CodeStringsMarkdown.parse_markdown_code(optimized_code), original_helper_code)
392392
# Check main file content
393393
main_content = main_file.read_text()
394394
assert "result1 + n * 3" in main_content, "Entrypoint function should be optimized"
@@ -436,7 +436,7 @@ def helper_function_2(x):
436436
}
437437

438438
# Apply optimization and test reversion
439-
optimizer.replace_function_and_helpers_with_optimized_code(code_context, CodeStringsMarkdown.parse_flattened_code(optimized_code), original_helper_code)
439+
optimizer.replace_function_and_helpers_with_optimized_code(code_context, CodeStringsMarkdown.parse_markdown_code(optimized_code), original_helper_code)
440440

441441
# Check main file content
442442
main_content = main_file.read_text()
@@ -563,7 +563,7 @@ def helper_method_2(self, x):
563563

564564
# Apply optimization and test reversion
565565
optimizer.replace_function_and_helpers_with_optimized_code(
566-
code_context, CodeStringsMarkdown.parse_flattened_code(optimized_code_with_modified_helper), original_helper_code
566+
code_context, CodeStringsMarkdown.parse_markdown_code(optimized_code_with_modified_helper), original_helper_code
567567
)
568568

569569
# Check final file content
@@ -582,7 +582,7 @@ def helper_method_2(self, x):
582582
# Test reversion
583583
original_helper_code = {main_file: main_file.read_text()}
584584

585-
optimizer.replace_function_and_helpers_with_optimized_code(code_context, CodeStringsMarkdown.parse_flattened_code(optimized_code), original_helper_code)
585+
optimizer.replace_function_and_helpers_with_optimized_code(code_context, CodeStringsMarkdown.parse_markdown_code(optimized_code), original_helper_code)
586586

587587
# Check final file content
588588
final_content = main_file.read_text()
@@ -706,7 +706,7 @@ def process_data(self, n):
706706

707707
# Apply optimization and test reversion
708708
optimizer.replace_function_and_helpers_with_optimized_code(
709-
code_context, CodeStringsMarkdown.parse_flattened_code(optimized_code_with_modified_helper), original_helper_code
709+
code_context, CodeStringsMarkdown.parse_markdown_code(optimized_code_with_modified_helper), original_helper_code
710710
)
711711

712712
# Check final file content
@@ -745,7 +745,7 @@ def process_data(self, n):
745745

746746
# Apply optimization and test reversion
747747
optimizer.replace_function_and_helpers_with_optimized_code(
748-
code_context, CodeStringsMarkdown.parse_flattened_code(optimized_code_with_modified_helper), original_helper_code
748+
code_context, CodeStringsMarkdown.parse_markdown_code(optimized_code_with_modified_helper), original_helper_code
749749
)
750750

751751
# Check final file content
@@ -1066,7 +1066,7 @@ def subtract(x, y):
10661066
}
10671067

10681068
# Apply optimization and test reversion
1069-
optimizer.replace_function_and_helpers_with_optimized_code(code_context, CodeStringsMarkdown.parse_flattened_code(optimized_code), original_helper_code)
1069+
optimizer.replace_function_and_helpers_with_optimized_code(code_context, CodeStringsMarkdown.parse_markdown_code(optimized_code), original_helper_code)
10701070

10711071
# Check main file content
10721072
main_content = main_file.read_text()
@@ -1216,7 +1216,7 @@ def divide_numbers(x, y):
12161216
}
12171217

12181218
# Apply optimization and test reversion
1219-
optimizer.replace_function_and_helpers_with_optimized_code(code_context, CodeStringsMarkdown.parse_flattened_code(optimized_code), original_helper_code)
1219+
optimizer.replace_function_and_helpers_with_optimized_code(code_context, CodeStringsMarkdown.parse_markdown_code(optimized_code), original_helper_code)
12201220

12211221
# Check main file content
12221222
main_content = main_file.read_text()
@@ -1275,7 +1275,7 @@ def divide_numbers(x, y):
12751275
}
12761276

12771277
# Apply optimization and test reversion
1278-
optimizer.replace_function_and_helpers_with_optimized_code(code_context, CodeStringsMarkdown.parse_flattened_code(optimized_code), original_helper_code)
1278+
optimizer.replace_function_and_helpers_with_optimized_code(code_context, CodeStringsMarkdown.parse_markdown_code(optimized_code), original_helper_code)
12791279

12801280
# Check main file content
12811281
main_content = main_file.read_text()
@@ -1424,7 +1424,7 @@ def calculate_class(cls, n):
14241424

14251425
# Apply optimization and test reversion
14261426
optimizer.replace_function_and_helpers_with_optimized_code(
1427-
code_context, CodeStringsMarkdown.parse_flattened_code(optimized_static_code_with_modified_helper), original_helper_code
1427+
code_context, CodeStringsMarkdown.parse_markdown_code(optimized_static_code_with_modified_helper), original_helper_code
14281428
)
14291429

14301430
# Check final file content

0 commit comments

Comments
 (0)