Skip to content

Commit 4687ded

Browse files
chengzeyiclaude
andcommitted
Add wavespeed serverless SDK with runpod compatibility
- Implement serverless worker with handler support (sync/async/generator) - Add FastAPI development server for local testing - Add input validation compatible with runpod's rp_validator - Implement job handling, streaming, progress updates, and heartbeat - Add comprehensive test suite (172 tests) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 919b256 commit 4687ded

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+6885
-0
lines changed
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
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@beta
37+
with:
38+
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
39+
40+
# Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4.1)
41+
# model: "claude-opus-4-1-20250805"
42+
43+
# Direct prompt for automated review (no @claude mention needed)
44+
direct_prompt: |
45+
Please review this pull request and provide feedback on:
46+
- Code quality and best practices
47+
- Potential bugs or issues
48+
- Performance considerations
49+
- Security concerns
50+
- Test coverage
51+
52+
Be constructive and helpful in your feedback.
53+
54+
# Optional: Use sticky comments to make Claude reuse the same comment on subsequent pushes to the same PR
55+
# use_sticky_comment: true
56+
57+
# Optional: Customize review based on file types
58+
# direct_prompt: |
59+
# Review this PR focusing on:
60+
# - For TypeScript files: Type safety and proper interface usage
61+
# - For API endpoints: Security, input validation, and error handling
62+
# - For React components: Performance, accessibility, and best practices
63+
# - For tests: Coverage, edge cases, and test quality
64+
65+
# Optional: Different prompts for different authors
66+
# direct_prompt: |
67+
# ${{ github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR' &&
68+
# 'Welcome! Please review this PR from a first-time contributor. Be encouraging and provide detailed explanations for any suggestions.' ||
69+
# 'Please provide a thorough code review focusing on our coding standards and best practices.' }}
70+
71+
# Optional: Add specific tools for running tests or linting
72+
# allowed_tools: "Bash(npm run test),Bash(npm run lint),Bash(npm run typecheck)"
73+
74+
# Optional: Skip review for certain conditions
75+
# if: |
76+
# !contains(github.event.pull_request.title, '[skip-review]') &&
77+
# !contains(github.event.pull_request.title, '[WIP]')

.github/workflows/claude.yml

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
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@beta
36+
with:
37+
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
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: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4.1)
44+
# model: "claude-opus-4-1-20250805"
45+
46+
# Optional: Customize the trigger phrase (default: @claude)
47+
# trigger_phrase: "/claude"
48+
49+
# Optional: Trigger when specific user is assigned to an issue
50+
# assignee_trigger: "claude-bot"
51+
52+
# Optional: Allow Claude to run specific commands
53+
# allowed_tools: "Bash(npm install),Bash(npm run build),Bash(npm run test:*),Bash(npm run lint:*)"
54+
55+
# Optional: Add custom instructions for Claude to customize its behavior for your project
56+
# custom_instructions: |
57+
# Follow our coding standards
58+
# Ensure all new code has tests
59+
# Use TypeScript for new files
60+
61+
# Optional: Custom environment variables for Claude
62+
# claude_env: |
63+
# NODE_ENV: test

.github/workflows/pre-commit.yml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
name: pre-commit
2+
3+
on:
4+
pull_request:
5+
branches:
6+
- main
7+
push:
8+
branches:
9+
- main
10+
tags:
11+
- "v[0-9]+*"
12+
workflow_dispatch:
13+
14+
jobs:
15+
pre-commit:
16+
runs-on: ubuntu-latest
17+
env:
18+
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: "true"
19+
ACTIONS_RUNNER_FORCED_INTERNAL_NODE_VERSION: node16
20+
ACTIONS_RUNNER_FORCE_ACTIONS_NODE_VERSION: node16
21+
steps:
22+
- uses: actions/checkout@v3
23+
with:
24+
path: "."
25+
- name: Set up Python
26+
uses: actions/setup-python@v3
27+
with:
28+
python-version: '3.10'
29+
- uses: pre-commit/action@v3.0.1
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
name: python-packages
2+
3+
on:
4+
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#running-a-workflow-when-a-pull-request-is-approved
5+
# pull_request:
6+
# types:
7+
# - review_requested
8+
# branches:
9+
# - main
10+
push:
11+
branches:
12+
- main
13+
tags:
14+
- "v[0-9]+*"
15+
workflow_dispatch:
16+
17+
jobs:
18+
build:
19+
runs-on: ubuntu-latest
20+
21+
steps:
22+
- name: Recursive checkout
23+
uses: actions/checkout@v3
24+
with:
25+
submodules: recursive
26+
path: "."
27+
fetch-depth: 0 # for tags
28+
29+
- name: Set up Python
30+
uses: actions/setup-python@v3
31+
with:
32+
python-version: '3.x'
33+
34+
- name: Install dependencies
35+
run: |
36+
python -m pip install --upgrade pip
37+
pip install build wheel 'setuptools>=64' 'setuptools_scm>=8'
38+
39+
- name: Build package
40+
run: python -m build
41+
42+
- run: du -h dist/*
43+
- uses: actions/upload-artifact@v4
44+
with:
45+
name: python-packages
46+
path: |
47+
dist/*.whl
48+
dist/*.tar.gz
49+
50+
# publish to GitHub Release
51+
gh_release:
52+
name: gh_release
53+
needs: build
54+
runs-on: ubuntu-latest
55+
permissions: write-all
56+
57+
timeout-minutes: 60
58+
defaults:
59+
run:
60+
shell: bash
61+
steps:
62+
- uses: actions/download-artifact@v4
63+
with:
64+
path: dist
65+
66+
- run: ls -R dist/
67+
68+
# create night release if it's a push to main
69+
- if: github.repository == 'WaveSpeedAI/wavespeed-python' && github.event_name == 'push' && github.ref == 'refs/heads/main'
70+
name: Nightly Release
71+
uses: andelf/nightly-release@v1
72+
env:
73+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
74+
with:
75+
tag_name: nightly
76+
name: 'Nightly Release $$'
77+
prerelease: true
78+
body: 'TODO: Add nightly release notes'
79+
files: |
80+
dist/*/*.whl
81+
dist/*/*.tar.gz
82+
83+
# create release if it's a tag like vx.y.z
84+
- if: github.repository == 'WaveSpeedAI/wavespeed-python' && github.ref_type == 'tag' && startsWith(github.ref, 'refs/tags/v')
85+
name: Release
86+
uses: softprops/action-gh-release@v1
87+
with :
88+
files: |
89+
dist/*/*.whl
90+
dist/*/*.tar.gz
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# This workflow will upload a Python Package using Twine when a release is created
2+
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python#publishing-to-package-registries
3+
4+
# This workflow uses actions that are not certified by GitHub.
5+
# They are provided by a third-party and are governed by
6+
# separate terms of service, privacy policy, and support
7+
# documentation.
8+
9+
name: python-publish
10+
11+
on:
12+
release:
13+
types: [published]
14+
workflow_dispatch:
15+
16+
permissions:
17+
contents: read
18+
19+
jobs:
20+
deploy:
21+
runs-on: ubuntu-latest
22+
env:
23+
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: "true"
24+
permissions:
25+
# IMPORTANT: this permission is mandatory for trusted publishing
26+
id-token: write
27+
steps:
28+
- name: Recursive checkout
29+
uses: actions/checkout@v3
30+
with:
31+
submodules: recursive
32+
path: "."
33+
fetch-depth: 0 # for tags
34+
35+
- name: Set up Python
36+
uses: actions/setup-python@v3
37+
with:
38+
python-version: '3.10'
39+
- name: Install dependencies
40+
run: |
41+
python -m pip install --upgrade pip
42+
pip install build 'setuptools>=64' 'setuptools_scm>=8'
43+
- name: Build package
44+
run: python -m build --sdist -n
45+
- name: Publish package
46+
uses: pypa/gh-action-pypi-publish@release/v1

0 commit comments

Comments
 (0)