Skip to content

feat: webrtc and AI plugins #90

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 171 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
171 commits
Select commit Hold shift + click to select a range
5ae8cc4
snap
tbarbugli Mar 26, 2025
9b767b5
snap
tbarbugli Mar 26, 2025
1559c35
snap
tbarbugli Mar 27, 2025
f15d952
snap
tbarbugli Mar 27, 2025
50fb706
snap
tbarbugli Mar 27, 2025
58d4b31
wip
tbarbugli Apr 1, 2025
b006f2c
wip
tbarbugli Apr 1, 2025
53b5bf7
wip
tbarbugli Apr 7, 2025
d091157
wip
tbarbugli Apr 7, 2025
0ef17fc
wip
tbarbugli Apr 7, 2025
2b57106
wip
tbarbugli Apr 7, 2025
56cfbab
wip
tbarbugli Apr 9, 2025
a686678
wip
tbarbugli Apr 9, 2025
eea2a48
wait
tbarbugli Apr 9, 2025
3475fb0
wip
tbarbugli Apr 28, 2025
72f493b
wip
tbarbugli May 2, 2025
efa4442
wip
tbarbugli May 2, 2025
362e8d2
wip
tbarbugli May 6, 2025
77fee21
wip
tbarbugli May 6, 2025
b95d902
wip
tbarbugli May 6, 2025
94f100b
wip
tbarbugli May 6, 2025
3119d13
fix: handle trickle ICE from SFU without patching SDP
vivekd22 May 19, 2025
889fe93
plugins
tbarbugli May 19, 2025
9614167
fix: update initial participants list in state
vivekd22 May 21, 2025
be433aa
fix: SDP with invalid msid semantic causing incorrect stream and trac…
vivekd22 May 21, 2025
bd9c334
fix: typos during refactor
vivekd22 May 21, 2025
9f5830c
wip
tbarbugli May 21, 2025
21dc02d
wip
tbarbugli May 22, 2025
34646ca
Merge branch 'webrtc' of github.com:GetStream/stream-py into webrtc
tbarbugli May 22, 2025
7cc6880
wip
tbarbugli May 23, 2025
224dedd
fix: publisher peer connection sync and synthetic delays
vivekd22 May 23, 2025
5de1843
Merge branch 'webrtc' of github.com:GetStream/stream-py into webrtc
vivekd22 May 23, 2025
ff175af
wip
tbarbugli May 23, 2025
f896e4e
wip
tbarbugli May 25, 2025
46f2d8f
Merge branch 'webrtc' of github.com:GetStream/stream-py into webrtc
tbarbugli May 25, 2025
215cf20
open browser helper
tbarbugli May 26, 2025
2e0d7f3
fix breaking change from pyav
tbarbugli May 26, 2025
a4e1a7b
update deps a bit
tbarbugli May 26, 2025
2278f98
fix: tests
vivekd22 May 26, 2025
2a4090f
fix: incorrect f-string formatting
vivekd22 May 26, 2025
1d7c7f6
workspace
tbarbugli May 26, 2025
7a85d14
Merge branch 'webrtc' of github.com:GetStream/stream-py into webrtc
tbarbugli May 26, 2025
46f68d8
fix: tests
vivekd22 May 27, 2025
8ea35ea
fix: tests
vivekd22 May 27, 2025
fd28382
fix: tests
vivekd22 May 27, 2025
bc1bbc3
fix: tests
vivekd22 May 27, 2025
dbceea2
update tests to have timeout
May 27, 2025
77334e8
moonshine
tbarbugli May 27, 2025
ef648b1
moonshine
tbarbugli May 27, 2025
14a3a27
wip
tbarbugli May 28, 2025
b1bb6be
Merge branch 'webrtc' of github.com:GetStream/stream-py into webrtc
tbarbugli May 28, 2025
e16d225
fix: test configuration
vivekd22 May 28, 2025
2c29627
chore: add workflow_dispatch trigger to ci
vivekd22 May 28, 2025
0d5cbfc
chore: enable push trigger for testing
vivekd22 May 28, 2025
5f95cf3
chore: fix ruff check
vivekd22 May 28, 2025
010d87f
chore: sync dev dependencies
vivekd22 May 28, 2025
50619d4
chore: upgrade ruff
vivekd22 May 28, 2025
e792689
add llm example
maxkahan May 28, 2025
6d0b3ee
working demo, fix plugin using old method name
maxkahan May 29, 2025
4cf7bf5
update readme for example
maxkahan May 29, 2025
a611464
refactoring and using non-custom elevenlabs voice
maxkahan May 29, 2025
3e917be
wip
tbarbugli May 30, 2025
07b372c
Merge branch 'webrtc' of github.com:GetStream/stream-py into webrtc
tbarbugli May 30, 2025
9225845
cleanup dead code from stt
tbarbugli Jun 2, 2025
74dffb2
use aiortc 1.12 until https://github.com/aiortc/aiortc/issues/1332 is…
tbarbugli Jun 2, 2025
f1cd346
updating examples and parameters
maxkahan Jun 2, 2025
4deb30f
Merge branch 'webrtc' of github.com:GetStream/stream-py into webrtc
maxkahan Jun 2, 2025
ac96613
evloop
tbarbugli Jun 2, 2025
3e969e1
cleanup stt inconsistencies
tbarbugli Jun 3, 2025
34ccf52
Merge branch 'webrtc' of github.com:GetStream/stream-py into webrtc
tbarbugli Jun 3, 2025
68dc828
add speech-to-speech plugin
maxkahan Jun 3, 2025
7745098
feat: add recordings
vivekd22 Jun 4, 2025
21405b1
feat: refactored audio recorder
vivekd22 Jun 5, 2025
c83b405
fix example with function calling and add tests
maxkahan Jun 5, 2025
5b2ba1a
chore: add recording example and fix log levels
vivekd22 Jun 10, 2025
4d3a7b8
updating speech to speech plugin
maxkahan Jun 12, 2025
945bd42
ws wip
tbarbugli Jun 12, 2025
c2c7257
user details
tbarbugli Jun 12, 2025
96ed125
update deepgram sample
maxkahan Jun 12, 2025
e76dc54
add elevenlabs sample
maxkahan Jun 12, 2025
ce05355
add vad example
maxkahan Jun 13, 2025
0d510ae
fix moonshine example
maxkahan Jun 13, 2025
272e661
tidy up moonshine sample
maxkahan Jun 16, 2025
f687ea7
feat: add reconnection handling
vivekd22 Jun 17, 2025
5127b90
chore: remove debug logs
vivekd22 Jun 17, 2025
c694f83
feat: add cartesia tts plugin
maxkahan Jun 18, 2025
f877984
feat: add mcp example
maxkahan Jun 19, 2025
e4b716b
patch: update mcp sample and add readme
maxkahan Jun 19, 2025
1337848
Merge branch 'ws-coordinator' into webrtc
tbarbugli Jun 23, 2025
2cd0494
test code remove
tbarbugli Jun 23, 2025
17a2404
refactor: restructure plugins by provider
maxkahan Jun 23, 2025
aea7b65
restructure plugins and create separate packages
maxkahan Jun 24, 2025
138be31
feat: add kokoro plugin
maxkahan Jun 27, 2025
b2cca3a
feat: restructure all plugins, cleanup samples
maxkahan Jul 1, 2025
2168da1
refactor: restructure plugins, remove unnecessary dependencies
maxkahan Jul 1, 2025
e433c6c
skipping test_join.py tests by default
maxkahan Jul 1, 2025
b100ba4
fix: typo in dependency
maxkahan Jul 2, 2025
2a7ce48
style: format code with ruff, fix uv dependency format in toml
maxkahan Jul 2, 2025
d843b82
ci: test new dep format in toml
maxkahan Jul 2, 2025
1f39a63
ci: removed version unsupported by plugins
maxkahan Jul 2, 2025
76b03e0
test: add monkeypatch so we receive correct AudioFrame types
maxkahan Jul 2, 2025
bd91458
test: fix mock logger
maxkahan Jul 2, 2025
836b718
fix: upgrade dependency versions
maxkahan Jul 3, 2025
0c77ad9
fix: restructuring
maxkahan Jul 3, 2025
961724a
feat: plugin restructure
maxkahan Jul 3, 2025
a7ea05e
test: fixed test looking for event that is not sent
maxkahan Jul 3, 2025
e32a808
ci: change uv sync command
maxkahan Jul 3, 2025
8556a47
chore: merge changes and resolve conflicts
vivekd22 Jul 3, 2025
aa1df7e
chore: ruff fix
vivekd22 Jul 3, 2025
7cad6ba
chore: reduce test asset size
vivekd22 Jul 3, 2025
da7eee8
chore: add new release workflow
vivekd22 Jul 3, 2025
0ae6fa2
fix: re-add connection logic
maxkahan Jul 3, 2025
d372a3f
chore: fix merge conflict issues
vivekd22 Jul 4, 2025
17e2d55
fix: actions yaml environment
vivekd22 Jul 4, 2025
a53ac64
fix: fix actions uv setup
vivekd22 Jul 4, 2025
94c7916
fix: fix actions uv setup
vivekd22 Jul 4, 2025
acfc4bb
fix: fix actions uv setup
vivekd22 Jul 4, 2025
a7c9dc6
fix: fix actions uv setup
vivekd22 Jul 4, 2025
d6e458c
fix: fix actions uv setup
vivekd22 Jul 4, 2025
289cc9b
fix: fix actions uv setup
vivekd22 Jul 4, 2025
ee66543
chore: use twine for package upload
vivekd22 Jul 4, 2025
1bfb327
fix: typo with pip install
vivekd22 Jul 4, 2025
9d28e81
chore: bump version
vivekd22 Jul 4, 2025
81ae8a6
chore: fix versioning
vivekd22 Jul 4, 2025
4a31745
chore: fix versioning
vivekd22 Jul 4, 2025
f7d139b
chore: fix versioning
vivekd22 Jul 4, 2025
f91cd7f
chore: fix versioning
vivekd22 Jul 4, 2025
13317d4
chore: fix versioning
vivekd22 Jul 4, 2025
0b35685
chore: add plugin to toml
maxkahan Jul 4, 2025
4bd295a
chore: fix test plugin build
vivekd22 Jul 4, 2025
f95addc
chore: fix test plugin build
vivekd22 Jul 4, 2025
47d7c63
chore: fix test plugin build
vivekd22 Jul 4, 2025
d3689e3
chore: fix test plugin build
vivekd22 Jul 4, 2025
3f56a27
patch: remove unbuildable dependency
maxkahan Jul 4, 2025
e80e407
patch: remove unbuildable dependency
maxkahan Jul 4, 2025
da8935b
chore: fix test plugin build
vivekd22 Jul 4, 2025
b686ee2
fix: fix actions uv setup
vivekd22 Jul 4, 2025
541b443
fix: moonshine plugin dependency
vivekd22 Jul 4, 2025
00fed89
fix: fix actions uv setup
vivekd22 Jul 4, 2025
8921399
chore: use releasev2 by default
vivekd22 Jul 4, 2025
05f1277
chore: bump version
vivekd22 Jul 4, 2025
aeba196
fix: remove invalid badge
maxkahan Jul 4, 2025
65adf8f
chore: add versions
maxkahan Jul 4, 2025
c45cc89
chore: update webrtc proto generations
vivekd22 Jul 7, 2025
1241cb3
ci: skip test if moonshine not installed
maxkahan Jul 7, 2025
7874c37
chore: update proto generations
vivekd22 Jul 7, 2025
b5198a3
chore: reformat
vivekd22 Jul 7, 2025
d740987
Merge branch 'main' of github.com:GetStream/stream-py into webrtc
vivekd22 Jul 7, 2025
fb55f8a
fix: remove using deprecated field
vivekd22 Jul 7, 2025
f3f616a
chore: cleanup
vivekd22 Jul 7, 2025
660f195
ci: require python>=3.10 for optional dependencies, skip tests on lower
maxkahan Jul 7, 2025
f63fea2
ci: only install all packages on python>3.9
maxkahan Jul 7, 2025
90a98b2
ci: only install all packages on python>3.9
maxkahan Jul 7, 2025
441c450
ci: no install on plugins
maxkahan Jul 7, 2025
cd867d1
chore: regenerate openapi and proto spec
vivekd22 Jul 7, 2025
4fe8c4a
ci: remove non-needed python version
maxkahan Jul 8, 2025
4de52d6
remove examples from workspace
maxkahan Jul 8, 2025
0470afe
feat: make all examples fully independent
maxkahan Jul 9, 2025
e59fbd0
chore: regenerate lockfile
maxkahan Jul 9, 2025
bd2d82a
patch: update openai connector
maxkahan Jul 23, 2025
2f8cc2a
update release workflows and add python versions
maxkahan Jul 23, 2025
9be158a
ci: remove specifiers
maxkahan Jul 23, 2025
9fce16b
ci: test only updated packages
maxkahan Jul 23, 2025
76883da
ci: test only updated packages
maxkahan Jul 23, 2025
5f84ba2
ci: test only updated packages
maxkahan Jul 23, 2025
860b947
feat: start adding audio moderation example
maxkahan Jul 24, 2025
f6de33f
fix: video track publish and subscribe
vivekd22 Jul 25, 2025
9f55b04
chore: bump core sdk version 2.3.0a2
vivekd22 Jul 25, 2025
3a7352c
fix: typo generating audio track info
vivekd22 Jul 25, 2025
63a9af4
chore: bump core sdk version 2.3.0a3
vivekd22 Jul 25, 2025
167aaaa
feat: working audio moderation example
maxkahan Jul 25, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
STREAM_API_KEY=892s22ypvt6m
STREAM_API_SECRET=5cssrefv55rs3cnkk38kfjam2k7c2ykwn4h79dqh66ym89gm65cxy4h9jx4cypd6
STREAM_API_KEY=your-stream-api-key
STREAM_API_SECRET=your-stream-api-secret
STREAM_BASE_URL=http://127.0.0.1:3030
OPENAI_API_KEY=sk-your-openai-api-key
CARTESIA_API_KEY=your-cartesia-api-key
9 changes: 5 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,21 +17,22 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
python-version: ["3.10", "3.11", "3.12", "3.13"]
steps:
- name: Check out repo
uses: actions/checkout@v4
- uses: chartboost/ruff-action@v1
- uses: astral-sh/ruff-action@v3
continue-on-error: false
- name: Install uv and set the python version
uses: astral-sh/setup-uv@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install the project
run: uv sync --all-extras --dev
run: |
uv sync --all-packages --all-groups --all-extras
- name: Run tests
env:
STREAM_BASE_URL: ${{ vars.STREAM_BASE_URL }}
STREAM_API_KEY: ${{ vars.STREAM_API_KEY }}
STREAM_API_SECRET: ${{ secrets.STREAM_API_SECRET }}
run: uv run pytest tests/ getstream/
run: uv run pytest
8 changes: 4 additions & 4 deletions .github/workflows/release-v2.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ jobs:

- name: Sync environment & install dev extras
run: |
uv sync --dev --all-packages --all-groups --all-extras
uv sync --dev --all-packages --all-groups --all-extras

- name: Build core distributions
run: |
Expand Down Expand Up @@ -70,7 +70,7 @@ jobs:
with:
repository-url: https://test.pypi.org/legacy/
packages-dir: dist
environment:
env:
name: testpypi

test-core-index:
Expand Down Expand Up @@ -136,7 +136,7 @@ jobs:
with:
repository-url: https://test.pypi.org/legacy/
packages-dir: dist-plugins
environment:
env:
name: testpypi

test-plugins-index:
Expand Down Expand Up @@ -178,4 +178,4 @@ jobs:
echo "* Core published to TestPyPI: ✅" >> $GITHUB_STEP_SUMMARY
echo "* Plugins built & tests: ✅" >> $GITHUB_STEP_SUMMARY
echo "* Plugins published to TestPyPI: ✅" >> $GITHUB_STEP_SUMMARY
echo "* Tests against TestPyPI packages: ✅" >> $GITHUB_STEP_SUMMARY
echo "* Tests against TestPyPI packages: ✅" >> $GITHUB_STEP_SUMMARY
172 changes: 148 additions & 24 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,35 +5,159 @@ on:
types: [closed]
branches:
- main
workflow_dispatch:
inputs:
python-version:
description: "Python version to use"
default: "3.12"
required: false

permissions:
contents: read
id-token: write

jobs:
Release:
name: 🚀 Release
if: github.event.pull_request.merged && startsWith(github.head_ref, 'release-')
build-core:
name: Build & Test Core SDK
if: (github.event.pull_request.merged && startsWith(github.head_ref, 'release-')) || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
permissions: write-all
environment: ci
outputs:
version: ${{ steps.get_version.outputs.version }}
steps:
- uses: actions/github-script@v7
with:
script: |
// Getting the release version from the PR source branch
// Source branch looks like this: release-1.0.0
const version = context.payload.pull_request.head.ref.split('-')[1]
core.exportVariable('VERSION', version)
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Checkout repository
uses: actions/checkout@v4

- name: Install uv and set the python version
uses: astral-sh/setup-uv@v5
with:
python-version: "3.12"
- name: Build project
run: uv build
- name: Publish package distributions to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
- name: Create release on GitHub
uses: ncipollo/release-action@v1
python-version: ${{ github.event.inputs.python-version || '3.12' }}

- name: Sync environment & install dev extras
run: |
uv sync --all-packages --all-extras --dev --all-groups

- name: Build core distributions
run: |
uv build -o dist

- name: Extract package version
id: get_version
run: |
python - <<'PY'
import re, os, pathlib, sys
version_file = pathlib.Path('getstream') / 'version.py'
content = version_file.read_text()
match = re.search(r"VERSION\s*=\s*['\"]([^'\"]+)['\"]", content)
if not match:
sys.exit('Could not find VERSION in getstream/version.py')
version = match.group(1)
with open(os.environ['GITHUB_OUTPUT'], 'a') as fh:
fh.write(f'version={version}\n')
PY

- name: Publish core to PyPI
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
run: |
uv pip install --upgrade twine
for FILE in dist/getstream*.whl; do
BASENAME=$(basename "$FILE")
PACKAGE_NAME=${BASENAME%%-*}
VERSION=$(echo "$BASENAME" | cut -d'-' -f2) # 1.5.0a2 etc.
echo "Checking if $PACKAGE_NAME version $VERSION exists on PyPI..."
if pip index versions --pre "$PACKAGE_NAME" | grep -q "$VERSION"; then
echo "Version $VERSION already exists for $PACKAGE_NAME – skipping upload."
else
echo "Uploading $BASENAME to PyPI."
twine upload "$FILE"
fi
done

- name: Install core from using uv
run: |
uv pip install "getstream==${{ steps.get_version.outputs.version }}"

- name: Run core tests against PyPI artifact
env:
STREAM_BASE_URL: ${{ vars.STREAM_BASE_URL }}
STREAM_API_KEY: ${{ vars.STREAM_API_KEY }}
STREAM_API_SECRET: ${{ secrets.STREAM_API_SECRET }}
run: |
UV_NO_SOURCES=1 uv run pytest --ignore=getstream/plugins

build-plugins:
name: Build & Test Plugin Packages
runs-on: ubuntu-latest
needs: build-core
environment: ci
env:
CORE_VERSION: ${{ needs.build-core.outputs.version }}
UV_NO_SOURCES: "1"
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Install uv and set the python version
uses: astral-sh/setup-uv@v5
with:
tag: ${{ env.VERSION }}
token: ${{ secrets.GITHUB_TOKEN }}
generateReleaseNotes: true
python-version: ${{ github.event.inputs.python-version || '3.12' }}

- name: Install new core from PyPI using uv (for plugin builds/tests)
run: |
uv pip install "getstream==${CORE_VERSION}"

- name: Detect updated plugins
id: detect
shell: bash
run: |
set -e
declare -a UPD_PKG UPD_DIR
for dir in getstream/plugins/*/; do
[[ -f "$dir/pyproject.toml" ]] || continue
# get "name version" from pyproject.toml in one shot
read -r name ver <<<"$(python -c 'import tomllib,sys, pathlib; p=sys.argv[1]; data=tomllib.load(open(p,"rb")); print(data["project"]["name"], data["project"]["version"])' "$dir/pyproject.toml")"
if ! pip index versions --pre "$name" | grep -q "$ver"; then
UPD_PKG+=("$name")
UPD_DIR+=("${dir%/}")
fi
done
echo "updated_packages=${UPD_PKG[*]}" >>"$GITHUB_OUTPUT"
echo "updated_dirs=${UPD_DIR[*]}" >>"$GITHUB_OUTPUT"
[[ ${#UPD_PKG[@]} -gt 0 ]] && echo "has_updates=true" >>"$GITHUB_OUTPUT"

- name: Build wheels
if: steps.detect.outputs.has_updates == 'true'
run: |
mkdir -p dist-plugins
for pkg in ${{ steps.detect.outputs.updated_packages }}; do
echo "::group::Building $pkg"
uv build --package "$pkg" -o dist-plugins --wheel --sdist
echo "::endgroup::"
done

- name: Test updated plugins (local wheels)
if: steps.detect.outputs.has_updates == 'true'
env:
STREAM_BASE_URL: ${{ vars.STREAM_BASE_URL }}
STREAM_API_KEY: ${{ vars.STREAM_API_KEY }}
STREAM_API_SECRET: ${{ secrets.STREAM_API_SECRET }}
run: |
uv pip install dist-plugins/*.whl
uv run pytest ${{ steps.detect.outputs.updated_dirs }}

- name: Publish wheels to PyPI
if: steps.detect.outputs.has_updates == 'true'
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
run: |
uv pip install --upgrade twine
twine upload dist-plugins/*.whl

- name: Re-install from PyPI and re-run tests
if: steps.detect.outputs.has_updates == 'true'
run: |
uv pip install "getstream==${CORE_VERSION}" ${{ steps.detect.outputs.updated_packages }}
uv run pytest ${{ steps.detect.outputs.updated_dirs }}
7 changes: 7 additions & 0 deletions .github/workflows/stream-py.code-workspace
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"folders": [
{
"path": "../.."
}
]
}
21 changes: 9 additions & 12 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,19 +1,8 @@
*/__pycache__
*/chat/__pycache__
*/video/__pycache__
*/chat/sync/__pycache__
*/chat/async_/__pycache__
*/sync/__pycache__
*/async_/__pycache__
*/video/sync/__pycache__
*/model/__pycache__/
*/cli/__pycache__
*/cli/__pycache__
*__pycache__
.env
.vscode/settings.json
*.pyc
dist/*
dist/*
*.log
.python-version
pyvenv.cfg
Expand All @@ -23,3 +12,11 @@ lib/*
shell.nix
pyrightconfig.json
.DS_Store

# Python package build artifacts
*.egg-info/
build/
*.egg
__pycache__/
*.py[cod]
*$py.class
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "protocol"]
path = protocol
url = https://github.com/GetStream/protocol
1 change: 1 addition & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ repos:
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
args: ["--maxkb=6000"]
90 changes: 90 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "debugpy",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"cwd": "${workspaceFolder}",
"python": "${workspaceFolder}/.venv/bin/python",
"env": {
"PYTHONPATH": "${workspaceFolder}"
}
},
{
"name": "Python: Run Tests (Current File)",
"type": "debugpy",
"request": "launch",
"module": "pytest",
"args": [
"${file}",
"-v"
],
"console": "integratedTerminal",
"cwd": "${workspaceFolder}",
"python": "${workspaceFolder}/.venv/bin/python",
"env": {
"PYTHONPATH": "${workspaceFolder}"
}
},
{
"name": "Python: Run All Tests",
"type": "debugpy",
"request": "launch",
"module": "pytest",
"args": [
"tests/",
"-v"
],
"console": "integratedTerminal",
"cwd": "${workspaceFolder}",
"python": "${workspaceFolder}/.venv/bin/python",
"env": {
"PYTHONPATH": "${workspaceFolder}"
}
},
{
"name": "Python: Run Specific Test",
"type": "debugpy",
"request": "launch",
"module": "pytest",
"args": [
"${input:testPath}",
"-v",
"-s"
],
"console": "integratedTerminal",
"cwd": "${workspaceFolder}",
"python": "${workspaceFolder}/.venv/bin/python",
"env": {
"PYTHONPATH": "${workspaceFolder}"
}
},
{
"name": "Python: Debug with uv run",
"type": "debugpy",
"request": "launch",
"program": "/usr/local/bin/uv",
"args": [
"run",
"python",
"${file}"
],
"console": "integratedTerminal",
"cwd": "${workspaceFolder}",
"env": {
"PYTHONPATH": "${workspaceFolder}"
}
}
],
"inputs": [
{
"id": "testPath",
"description": "Path to test file or test function",
"default": "tests/",
"type": "promptString"
}
]
}
Loading