Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
964c77c
codegen metadata
stainless-app[bot] Oct 21, 2025
9109c24
codegen metadata
stainless-app[bot] Oct 21, 2025
c50bca7
fix(client): close streams without requiring full consumption
stainless-app[bot] Oct 30, 2025
445023e
chore(internal/tests): avoid race condition with implicit client cleanup
stainless-app[bot] Oct 31, 2025
5c82d3a
chore(internal): grammar fix (it's -> its)
stainless-app[bot] Nov 4, 2025
80b7c35
chore(package): drop Python 3.8 support
stainless-app[bot] Nov 11, 2025
6e10abe
fix: compat with Python 3.14
stainless-app[bot] Nov 11, 2025
b71ebf9
fix(compat): update signatures of `model_dump` and `model_dump_json` …
stainless-app[bot] Nov 12, 2025
6df3ecd
chore: add Python 3.14 classifier and testing
stainless-app[bot] Nov 22, 2025
ab93bca
fix: ensure streams are always closed
stainless-app[bot] Nov 28, 2025
d644966
chore(deps): mypy 1.18.1 has a regression, pin to 1.17
stainless-app[bot] Nov 28, 2025
f840597
chore: update lockfile
stainless-app[bot] Dec 3, 2025
ee97b11
chore(docs): use environment variables for authentication in code sni…
stainless-app[bot] Dec 3, 2025
6b7bd87
refactor(api)!: change route to be /beta instead of /v1
stainless-app[bot] Dec 5, 2025
7769f80
fix(types): allow pyright to infer TypedDict types within SequenceNotStr
stainless-app[bot] Dec 9, 2025
37f1eae
chore: add missing docstrings
stainless-app[bot] Dec 9, 2025
1d7820f
chore(internal): add missing files argument to base client
stainless-app[bot] Dec 16, 2025
4ebe231
chore: speedup initial import
stainless-app[bot] Dec 17, 2025
4c68967
fix: use async_to_httpx_files in patch method
stainless-app[bot] Dec 18, 2025
22cd02f
chore(internal): add `--fix` argument to lint script
stainless-app[bot] Dec 19, 2025
4b42988
release: 0.7.0
stainless-app[bot] Dec 19, 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
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.6.1"
".": "0.7.0"
}
2 changes: 1 addition & 1 deletion .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 14
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/miru-ml%2Fmiru-server-e8b887c478291aecbbf06e532903242a5d5ff682a2a6814921bb770c97a1753d.yml
openapi_spec_hash: b15141c2e0e81b8029c620d4aef4188c
config_hash: c1d1c4ffd4bc69023d6bf98b1bbc4304
config_hash: 95b6fa4e87744247f5bdbf841c16ce0a
37 changes: 37 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,42 @@
# Changelog

## 0.7.0 (2025-12-19)

Full Changelog: [v0.6.1...v0.7.0](https://github.com/miruml/python-server-sdk/compare/v0.6.1...v0.7.0)

### ⚠ BREAKING CHANGES

* **api:** change route to be /beta instead of /v1

### Bug Fixes

* **client:** close streams without requiring full consumption ([c50bca7](https://github.com/miruml/python-server-sdk/commit/c50bca723dc9398bf97d9db9d881f8090b9deef0))
* compat with Python 3.14 ([6e10abe](https://github.com/miruml/python-server-sdk/commit/6e10abeb80e20e1d64eb9e1d251bd2d426ed62ad))
* **compat:** update signatures of `model_dump` and `model_dump_json` for Pydantic v1 ([b71ebf9](https://github.com/miruml/python-server-sdk/commit/b71ebf96149950711b88780da4dce30a1e250e02))
* ensure streams are always closed ([ab93bca](https://github.com/miruml/python-server-sdk/commit/ab93bca51d143a6e8d26a05947e538d15ee751ea))
* **types:** allow pyright to infer TypedDict types within SequenceNotStr ([7769f80](https://github.com/miruml/python-server-sdk/commit/7769f807b07bc2d6b611766e1e5d4545289d558d))
* use async_to_httpx_files in patch method ([4c68967](https://github.com/miruml/python-server-sdk/commit/4c6896709773ce6fee0641f107ab0c7364f9716d))


### Chores

* add missing docstrings ([37f1eae](https://github.com/miruml/python-server-sdk/commit/37f1eae5abbe16ad18e05bdf8bfa47509304c7ee))
* add Python 3.14 classifier and testing ([6df3ecd](https://github.com/miruml/python-server-sdk/commit/6df3ecd00b28abb16c06cae6c13b8728445ace6a))
* **deps:** mypy 1.18.1 has a regression, pin to 1.17 ([d644966](https://github.com/miruml/python-server-sdk/commit/d644966063e8b3e17ca407ad4062be2874e07878))
* **docs:** use environment variables for authentication in code snippets ([ee97b11](https://github.com/miruml/python-server-sdk/commit/ee97b11addd6b183e49a28d6ccbc7cb73b9247dd))
* **internal/tests:** avoid race condition with implicit client cleanup ([445023e](https://github.com/miruml/python-server-sdk/commit/445023e773a89e857f47d1ca9fb61f0c1f6fde7b))
* **internal:** add `--fix` argument to lint script ([22cd02f](https://github.com/miruml/python-server-sdk/commit/22cd02f5f184a085b365aca7c1f1f6959be0fbcb))
* **internal:** add missing files argument to base client ([1d7820f](https://github.com/miruml/python-server-sdk/commit/1d7820f56b688e75988288e86b2a6eb62657681f))
* **internal:** grammar fix (it's -> its) ([5c82d3a](https://github.com/miruml/python-server-sdk/commit/5c82d3a7b9f90620c68e850441cbd204d475e8d0))
* **package:** drop Python 3.8 support ([80b7c35](https://github.com/miruml/python-server-sdk/commit/80b7c35b8dbe72ecf05cca08217b934eb8bef3a5))
* speedup initial import ([4ebe231](https://github.com/miruml/python-server-sdk/commit/4ebe2315fe940766e2888b4cda52c7d9799e6132))
* update lockfile ([f840597](https://github.com/miruml/python-server-sdk/commit/f8405973872ef23e5294cf061d7794497e15a1ec))


### Refactors

* **api:** change route to be /beta instead of /v1 ([6b7bd87](https://github.com/miruml/python-server-sdk/commit/6b7bd87fd125f8ac6205af2d289e75036df693e4))

## 0.6.1 (2025-10-21)

Full Changelog: [v0.6.0...v0.6.1](https://github.com/miruml/python-server-sdk/compare/v0.6.0...v0.6.1)
Expand Down
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<!-- prettier-ignore -->
[![PyPI version](https://img.shields.io/pypi/v/miru_server_sdk.svg?label=pypi%20(stable))](https://pypi.org/project/miru_server_sdk/)

The Miru Python library provides convenient access to the Miru REST API from any Python 3.8+
The Miru Python library provides convenient access to the Miru REST API from any Python 3.9+
application. The library includes type definitions for all request params and response fields,
and offers both synchronous and asynchronous clients powered by [httpx](https://github.com/encode/httpx).

Expand Down Expand Up @@ -87,14 +87,15 @@ pip install miru_server_sdk[aiohttp]
Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`:

```python
import os
import asyncio
from miru_server_sdk import DefaultAioHttpClient
from miru_server_sdk import AsyncMiru


async def main() -> None:
async with AsyncMiru(
api_key="My API Key",
api_key=os.environ.get("MIRU_SERVER_API_KEY"), # This is the default and can be omitted
http_client=DefaultAioHttpClient(),
) as client:
config_instance = await client.config_instances.retrieve(
Expand Down Expand Up @@ -376,7 +377,7 @@ print(miru_server_sdk.__version__)

## Requirements

Python 3.8 or higher.
Python 3.9 or higher.

## Contributing

Expand Down
24 changes: 13 additions & 11 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,30 +1,32 @@
[project]
name = "miru_server_sdk"
version = "0.6.1"
version = "0.7.0"
description = "The official Python library for the miru API"
dynamic = ["readme"]
license = "MIT"
authors = [
{ name = "Miru", email = "[email protected]" },
]

dependencies = [
"httpx>=0.23.0, <1",
"pydantic>=1.9.0, <3",
"typing-extensions>=4.10, <5",
"anyio>=3.5.0, <5",
"distro>=1.7.0, <2",
"sniffio",
"httpx>=0.23.0, <1",
"pydantic>=1.9.0, <3",
"typing-extensions>=4.10, <5",
"anyio>=3.5.0, <5",
"distro>=1.7.0, <2",
"sniffio",
]
requires-python = ">= 3.8"

requires-python = ">= 3.9"
classifiers = [
"Typing :: Typed",
"Intended Audience :: Developers",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Operating System :: OS Independent",
"Operating System :: POSIX",
"Operating System :: MacOS",
Expand All @@ -46,7 +48,7 @@ managed = true
# version pins are in requirements-dev.lock
dev-dependencies = [
"pyright==1.1.399",
"mypy",
"mypy==1.17",
"respx",
"pytest",
"pytest-asyncio",
Expand Down Expand Up @@ -141,7 +143,7 @@ filterwarnings = [
# there are a couple of flags that are still disabled by
# default in strict mode as they are experimental and niche.
typeCheckingMode = "strict"
pythonVersion = "3.8"
pythonVersion = "3.9"

exclude = [
"_dev",
Expand Down
112 changes: 62 additions & 50 deletions requirements-dev.lock
Original file line number Diff line number Diff line change
Expand Up @@ -12,40 +12,45 @@
-e file:.
aiohappyeyeballs==2.6.1
# via aiohttp
aiohttp==3.12.8
aiohttp==3.13.2
# via httpx-aiohttp
# via miru-server-sdk
aiosignal==1.3.2
aiosignal==1.4.0
# via aiohttp
annotated-types==0.6.0
annotated-types==0.7.0
# via pydantic
anyio==4.4.0
anyio==4.12.0
# via httpx
# via miru-server-sdk
argcomplete==3.1.2
argcomplete==3.6.3
# via nox
async-timeout==5.0.1
# via aiohttp
attrs==25.3.0
attrs==25.4.0
# via aiohttp
certifi==2023.7.22
# via nox
backports-asyncio-runner==1.2.0
# via pytest-asyncio
certifi==2025.11.12
# via httpcore
# via httpx
colorlog==6.7.0
colorlog==6.10.1
# via nox
dependency-groups==1.3.1
# via nox
dirty-equals==0.6.0
distlib==0.3.7
dirty-equals==0.11
distlib==0.4.0
# via virtualenv
distro==1.8.0
distro==1.9.0
# via miru-server-sdk
exceptiongroup==1.2.2
exceptiongroup==1.3.1
# via anyio
# via pytest
execnet==2.1.1
execnet==2.1.2
# via pytest-xdist
filelock==3.12.4
filelock==3.19.1
# via virtualenv
frozenlist==1.6.2
frozenlist==1.8.0
# via aiohttp
# via aiosignal
h11==0.16.0
Expand All @@ -58,80 +63,87 @@ httpx==0.28.1
# via respx
httpx-aiohttp==0.1.9
# via miru-server-sdk
idna==3.4
humanize==4.13.0
# via nox
idna==3.11
# via anyio
# via httpx
# via yarl
importlib-metadata==7.0.0
iniconfig==2.0.0
importlib-metadata==8.7.0
iniconfig==2.1.0
# via pytest
markdown-it-py==3.0.0
# via rich
mdurl==0.1.2
# via markdown-it-py
multidict==6.4.4
multidict==6.7.0
# via aiohttp
# via yarl
mypy==1.14.1
mypy-extensions==1.0.0
mypy==1.17.0
mypy-extensions==1.1.0
# via mypy
nodeenv==1.8.0
nodeenv==1.9.1
# via pyright
nox==2023.4.22
packaging==23.2
nox==2025.11.12
packaging==25.0
# via dependency-groups
# via nox
# via pytest
platformdirs==3.11.0
pathspec==0.12.1
# via mypy
platformdirs==4.4.0
# via virtualenv
pluggy==1.5.0
pluggy==1.6.0
# via pytest
propcache==0.3.1
propcache==0.4.1
# via aiohttp
# via yarl
pydantic==2.11.9
pydantic==2.12.5
# via miru-server-sdk
pydantic-core==2.33.2
pydantic-core==2.41.5
# via pydantic
pygments==2.18.0
pygments==2.19.2
# via pytest
# via rich
pyright==1.1.399
pytest==8.3.3
pytest==8.4.2
# via pytest-asyncio
# via pytest-xdist
pytest-asyncio==0.24.0
pytest-xdist==3.7.0
python-dateutil==2.8.2
pytest-asyncio==1.2.0
pytest-xdist==3.8.0
python-dateutil==2.9.0.post0
# via time-machine
pytz==2023.3.post1
# via dirty-equals
respx==0.22.0
rich==13.7.1
ruff==0.9.4
setuptools==68.2.2
# via nodeenv
six==1.16.0
rich==14.2.0
ruff==0.14.7
six==1.17.0
# via python-dateutil
sniffio==1.3.0
# via anyio
sniffio==1.3.1
# via miru-server-sdk
time-machine==2.9.0
tomli==2.0.2
time-machine==2.19.0
tomli==2.3.0
# via dependency-groups
# via mypy
# via nox
# via pytest
typing-extensions==4.12.2
typing-extensions==4.15.0
# via aiosignal
# via anyio
# via exceptiongroup
# via miru-server-sdk
# via multidict
# via mypy
# via pydantic
# via pydantic-core
# via pyright
# via pytest-asyncio
# via typing-inspection
typing-inspection==0.4.1
# via virtualenv
typing-inspection==0.4.2
# via pydantic
virtualenv==20.24.5
virtualenv==20.35.4
# via nox
yarl==1.20.0
yarl==1.22.0
# via aiohttp
zipp==3.17.0
zipp==3.23.0
# via importlib-metadata
Loading