Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
763afaf
fix: remove custom binary_request handling superseded by codegen (#28)
jharrell Apr 8, 2026
56bd96e
feat(client): add support for binary request streaming
stainless-app[bot] Apr 9, 2026
4de949f
chore(internal): update `actions/checkout` version
stainless-app[bot] Jan 16, 2026
aa28320
chore(ci): upgrade `actions/github-script`
stainless-app[bot] Jan 23, 2026
b448904
fix(docs): fix mcp installation instructions for remote servers
stainless-app[bot] Jan 28, 2026
a855555
feat(client): add custom JSON encoder for extended type support
stainless-app[bot] Jan 29, 2026
6733bea
chore(internal): version bump
stainless-app[bot] Feb 6, 2026
6d39e6e
chore(internal): bump dependencies
stainless-app[bot] Feb 9, 2026
0cf9c5f
chore(internal): fix lint error on Python 3.14
stainless-app[bot] Feb 11, 2026
0d10457
chore: format all `api.md` files
stainless-app[bot] Feb 12, 2026
dd5b8a9
chore: update mock server docs
stainless-app[bot] Feb 19, 2026
fead372
chore(internal): add request options to SSE classes
stainless-app[bot] Feb 23, 2026
00a019f
chore(internal): make `test_proxy_environment_variables` more resilient
stainless-app[bot] Feb 23, 2026
2ec43af
chore(internal): make `test_proxy_environment_variables` more resilie…
stainless-app[bot] Feb 24, 2026
ca18be8
chore(test): do not count install time for mock server timeout
stainless-app[bot] Mar 5, 2026
f8763df
chore(ci): skip uploading artifacts on stainless-internal branches
stainless-app[bot] Mar 7, 2026
3d66005
chore: update placeholder string
stainless-app[bot] Mar 7, 2026
f8a82fe
fix(pydantic): do not pass `by_alias` unless set
stainless-app[bot] Mar 16, 2026
e8e396e
fix(deps): bump minimum typing-extensions version
stainless-app[bot] Mar 16, 2026
cff7016
chore(internal): tweak CI branches
stainless-app[bot] Mar 16, 2026
e87c2a0
fix: sanitize endpoint path params
stainless-app[bot] Mar 19, 2026
b63e313
refactor(tests): switch from prism to steady
stainless-app[bot] Mar 19, 2026
57552b1
chore(tests): bump steady to v0.19.4
stainless-app[bot] Mar 20, 2026
ec60cc4
chore(tests): bump steady to v0.19.5
stainless-app[bot] Mar 20, 2026
c1351cf
chore(internal): update gitignore
stainless-app[bot] Mar 23, 2026
54e2229
chore(tests): bump steady to v0.19.6
stainless-app[bot] Mar 23, 2026
e8479c1
chore(ci): skip lint on metadata-only changes
stainless-app[bot] Mar 24, 2026
9b78194
chore(tests): bump steady to v0.19.7
stainless-app[bot] Mar 24, 2026
898e230
feat(internal): implement indices array format for query and form ser…
stainless-app[bot] Mar 26, 2026
09fa209
chore(tests): bump steady to v0.20.1
stainless-app[bot] Mar 31, 2026
4bb6605
chore(tests): bump steady to v0.20.2
stainless-app[bot] Mar 31, 2026
832318c
docs(api): updates to API spec
stainless-app[bot] Apr 6, 2026
70761a4
fix(client): preserve hardcoded query params when merging with user p…
stainless-app[bot] Apr 7, 2026
c6bee06
feat(api): Deprecate AI Detection, Medical Comprehend, and Context-Aw…
stainless-app[bot] Apr 9, 2026
57837bc
fix: resolve duplicate code (#29)
jharrell Apr 9, 2026
ae4c4ad
fix: ensure file data are only sent as 1 parameter
stainless-app[bot] Apr 10, 2026
d28e7e2
release: 2.5.0
stainless-app[bot] Apr 10, 2026
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
34 changes: 20 additions & 14 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
name: CI
on:
push:
branches-ignore:
- 'generated'
- 'codegen/**'
- 'integrated/**'
- 'stl-preview-head/**'
- 'stl-preview-base/**'
branches:
- '**'
- '!integrated/**'
- '!stl-preview-head/**'
- '!stl-preview-base/**'
- '!generated'
- '!codegen/**'
- 'codegen/stl/**'
pull_request:
branches-ignore:
- 'stl-preview-head/**'
Expand All @@ -17,9 +19,9 @@ jobs:
timeout-minutes: 10
name: lint
runs-on: ${{ github.repository == 'stainless-sdks/writer-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata')
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Install Rye
run: |
Expand All @@ -36,15 +38,15 @@ jobs:
run: ./scripts/lint

build:
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata')
timeout-minutes: 10
name: build
permissions:
contents: read
id-token: write
runs-on: ${{ github.repository == 'stainless-sdks/writer-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Install Rye
run: |
Expand All @@ -61,14 +63,18 @@ jobs:
run: rye build

- name: Get GitHub OIDC Token
if: github.repository == 'stainless-sdks/writer-python'
if: |-
github.repository == 'stainless-sdks/writer-python' &&
!startsWith(github.ref, 'refs/heads/stl/')
id: github-oidc
uses: actions/github-script@v6
uses: actions/github-script@v8
with:
script: core.setOutput('github_token', await core.getIDToken());

- name: Upload tarball
if: github.repository == 'stainless-sdks/writer-python'
if: |-
github.repository == 'stainless-sdks/writer-python' &&
!startsWith(github.ref, 'refs/heads/stl/')
env:
URL: https://pkg.stainless.com/s
AUTH: ${{ steps.github-oidc.outputs.github_token }}
Expand All @@ -81,7 +87,7 @@ jobs:
runs-on: ${{ github.repository == 'stainless-sdks/writer-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Install Rye
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish-pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Install Rye
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release-doctor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
if: github.repository == 'writer/writer-python' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-please') || github.head_ref == 'next')

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Check release environment
run: |
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
.prism.log
.stdy.log
_dev

__pycache__
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "2.4.0"
".": "2.5.0"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 33
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/writerai%2Fwriter-ea6ec4b34f6b7fdecc564f59b2e31482eee05830bf8dc1f389461b158de1548e.yml
openapi_spec_hash: ea89c1faed473908be2740efe6da255f
config_hash: 247c2ce23a36ef7446d356308329c87b
configured_endpoints: 30
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/writerai%2Fwriter-ea6b4de3976794a02ea8fc01669d901cd7b159ba0d598cc9653e01c987a2f806.yml
openapi_spec_hash: 4d4a9ba232d19a6180e6d4a7d5566103
config_hash: 8701b1a467238f1afdeceeb7feb1adc6
59 changes: 59 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,64 @@
# Changelog

## 2.5.0 (2026-04-10)

Full Changelog: [v2.4.0...v2.5.0](https://github.com/writer/writer-python/compare/v2.4.0...v2.5.0)

### Features

* **api:** Deprecate AI Detection, Medical Comprehend, and Context-Aware Text Splitting ([c6bee06](https://github.com/writer/writer-python/commit/c6bee0669b39c1563d313929d9461887cf88258a))
* **client:** add custom JSON encoder for extended type support ([a855555](https://github.com/writer/writer-python/commit/a85555525a3f1188ee8ea9627f965df7a4fd0c87))
* **client:** add support for binary request streaming ([56bd96e](https://github.com/writer/writer-python/commit/56bd96eb78fa32be252ec513660151c9fead3714))
* **internal:** implement indices array format for query and form serialization ([898e230](https://github.com/writer/writer-python/commit/898e2309062a9fd1983a34319653b7d54a651fcd))


### Bug Fixes

* **client:** preserve hardcoded query params when merging with user params ([70761a4](https://github.com/writer/writer-python/commit/70761a47b5d5ac574ce7d8e2938562e1cb2fe2a9))
* **deps:** bump minimum typing-extensions version ([e8e396e](https://github.com/writer/writer-python/commit/e8e396e83491bf46064cc5612fa29336e666d83d))
* **docs:** fix mcp installation instructions for remote servers ([b448904](https://github.com/writer/writer-python/commit/b4489040d3c7fe661bdefa8e8faf4889cac984b2))
* ensure file data are only sent as 1 parameter ([ae4c4ad](https://github.com/writer/writer-python/commit/ae4c4ad8931aed11cd3e06fccc735b6ef6318884))
* **pydantic:** do not pass `by_alias` unless set ([f8a82fe](https://github.com/writer/writer-python/commit/f8a82feefe1355e507a7d0d5f6612ce543e9bad7))
* remove custom binary_request handling superseded by codegen ([#28](https://github.com/writer/writer-python/issues/28)) ([763afaf](https://github.com/writer/writer-python/commit/763afaf1977954a9f5ccce9df9716e7f72a13389))
* resolve duplicate code ([#29](https://github.com/writer/writer-python/issues/29)) ([57837bc](https://github.com/writer/writer-python/commit/57837bc12ba7bf9e83c333c39fe4f6524d229be6))
* sanitize endpoint path params ([e87c2a0](https://github.com/writer/writer-python/commit/e87c2a052e70b421c2ccad30451853ce900d7cd0))


### Chores

* **ci:** skip lint on metadata-only changes ([e8479c1](https://github.com/writer/writer-python/commit/e8479c17eef94d004ce86f08956f608ff75102cd))
* **ci:** skip uploading artifacts on stainless-internal branches ([f8763df](https://github.com/writer/writer-python/commit/f8763df9664747b5bdc35bb2dfde35f4bb8f7d21))
* **ci:** upgrade `actions/github-script` ([aa28320](https://github.com/writer/writer-python/commit/aa283208404097945e299db4ffd23c36d973f414))
* format all `api.md` files ([0d10457](https://github.com/writer/writer-python/commit/0d10457e3978e1d3f8b7cbedb634d2f68a4812b7))
* **internal:** add request options to SSE classes ([fead372](https://github.com/writer/writer-python/commit/fead372f0986f9ab11cae22d2ce38e0f1dc094aa))
* **internal:** bump dependencies ([6d39e6e](https://github.com/writer/writer-python/commit/6d39e6eef109d47d142224a93819407d353841e1))
* **internal:** fix lint error on Python 3.14 ([0cf9c5f](https://github.com/writer/writer-python/commit/0cf9c5fdad07b9bba6a7d8c6540014280e7b97c6))
* **internal:** make `test_proxy_environment_variables` more resilient ([00a019f](https://github.com/writer/writer-python/commit/00a019f36477624456cc047acfe9756c1a7977cd))
* **internal:** make `test_proxy_environment_variables` more resilient to env ([2ec43af](https://github.com/writer/writer-python/commit/2ec43afcb5384be2428913f2d11db43892a336f6))
* **internal:** tweak CI branches ([cff7016](https://github.com/writer/writer-python/commit/cff70161f1868dd4ea441b40fb3f9845459791c5))
* **internal:** update `actions/checkout` version ([4de949f](https://github.com/writer/writer-python/commit/4de949f0dfba55067898bd3b25cdc6dceb193541))
* **internal:** update gitignore ([c1351cf](https://github.com/writer/writer-python/commit/c1351cf85cf3959c5b5894731da9841fa8ffcf76))
* **internal:** version bump ([6733bea](https://github.com/writer/writer-python/commit/6733bea446f6f96314b8df1a6f612f51bf12cbec))
* **test:** do not count install time for mock server timeout ([ca18be8](https://github.com/writer/writer-python/commit/ca18be8d1efe67d932ae376ca2dead4b50da25b0))
* **tests:** bump steady to v0.19.4 ([57552b1](https://github.com/writer/writer-python/commit/57552b1487456e52b7f6bc9a04021469426131a1))
* **tests:** bump steady to v0.19.5 ([ec60cc4](https://github.com/writer/writer-python/commit/ec60cc49a2df464fda427fc53202eaa178a5c0ce))
* **tests:** bump steady to v0.19.6 ([54e2229](https://github.com/writer/writer-python/commit/54e22299884a96539e861759286846c1cf6368e0))
* **tests:** bump steady to v0.19.7 ([9b78194](https://github.com/writer/writer-python/commit/9b78194c51ddcdc933bc476e6c8d73ef9cdd8aeb))
* **tests:** bump steady to v0.20.1 ([09fa209](https://github.com/writer/writer-python/commit/09fa209274456cab49225fde9ffef8f1e0e11406))
* **tests:** bump steady to v0.20.2 ([4bb6605](https://github.com/writer/writer-python/commit/4bb6605e9837929848711e27b57c93e7c33b0e40))
* update mock server docs ([dd5b8a9](https://github.com/writer/writer-python/commit/dd5b8a9924b13047e661e4c1ea59b59aa2b3bfef))
* update placeholder string ([3d66005](https://github.com/writer/writer-python/commit/3d66005c744fec16d503b28342511b06caabee87))


### Documentation

* **api:** updates to API spec ([832318c](https://github.com/writer/writer-python/commit/832318cd702f5cd3e8150d0a09ec227685decee9))


### Refactors

* **tests:** switch from prism to steady ([b63e313](https://github.com/writer/writer-python/commit/b63e3135f77a4c73063118be89244c6b8674fbc5))

## 2.4.0 (2026-02-06)

Full Changelog: [v2.4.0-rc1...v2.4.0](https://github.com/writer/writer-python/compare/v2.4.0-rc1...v2.4.0)
Expand Down
5 changes: 2 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,11 +85,10 @@ $ pip install ./path-to-wheel-file.whl

## Running tests

Most tests require you to [set up a mock server](https://github.com/stoplightio/prism) against the OpenAPI spec to run the tests.
Most tests require you to [set up a mock server](https://github.com/dgellow/steady) against the OpenAPI spec to run the tests.

```sh
# you will need npm installed
$ npx prism mock path/to/your/openapi.yml
$ ./scripts/mock
```

```sh
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ It is generated with [Stainless](https://www.stainless.com/).

Use the Writer MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.

[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=writer-sdk-mcp&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIndyaXRlci1zZGstbWNwIl19)
[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22writer-sdk-mcp%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22writer-sdk-mcp%22%5D%7D)
[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=writer-sdk-mcp&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIndyaXRlci1zZGstbWNwIl0sImVudiI6eyJXUklURVJfQVBJX0tFWSI6Ik15IEFQSSBLZXkifX0)
[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22writer-sdk-mcp%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22writer-sdk-mcp%22%5D%2C%22env%22%3A%7B%22WRITER_API_KEY%22%3A%22My%20API%20Key%22%7D%7D)

> Note: You may need to set environment variables in your MCP client.

Expand All @@ -28,7 +28,7 @@ To install the package from PyPI, use `pip`:

```sh
# install from PyPI
pip install '--pre writer-sdk'
pip install writer-sdk
```

## Prequisites
Expand Down Expand Up @@ -125,7 +125,7 @@ You can enable this by installing `aiohttp`:

```sh
# install from PyPI
pip install '--pre writer-sdk[aiohttp]'
pip install writer-sdk[aiohttp]
```

Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`:
Expand Down
25 changes: 3 additions & 22 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -162,32 +162,13 @@ Methods:
Types:

```python
from writerai.types import (
ToolAIDetectResponse,
ToolContextAwareSplittingResponse,
ToolParsePdfResponse,
ToolWebSearchResponse,
)
```

Methods:

- <code title="post /v1/tools/ai-detect">client.tools.<a href="./src/writerai/resources/tools/tools.py">ai_detect</a>(\*\*<a href="src/writerai/types/tool_ai_detect_params.py">params</a>) -> <a href="./src/writerai/types/tool_ai_detect_response.py">ToolAIDetectResponse</a></code>
- <code title="post /v1/tools/context-aware-splitting">client.tools.<a href="./src/writerai/resources/tools/tools.py">context_aware_splitting</a>(\*\*<a href="src/writerai/types/tool_context_aware_splitting_params.py">params</a>) -> <a href="./src/writerai/types/tool_context_aware_splitting_response.py">ToolContextAwareSplittingResponse</a></code>
- <code title="post /v1/tools/pdf-parser/{file_id}">client.tools.<a href="./src/writerai/resources/tools/tools.py">parse_pdf</a>(file_id, \*\*<a href="src/writerai/types/tool_parse_pdf_params.py">params</a>) -> <a href="./src/writerai/types/tool_parse_pdf_response.py">ToolParsePdfResponse</a></code>
- <code title="post /v1/tools/web-search">client.tools.<a href="./src/writerai/resources/tools/tools.py">web_search</a>(\*\*<a href="src/writerai/types/tool_web_search_params.py">params</a>) -> <a href="./src/writerai/types/tool_web_search_response.py">ToolWebSearchResponse</a></code>

## Comprehend

Types:

```python
from writerai.types.tools import ComprehendMedicalResponse
from writerai.types import ToolParsePdfResponse, ToolWebSearchResponse
```

Methods:

- <code title="post /v1/tools/comprehend/medical">client.tools.comprehend.<a href="./src/writerai/resources/tools/comprehend.py">medical</a>(\*\*<a href="src/writerai/types/tools/comprehend_medical_params.py">params</a>) -> <a href="./src/writerai/types/tools/comprehend_medical_response.py">ComprehendMedicalResponse</a></code>
- <code title="post /v1/tools/pdf-parser/{file_id}">client.tools.<a href="./src/writerai/resources/tools.py">parse_pdf</a>(file_id, \*\*<a href="src/writerai/types/tool_parse_pdf_params.py">params</a>) -> <a href="./src/writerai/types/tool_parse_pdf_response.py">ToolParsePdfResponse</a></code>
- <code title="post /v1/tools/web-search">client.tools.<a href="./src/writerai/resources/tools.py">web_search</a>(\*\*<a href="src/writerai/types/tool_web_search_params.py">params</a>) -> <a href="./src/writerai/types/tool_web_search_response.py">ToolWebSearchResponse</a></code>

# Translation

Expand Down
6 changes: 3 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "writer-sdk"
version = "2.4.0"
version = "2.5.0"
description = "The official Python library for the writer API"
dynamic = ["readme"]
license = "Apache-2.0"
Expand All @@ -11,7 +11,7 @@ authors = [
dependencies = [
"httpx>=0.23.0, <1",
"pydantic>=1.9.0, <3",
"typing-extensions>=4.10, <5",
"typing-extensions>=4.14, <5",
"anyio>=3.5.0, <5",
"distro>=1.7.0, <2",
"sniffio",
Expand Down Expand Up @@ -73,7 +73,7 @@ format = { chain = [
# run formatting again to fix any inconsistencies when imports are stripped
"format:ruff",
]}
"format:docs" = "python scripts/utils/ruffen-docs.py README.md api.md"
"format:docs" = "bash -c 'python scripts/utils/ruffen-docs.py README.md $(find . -type f -name api.md)'"
"format:ruff" = "ruff format"

"lint" = { chain = [
Expand Down
20 changes: 10 additions & 10 deletions requirements-dev.lock
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@
-e file:.
aiohappyeyeballs==2.6.1
# via aiohttp
aiohttp==3.13.2
aiohttp==3.13.3
# via httpx-aiohttp
# via writer-sdk
aiosignal==1.4.0
# via aiohttp
annotated-types==0.7.0
# via pydantic
anyio==4.12.0
anyio==4.12.1
# via httpx
# via writer-sdk
argcomplete==3.6.3
Expand All @@ -33,7 +33,7 @@ attrs==25.4.0
# via nox
backports-asyncio-runner==1.2.0
# via pytest-asyncio
certifi==2025.11.12
certifi==2026.1.4
# via httpcore
# via httpx
colorlog==6.10.1
Expand Down Expand Up @@ -63,15 +63,15 @@ httpx==0.28.1
# via httpx-aiohttp
# via respx
# via writer-sdk
httpx-aiohttp==0.1.9
httpx-aiohttp==0.1.12
# via writer-sdk
humanize==4.13.0
# via nox
idna==3.11
# via anyio
# via httpx
# via yarl
importlib-metadata==8.7.0
importlib-metadata==8.7.1
iniconfig==2.1.0
# via pytest
inline-snapshot==0.20.5
Expand All @@ -87,14 +87,14 @@ multidict==6.7.0
mypy==1.17.0
mypy-extensions==1.1.0
# via mypy
nodeenv==1.9.1
nodeenv==1.10.0
# via pyright
nox==2025.11.12
packaging==25.0
# via dependency-groups
# via nox
# via pytest
pathspec==0.12.1
pathspec==1.0.3
# via mypy
platformdirs==4.4.0
# via virtualenv
Expand All @@ -120,13 +120,13 @@ python-dateutil==2.9.0.post0
# via time-machine
respx==0.22.0
rich==14.2.0
ruff==0.14.7
ruff==0.14.13
six==1.17.0
# via python-dateutil
sniffio==1.3.1
# via writer-sdk
time-machine==2.19.0
tomli==2.3.0
tomli==2.4.0
# via dependency-groups
# via mypy
# via nox
Expand All @@ -146,7 +146,7 @@ typing-extensions==4.15.0
# via writer-sdk
typing-inspection==0.4.2
# via pydantic
virtualenv==20.35.4
virtualenv==20.36.1
# via nox
yarl==1.22.0
# via aiohttp
Expand Down
Loading
Loading