Python client for MoDIS Service Nodes
Project description
MoDIS Python Client
modis-client is the Python client package for MoDIS Service Nodes (MSNs).
It exposes MoDIS-native request and response objects for direct Python callers.
The PyPI distribution name is modis-client. pymodis and modis are already
used by unrelated packages, while modis-client currently appears available.
Install
From a checkout:
python -m pip install -e .
The import package is modis_client:
from modis_client import SingleNodeClient
with SingleNodeClient(base_url="http://localhost:8000") as client:
response = client.chat_completion({
"model": "qwen3.6-27b",
"messages": [{"role": "user", "content": "Hello MoDIS."}],
})
print(response.content.content)
The package supports sync and async single-node clients, routing clients, batch requests, explicit streaming methods, MoDIS tool-call fields, and Pydantic v2 models with MoDIS wire aliases.
Async Client
from modis_client import AsyncSingleNodeClient
async with AsyncSingleNodeClient(base_url="http://localhost:8000") as client:
response = await client.responses({
"model": "qwen3.6-27b",
"input": "Summarize MoDIS in one sentence.",
})
Batch Requests
responses = client.chat_completion([
{"model": "qwen3.6-27b", "messages": [{"role": "user", "content": "one"}]},
{"model": "qwen3.6-27b", "messages": [{"role": "user", "content": "two"}]},
])
Streaming
for event in client.chat_completion_stream({
"model": "qwen3.6-27b",
"messages": [{"role": "user", "content": "Count to three."}],
}):
if event.event == "delta":
print(event.payload)
Tool Calls
response = client.chat_completion({
"model": "qwen3.6-27b",
"messages": [{"role": "user", "content": "What time is it?"}],
"tools": [
{
"type": "function",
"function": {
"name": "get_time",
"description": "Return the current local time.",
"parameters": {"type": "object", "properties": {}},
},
}
],
"toolChoice": "auto",
"parallelToolCalls": True,
})
Routing
from modis_client import RoutingClient
client = RoutingClient(
nodes=[
"http://msn-a:8000",
{"base_url": "http://msn-b:8000", "priority": 5, "node_id": "msn-b"},
],
strategy="balanced",
)
Pydantic Models
Responses are returned as Pydantic models by default. Use to_wire() or
model_dump(by_alias=True, exclude_none=True) when you need the MoDIS JSON
shape:
wire_payload = response.to_wire()
ModisClientError is raised for transport failures, typed MoDIS errors, and
stream protocol errors.
Development
python -m pip install -e ".[dev]"
pytest
ruff check .
ruff format --check .
mypy src
python -m build
Live Service Tests
Live tests are opt-in and require a running modis-service or compatible
MoDIS endpoint. They are skipped unless MODIS_LIVE_SERVICE_URL is set.
MODIS_LIVE_SERVICE_URL=http://localhost:8000 \
MODIS_LIVE_TEXT_MODEL=qwen3.6-27b \
MODIS_LIVE_IMAGE_MODEL=qwen-image \
.venv/bin/python -m pytest -m live
Optional variables:
| Variable | Default | Purpose |
|---|---|---|
MODIS_LIVE_TIMEOUT |
900 |
Per-request timeout in seconds. |
MODIS_LIVE_CONCURRENCY |
4 |
Concurrent async text requests. |
MODIS_LIVE_IMAGE_WIDTH |
1024 |
Image test width. |
MODIS_LIVE_IMAGE_HEIGHT |
1024 |
Image test height. |
MODIS_LIVE_IMAGE_STEPS |
20 |
Image inference steps. |
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file modis_client-0.1.0.tar.gz.
File metadata
- Download URL: modis_client-0.1.0.tar.gz
- Upload date:
- Size: 22.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5b14e0c42816593f2c1a3ca19c214b935ce7cf2a9fc6d90ac2db7796738c2996
|
|
| MD5 |
4afb37168171cfeb135cdaf0a79d3d1e
|
|
| BLAKE2b-256 |
1dbd172d82df28babb0163766495da29107130f7f078468a305541fb27409018
|
File details
Details for the file modis_client-0.1.0-py3-none-any.whl.
File metadata
- Download URL: modis_client-0.1.0-py3-none-any.whl
- Upload date:
- Size: 29.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f8de4549cb86d0e866038be4cf6871ca57610eadb3c7b559f0bb0c3e9c3a38c8
|
|
| MD5 |
d65a7f4b824d0ca93f20cbe6d2848ce0
|
|
| BLAKE2b-256 |
4390081b68dcb84d89591b330238ea59c07db49612fe18511559e6a9c108552a
|