Skip to main content

Python client for the Menlo Robot Control Service (RCS) control plane.

Project description

menlo-robot-sdk

Python client for the Menlo Robot Control Service (RCS): robot CRUD, session lifecycle, and runtime skill calls through RCS.

Alpha: this package is in active development and may introduce breaking API changes between minor versions.

Install

uv add menlo-robot-sdk

The base package covers the RCS HTTP control plane. Runtime skills, state, and camera capture use LiveKit SFU RPC (runtime.*) when join_livekit=True. Install the LiveKit extra for that path:

uv add "menlo-robot-sdk[livekit]"

Configure

Local development against RCS uses an unsigned development identity:

from menlo_robot_sdk import DevIdentity, MenloSettings

settings = MenloSettings(
    rcs_url="http://localhost:8002",
    identity=DevIdentity(
        sub="user_dev",
        organization_id="org_dev",
        team_id="team_dev",
    ).to_header(),
)

You can also load settings from environment variables:

export MENLO_RCS_URL=http://localhost:8002
export MENLO_IDENTITY='{"sub":"user_dev","organization_id":"org_dev","team_id":"team_dev","roles":[],"scopes":[]}'

Alternatively set MENLO_API_KEY (an sk_live_… key from the console) and point MENLO_RCS_URL at the platform-auth edge (https://platform-auth.menlo.ai/rcs) — no identity needed; the edge mints it.

Quick Example

import asyncio

from menlo_robot_sdk import AsyncClient, ConnectCallbacks, DevIdentity, MenloSettings, connect


async def main() -> None:
    settings = MenloSettings(
        rcs_url="http://localhost:8002",
        identity=DevIdentity(
            sub="user_dev",
            organization_id="org_dev",
            team_id="team_dev",
        ).to_header(),
    )

    events = []

    def on_action_result(event) -> None:
        events.append(event)

    async with AsyncClient(settings=settings) as client:
        created = await client.robots.create(name="sdk-demo", model="asimov-v0")
        session = None
        try:
            session = await connect(
                client,
                created.robot.id,
                worker_names=["sim-worker"],
                join_livekit=False,
                callbacks=ConnectCallbacks(on_action_result=on_action_result),
            )

            skills = await session.discover_skills()
            status = await session.state.get("robot_status")
            # On-demand JPEG from rcw (requires join_livekit=True and a viewer in the room):
            # jpeg = await session.get_vision("pov")
            result = await session.invoke(
                "set_velocity",
                {"wz": 0.8, "duration_s": 2.0},
            )

            print([skill.name for skill in skills], status.runtime.status, result.status)
        finally:
            if session is not None:
                await session.disconnect()
            await client.robots.delete(created.robot.id)


asyncio.run(main())

The runtime skill calls above require a running local RCS stack and browser viewer.

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

menlo_robot_sdk-0.2.0.tar.gz (42.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

menlo_robot_sdk-0.2.0-py3-none-any.whl (40.3 kB view details)

Uploaded Python 3

File details

Details for the file menlo_robot_sdk-0.2.0.tar.gz.

File metadata

  • Download URL: menlo_robot_sdk-0.2.0.tar.gz
  • Upload date:
  • Size: 42.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for menlo_robot_sdk-0.2.0.tar.gz
Algorithm Hash digest
SHA256 5ba36f6a58d2e61ff60ca41e04a6c0729875d9467df029cfaa8ead3ae4e5ef43
MD5 d9974d5ef9f8dcf1647b14f603006424
BLAKE2b-256 84934b9888f9fe2490cafd18e7deb5b3388792e27a0678d95bd67a001293cfa8

See more details on using hashes here.

Provenance

The following attestation bundles were made for menlo_robot_sdk-0.2.0.tar.gz:

Publisher: menlo-robot-sdk-publish.yml on menloresearch/mono

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file menlo_robot_sdk-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: menlo_robot_sdk-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 40.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for menlo_robot_sdk-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 60576359887017fffe129a38053a1b3e62e6d411caa7ee44af67e9faccc0bc0e
MD5 7e93a26333167abe27195d919d62cb77
BLAKE2b-256 7edb7a468de107740693b9b59e452a29b52b3e1fad83bc53ffcd43e00efc44f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for menlo_robot_sdk-0.2.0-py3-none-any.whl:

Publisher: menlo-robot-sdk-publish.yml on menloresearch/mono

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page