Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
17 changes: 17 additions & 0 deletions .fernignore
Original file line number Diff line number Diff line change
Expand Up @@ -142,23 +142,40 @@ src/deepgram/core/query_encoder.py
# [temporarily frozen — manual patches listed above]
src/deepgram/core/client_wrapper.py

# Fern generates pyproject.toml (regenerated on every SDK regen — see the
# regen commits in git log). We add hand-maintained [tool.coverage.run] /
# [tool.coverage.report] config that scopes coverage to hand-written logic and
# excludes pure-generated models. Frozen so Fern won't strip it on regen.
# [temporarily frozen — unfreeze + re-diff before each regen so Fern's own
# dependency/version updates are picked up, then re-apply the coverage config]
pyproject.toml

# Hand-written custom tests
tests/custom/test_agent_history.py
tests/custom/test_branch_coverage_95.py
tests/custom/test_agent_update_listen.py
tests/custom/test_client.py
tests/custom/test_compat_aliases.py
tests/custom/test_core_utilities_coverage.py
tests/custom/test_eot_thresholds_feature.py
tests/custom/test_http_endpoints_coverage.py
tests/custom/test_http_retry_coverage.py
tests/custom/test_language_hint_compat.py
tests/custom/test_language_hints_feature.py
tests/custom/test_latency_report_stt_compat.py
tests/custom/test_listen_v2_connect_wire.py
tests/custom/test_listen_v2_regen_constraints.py
tests/custom/test_misc_coverage.py
tests/custom/test_more_branches_coverage.py
tests/custom/test_query_encoder.py
tests/custom/test_secure_logging.py
tests/custom/test_socket_client_shims.py
tests/custom/test_speak_v2_connect_wire.py
tests/custom/test_speak_v2_coverage.py
tests/custom/test_speak_v2_socket.py
tests/custom/test_text_builder.py
tests/custom/test_transport.py
tests/custom/test_websocket_streaming_coverage.py
tests/typecheck/compat_aliases.py

# Wire test with restored compatibility coverage for legacy create-key request alias
Expand Down
31 changes: 29 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: CI

on: [push]
on: [push, pull_request]

jobs:
compile:
Expand Down Expand Up @@ -29,6 +29,9 @@ jobs:
run: poetry run mypy tests/typecheck
test:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
strategy:
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13"]
Expand All @@ -48,14 +51,38 @@ jobs:
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Install dependencies
run: poetry install
- name: Install coverage tool
run: poetry run pip install pytest-cov respx

- name: Verify Docker is available
run: |
docker --version
docker compose version

- name: Test
run: poetry run pytest -rP .
run: poetry run pytest -rP --cov=deepgram --cov-branch --cov-report=xml --cov-report=term-missing .
- name: Generate code coverage summary
if: matrix.python-version == '3.13'
uses: irongut/CodeCoverageSummary@v1.3.0
with:
filename: coverage.xml
badge: true
format: markdown
hide_branch_rate: false
hide_complexity: false
indicators: true
output: both
thresholds: "75 90"
- name: Add coverage PR comment
if: matrix.python-version == '3.13' && github.event_name == 'pull_request'
uses: marocchino/sticky-pull-request-comment@v2
with:
header: code-coverage
recreate: true
path: code-coverage-results.md
- name: Write coverage to job summary
if: matrix.python-version == '3.13'
run: cat code-coverage-results.md >> $GITHUB_STEP_SUMMARY

publish:
needs: [compile, test]
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@
__pycache__/
dist/
poetry.toml
.coverage
htmlcov/
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ How to identify:
- Our version is a **modified copy** of what Fern generates (e.g., changed `float` to `int`, added optional defaults, broadened a Union type)

Current temporarily frozen files:
- `pyproject.toml` — Fern regenerates this on every SDK regen (it manages package metadata, the version, and dependencies). We add hand-maintained `[tool.coverage.run]` / `[tool.coverage.report]` config that scopes coverage to hand-written logic and excludes pure-generated models (`types/`, `requests/`, `__init__.py`, `version.py`, unused `core/http_sse/`). Frozen so Fern won't strip the coverage config. Before each regen, unfreeze and re-diff so Fern's own dependency/version updates are picked up, then re-apply the coverage blocks.
- `src/deepgram/speak/v1/socket_client.py` — optional message param defaults, broad exception catch
- `src/deepgram/speak/v2/socket_client.py` — same (optional `send_flush`/`send_close` defaults, broad exception catch); new websocket TTS client added in the 2026-07-08 regen
- `src/deepgram/listen/v1/socket_client.py` — same
Expand Down
20 changes: 20 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,26 @@ markers = [
"aiohttp: tests that require httpx_aiohttp to be installed",
]

[tool.coverage.run]
branch = true
source = ["deepgram"]
# The SDK is almost entirely auto-generated by Fern. Coverage targets the
# hand-maintainable request/transport logic; pure-generated data models
# (types/, requests/) and trivial package files are excluded so the metric
# reflects code that actually carries logic.
omit = [
"*/types/*",
"*/requests/*",
"*/__init__.py",
"*/version.py",
# Unused generated SSE transport scaffolding (no endpoint uses server-sent
# events; only referenced lazily by an optional helper).
"*/core/http_sse/*",
]

[tool.coverage.report]
show_missing = true

[tool.mypy]
plugins = ["pydantic.mypy"]

Expand Down
Loading
Loading