[Feat][Memory]: Add Redis storage backend for Response API #340
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Performance Tests | |
| on: | |
| pull_request: | |
| branches: | |
| - main | |
| paths: | |
| - "src/semantic-router/**" | |
| - "candle-binding/**" | |
| - "perf/**" | |
| - ".github/workflows/performance-test.yml" | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| pull-requests: write # Required to comment on PRs | |
| issues: write # Required to comment on PRs (PRs are issues) | |
| jobs: | |
| component-benchmarks: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 45 | |
| steps: | |
| - name: Check out the repo | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 # Need full history for baseline comparison | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version: "1.24" | |
| - name: Set up Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| toolchain: 1.90 | |
| - name: Cache Rust dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/bin/ | |
| ~/.cargo/registry/index/ | |
| ~/.cargo/registry/cache/ | |
| ~/.cargo/git/db/ | |
| candle-binding/target/ | |
| key: ${{ runner.os }}-perf-cargo-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-perf-cargo- | |
| - name: Cache Go dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/go/pkg/mod | |
| key: ${{ runner.os }}-perf-go-${{ hashFiles('**/go.sum') }} | |
| restore-keys: | | |
| ${{ runner.os }}-perf-go- | |
| - name: Cache Models | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| models/ | |
| key: ${{ runner.os }}-models-v1-${{ hashFiles('tools/make/models.mk') }} | |
| restore-keys: | | |
| ${{ runner.os }}-models-v1- | |
| continue-on-error: true | |
| - name: Build Rust library (CPU-only) | |
| run: make rust-ci | |
| - name: Install HuggingFace CLI | |
| run: | | |
| pip install -U "huggingface_hub[cli]" hf_transfer | |
| # Models are now automatically downloaded by the router at startup | |
| # No need to pre-download models - the router will download them on first run | |
| - name: Run component benchmarks | |
| run: | | |
| mkdir -p reports | |
| export LD_LIBRARY_PATH=${PWD}/candle-binding/target/release | |
| make perf-bench-quick 2>&1 | tee reports/bench-output.txt | |
| - name: Parse benchmark results | |
| id: parse | |
| continue-on-error: true | |
| run: | | |
| # Extract benchmark results | |
| # This is a simplified parser - a real implementation would be more robust | |
| echo "benchmarks_completed=true" >> $GITHUB_OUTPUT | |
| - name: Generate performance summary | |
| id: summary | |
| run: | | |
| cat > reports/summary.md <<'EOF' | |
| ## Performance Benchmark Results | |
| Component benchmarks completed successfully. | |
| ### Summary | |
| - Classification benchmarks: ✅ | |
| - Decision engine benchmarks: ✅ | |
| - Cache benchmarks: ✅ | |
| ### Details | |
| See attached benchmark artifacts for detailed results and profiles. | |
| --- | |
| _Performance testing powered by [vLLM Semantic Router](https://github.com/vllm-project/semantic-router)_ | |
| EOF | |
| - name: Comment PR with results | |
| if: github.event_name == 'pull_request' | |
| continue-on-error: true # May fail for PRs from forks due to GitHub security restrictions | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const fs = require('fs'); | |
| let summary = '## Performance Benchmark Results\n\n'; | |
| try { | |
| summary = fs.readFileSync('reports/summary.md', 'utf8'); | |
| } catch (err) { | |
| summary += '✅ Component benchmarks completed\n\n'; | |
| summary += '_Detailed results available in workflow artifacts_\n'; | |
| } | |
| // Find existing comment | |
| const {data: comments} = await github.rest.issues.listComments({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: context.issue.number, | |
| }); | |
| const botComment = comments.find(comment => | |
| comment.user.type === 'Bot' && | |
| comment.body.includes('Performance Benchmark Results') | |
| ); | |
| if (botComment) { | |
| await github.rest.issues.updateComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| comment_id: botComment.id, | |
| body: summary | |
| }); | |
| } else { | |
| await github.rest.issues.createComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: context.issue.number, | |
| body: summary | |
| }); | |
| } | |
| - name: Upload performance artifacts | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: performance-results-${{ github.run_number }} | |
| path: | | |
| reports/ | |
| retention-days: 30 |