servo-client
The public Python SDK and customer CLI for Servo robot policies, world models, datasets, jobs, and deployments.
Install
pip install 'servo-client>=0.2,<0.3'
Servo releases two architecture-specific Linux wheels containing the native Quinn action-session binary, one portable wheel, and a source distribution. Native clients prefer a validated QUIC route; WSS and H2 binary remain ordered pre-inference fallbacks. Portable installations use the advertised non-native routes. Every route carries the same ActionSession v4 Protobuf frames.
LiveKit is an explicit optional transport:
pip install 'servo-client[livekit]>=0.2,<0.3'
Configure the control plane
Servo has no compiled-in hosted URL. Set the origin supplied by your Servo administrator so an old package cannot silently send credentials or robot traffic to a retired deployment:
export SERVO_BASE_URL='https://<your-servo-control-plane>'
The client also accepts base_url= explicitly. The argument takes precedence over the environment.
Sign in
The distribution installs the customer-safe servo CLI:
servo login
servo whoami
servo key create --label laptop
servo deployment list
Serving, benchmarking, profiling, and platform-operator commands belong to the private
servo-platform distribution and are not installed by servo-client.
Quickstart
import os
import servo
from servo import templates
sv = servo.Servo(
base_url=os.environ["SERVO_BASE_URL"],
api_key=os.environ["SERVO_API_KEY"],
)
robot = sv.robots.register(templates.so101())
observation = templates.sample_observation(robot)
model = sv.models.get("smolvla")
report = model.inspect(robot)
if not report.compatible:
raise RuntimeError(report.issues)
prediction = model.policy(robot, instruction="pick up the cube").act(observation)
print(prediction.actions[0])
Action sessions
sv.session(policy) negotiates the transports advertised by the selected deployment. Once an
inference request could have executed, Servo never replays it over another route.
LiveKit requires both deployment and session opt-in:
provider = servo.ServingProvider(os.environ["SERVO_SERVE_PROVIDER"])
deployment = model.deploy(
robot,
serve_provider=provider,
action_session_channels=("livekit", "wss"),
)
policy = deployment.policy(robot, instruction="pick up the cube")
with sv.session(
policy,
action_session=servo.ActionSessionOptions(channels=("livekit",)),
) as session:
prediction = session.act(observation)
Public boundary
Application compatibility is promised for documented imports from servo and these client
namespaces:
- Stable:
robots,adapters,models,datasets/data,deployments,jobs,licenses, andsecrets. - Advanced: direct endpoint helpers (
servo.connect,servo.attach,EndpointGrant) andsv.self_hosted.
The distribution also carries dependency-light support packages:
- Extension contracts:
servo_action_session,servo_data, andservo_observation. - Implementation dependencies:
servo_contractsandservo_telemetry.
Importability of an implementation package is not a customer compatibility promise. The client
wheel excludes product-only profiler integration and does not contain servo_platform,
servo_runtimes, FastAPI routes, database models, provider launchers, provider credentials, or
private endpoint URLs.
Failure and retry policy
The client does not automatically replay mutations or robot actions. Transport and server failures
are returned as typed Servo errors so applications can choose a recovery policy appropriate to the
operation. Idempotent reads may be retried by application code. Configure timeout= on
servo.Servo; long-running synchronous jobs can require a larger read timeout than catalog calls.
Requirements
- Python 3.12+
- A Servo control-plane URL
- An organization API key for authenticated operations
Full documentation: https://servo.mintlify.site/
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
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 servo_client-0.2.0.tar.gz.
File metadata
- Download URL: servo_client-0.2.0.tar.gz
- Upload date:
- Size: 484.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2c3ec0904647b5b6eeda01b8348c833dbf7bfa8ab4e0afa72bacadda69d636d6
|
|
| MD5 |
b114c1efa88f1c6e93a7a81c7905c3b4
|
|
| BLAKE2b-256 |
e61c0d263bf52af123c98673991e68d8181d3b8fac5116a90801ab0d5ba2ec9f
|
Provenance
The following attestation bundles were made for servo_client-0.2.0.tar.gz:
Publisher:
pypi-publish.yml on npow/servo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
servo_client-0.2.0.tar.gz -
Subject digest:
2c3ec0904647b5b6eeda01b8348c833dbf7bfa8ab4e0afa72bacadda69d636d6 - Sigstore transparency entry: 2688874036
- Sigstore integration time:
-
Permalink:
npow/servo@1f5ac11cd9b0b05510c7d3402d89f4fcbe9cd602 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/npow
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@1f5ac11cd9b0b05510c7d3402d89f4fcbe9cd602 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file servo_client-0.2.0-py3-none-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: servo_client-0.2.0-py3-none-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 2.1 MB
- Tags: Python 3, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ade394d5f4bd2d3af29b432416754dcbdda7ad7b7f79c87d72df3d64548163e2
|
|
| MD5 |
8f36c4bd0e51ebe9c4d5b1fa4370a215
|
|
| BLAKE2b-256 |
a5b48704872706c4809c0027e1120fbf4514e0dfc61bfab69e8b1f34571148da
|
Provenance
The following attestation bundles were made for servo_client-0.2.0-py3-none-manylinux_2_28_x86_64.whl:
Publisher:
pypi-publish.yml on npow/servo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
servo_client-0.2.0-py3-none-manylinux_2_28_x86_64.whl -
Subject digest:
ade394d5f4bd2d3af29b432416754dcbdda7ad7b7f79c87d72df3d64548163e2 - Sigstore transparency entry: 2688874091
- Sigstore integration time:
-
Permalink:
npow/servo@1f5ac11cd9b0b05510c7d3402d89f4fcbe9cd602 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/npow
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@1f5ac11cd9b0b05510c7d3402d89f4fcbe9cd602 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file servo_client-0.2.0-py3-none-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: servo_client-0.2.0-py3-none-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 2.0 MB
- Tags: Python 3, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e0de6a895253fa799ca125c3d88f91a10a8e7fe77b1fbc311ab9c0774da3de88
|
|
| MD5 |
af3dbadb329b70f76626b4e41592f84d
|
|
| BLAKE2b-256 |
ee2cadc8d02f879ce1be1b01f3e19c50c8f17ba00bd62db6e8ca92f795596b93
|
Provenance
The following attestation bundles were made for servo_client-0.2.0-py3-none-manylinux_2_28_aarch64.whl:
Publisher:
pypi-publish.yml on npow/servo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
servo_client-0.2.0-py3-none-manylinux_2_28_aarch64.whl -
Subject digest:
e0de6a895253fa799ca125c3d88f91a10a8e7fe77b1fbc311ab9c0774da3de88 - Sigstore transparency entry: 2688874188
- Sigstore integration time:
-
Permalink:
npow/servo@1f5ac11cd9b0b05510c7d3402d89f4fcbe9cd602 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/npow
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@1f5ac11cd9b0b05510c7d3402d89f4fcbe9cd602 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file servo_client-0.2.0-py3-none-any.whl.
File metadata
- Download URL: servo_client-0.2.0-py3-none-any.whl
- Upload date:
- Size: 556.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
50f40956211aca4198dd6929fb804008469ca1f66336423c720e630f096968e3
|
|
| MD5 |
80d1c10e925bbef93c080b1dde80e4bc
|
|
| BLAKE2b-256 |
3b0fd77b7169eba4e5ff4f9f24d634d383d206f918d2b9f4787d1c711754bb4c
|
Provenance
The following attestation bundles were made for servo_client-0.2.0-py3-none-any.whl:
Publisher:
pypi-publish.yml on npow/servo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
servo_client-0.2.0-py3-none-any.whl -
Subject digest:
50f40956211aca4198dd6929fb804008469ca1f66336423c720e630f096968e3 - Sigstore transparency entry: 2688874153
- Sigstore integration time:
-
Permalink:
npow/servo@1f5ac11cd9b0b05510c7d3402d89f4fcbe9cd602 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/npow
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@1f5ac11cd9b0b05510c7d3402d89f4fcbe9cd602 -
Trigger Event:
workflow_dispatch
-
Statement type: