Skip to content

Commit b57fa1a

Browse files
Merge branch 'exp/consistent-loop-break' of github.com:codeflash-ai/codeflash into exp/consistent-loop-break
2 parents 0b3be3f + 91cbc74 commit b57fa1a

File tree

5 files changed

+124
-8
lines changed

5 files changed

+124
-8
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
name: Claude Code Review
2+
3+
on:
4+
pull_request:
5+
types: [opened, synchronize]
6+
# Optional: Only run on specific file changes
7+
# paths:
8+
# - "src/**/*.ts"
9+
# - "src/**/*.tsx"
10+
# - "src/**/*.js"
11+
# - "src/**/*.jsx"
12+
13+
jobs:
14+
claude-review:
15+
# Optional: Filter by PR author
16+
# if: |
17+
# github.event.pull_request.user.login == 'external-contributor' ||
18+
# github.event.pull_request.user.login == 'new-developer' ||
19+
# github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
20+
21+
runs-on: ubuntu-latest
22+
permissions:
23+
contents: read
24+
pull-requests: read
25+
issues: read
26+
id-token: write
27+
28+
steps:
29+
- name: Checkout repository
30+
uses: actions/checkout@v4
31+
with:
32+
fetch-depth: 1
33+
34+
- name: Run Claude Code Review
35+
id: claude-review
36+
uses: anthropics/claude-code-action@v1
37+
with:
38+
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
39+
prompt: |
40+
REPO: ${{ github.repository }}
41+
PR NUMBER: ${{ github.event.pull_request.number }}
42+
43+
Please review this pull request and provide feedback on:
44+
- Code quality and best practices
45+
- Potential bugs or issues
46+
- Performance considerations
47+
- Security concerns
48+
- Test coverage
49+
50+
Use the repository's CLAUDE.md for guidance on style and conventions. Be constructive and helpful in your feedback.
51+
52+
Use `gh pr comment` with your Bash tool to leave your review as a comment on the PR.
53+
54+
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
55+
# or https://code.claude.com/docs/en/cli-reference for available options
56+
claude_args: '--allowed-tools "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)"'
57+

.github/workflows/claude.yml

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
name: Claude Code
2+
3+
on:
4+
issue_comment:
5+
types: [created]
6+
pull_request_review_comment:
7+
types: [created]
8+
issues:
9+
types: [opened, assigned]
10+
pull_request_review:
11+
types: [submitted]
12+
13+
jobs:
14+
claude:
15+
if: |
16+
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
17+
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
18+
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
19+
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
20+
runs-on: ubuntu-latest
21+
permissions:
22+
contents: read
23+
pull-requests: read
24+
issues: read
25+
id-token: write
26+
actions: read # Required for Claude to read CI results on PRs
27+
steps:
28+
- name: Checkout repository
29+
uses: actions/checkout@v4
30+
with:
31+
fetch-depth: 1
32+
33+
- name: Run Claude Code
34+
id: claude
35+
uses: anthropics/claude-code-action@v1
36+
with:
37+
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
38+
39+
# This is an optional setting that allows Claude to read CI results on PRs
40+
additional_permissions: |
41+
actions: read
42+
43+
# Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
44+
# prompt: 'Update the pull request description to include a summary of changes.'
45+
46+
# Optional: Add claude_args to customize behavior and configuration
47+
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
48+
# or https://code.claude.com/docs/en/cli-reference for available options
49+
# claude_args: '--allowed-tools Bash(gh pr:*)'
50+

codeflash/verification/pytest_plugin.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212

1313
# System Imports
1414
from pathlib import Path
15-
from statistics import mean, median
1615
from typing import TYPE_CHECKING, Any, Callable, Optional
1716
from unittest import TestCase
1817

@@ -309,20 +308,28 @@ def should_stop(
309308
return False
310309

311310
recent = runtimes[-window:]
312-
m = median(recent)
311+
312+
# Use sorted array for faster median and min/max operations
313+
recent_sorted = sorted(recent)
314+
mid = window // 2
315+
m = recent_sorted[mid] if window % 2 else (recent_sorted[mid - 1] + recent_sorted[mid]) / 2
313316

314317
# 1) All recent points close to the median
315-
centered = all(abs(r - m) / m <= center_rel_tol for r in recent)
318+
centered = True
319+
for r in recent:
320+
if abs(r - m) / m > center_rel_tol:
321+
centered = False
322+
break
316323

317324
# 2) Window spread is small
318-
r_min, r_max = min(recent), max(recent)
325+
r_min, r_max = recent_sorted[0], recent_sorted[-1]
319326
spread_ok = (r_max - r_min) / r_min <= spread_rel_tol
320327

321328
# 3) No strong downward trend (still improving)
322329
# Compare first half vs second half
323330
half = window // 2
324-
first = mean(recent[:half])
325-
second = mean(recent[half:])
331+
first = sum(recent[:half]) / half
332+
second = sum(recent[half:]) / (window - half)
326333
slope_ok = (first - second) / first <= slope_rel_tol
327334

328335
return centered and spread_ok and slope_ok

docs/images/priority-order.png

279 KB
Loading

docs/optimizing-with-codeflash/trace-and-optimize.mdx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ sidebarTitle: "Optimize E2E Workflows"
66
keywords: ["tracing", "workflow optimization", "replay tests", "end-to-end", "script optimization", "context manager"]
77
---
88

9-
Codeflash supports optimizing an entire Python script end-to-end by tracing the script's execution and generating Replay Tests.
9+
Codeflash can optimize an entire Python script end-to-end by tracing the script's execution and generating Replay Tests.
1010
Tracing follows the execution of a script, profiles it and captures inputs to all functions it called, allowing them to be replayed during optimization.
11-
Codeflash uses these Replay Tests to optimize all functions called in the script, starting from the most important ones.
11+
Codeflash uses these Replay Tests to optimize the most important functions called in the script, delivering the best performance for your workflow.
12+
13+
![Function Optimization](/images/priority-order.png)
1214

1315
To optimize a script, `python myscript.py`, simply replace `python` with `codeflash optimize` and run the following command:
1416

0 commit comments

Comments
 (0)