gemini-robotics ยท diff
git:20260907.619a061 to git:20260918.06c6019
18 added, 4 removed. Audit A to A.
---
name: gemini-robotics
description: Build low-latency robot agents with Gemini Robotics ER, including streaming perception, function calls, and guarded execution.
---
# Gemini Robotics
Keep Gemini on the perception and planning side of an actuator boundary. The
model may choose a capability; deterministic robot software validates and
executes it.
## Choose the endpoint from the interaction
- Use `gemini-robotics-er-2-streaming-preview` for a stateful Live API session
that receives text, JPEG frames, or audio and orchestrates robot tools with
low latency.
- Use `gemini-robotics-er-2-preview` for discrete embodied-reasoning requests
such as spatial analysis or offline video work. The standard endpoint does
not provide the Live API.
- Treat both model IDs and feature support as preview surfaces. Re-check the
current [model overview](https://ai.google.dev/gemini-api/docs/robotics-overview)
before changing dependencies or deployment assumptions.
## Make the stream an observe-act-observe loop
- Keep one `client.aio.live.connect` session open for the task and run a receive
loop that handles both model content and tool calls.
+ - Serialize user turns and model-facing heartbeats around unresolved turns and
+ blocking tools. A text heartbeat is a new reasoning input, not a transport
+ keepalive, and can interrupt an action as barge-in.
- Declare physical actions with `behavior: BLOCKING`. Execute each call through
the robot adapter, then manually return a `FunctionResponse` with the call ID,
name, and structured result using `send_tool_response`.
- Stream raw 16-bit, 16 kHz, little-endian PCM for speech input and explicitly
end finite audio with `audio_stream_end=True`. Send JPEG camera frames at no
more than the endpoint's current one-frame-per-second limit.
- A camera frame alone updates context but does not trigger reasoning. Pair it
with user audio/text, or use an intentional heartbeat prompt. Heartbeats are
turns and can interrupt generation.
+ - When a tool exists specifically to observe the world, attach its fresh image
+ to that call's `FunctionResponse` when the SDK supports inline media. This
+ binds the evidence to the requesting call more deterministically than placing
+ an unrelated realtime frame immediately before the response.
- The streaming endpoint returns text, not synthesized audio. Route speech
through an independently replaceable TTS adapter or expose speaking as a
bounded tool.
Use Google's current [robotics streaming guide](https://ai.google.dev/gemini-api/docs/robotics-streaming)
for the volatile SDK syntax. Read [FAILURES.md](FAILURES.md) when a session
stalls, ignores images, overlaps actions, or never finishes an audio turn.
## Guard the robot outside the model
- Expose semantic capabilities such as named-waypoint navigation, bounded
inspection, or grasping a currently grounded object. Do not expose raw motor
commands, arbitrary poses, or unrestricted coordinates merely because the
function schema can describe them.
- Validate the tool allowlist, exact arguments, ranges, named resources, and
current perception-issued object IDs in ordinary code. A system instruction
and JSON schema improve model behavior but are not the safety boundary.
+ - Build the advertised tool list from capabilities that passed preflight. Do
+ not leave a disconnected robot, camera, or accessory visible to the model as
+ a callable tool.
- Return completion, rejection, and failure states to the model. After motion,
send a fresh observation so the next decision is based on the resulting
scene rather than the pre-action frame.
- Give every long-running action cancellation and a deadline. On session or
tool timeout, invoke the robot's stop/cancel path independently of the model.
+ - On half-duplex hardware, pause microphone ingestion before speech or another
+ device action and resume it explicitly afterward. Keep this device handoff
+ outside the model's control.
- Prove the same semantic contract against a fake adapter, representative
simulation, and finally supervised hardware. Keep simulator- and robot-
specific motion details behind the adapter.
For the evidence behind these choices and their current validation limits, read
- [SILLY-TURTLEBOT.md](SILLY-TURTLEBOT.md). Use `integration` for process or
- transport boundaries, `ros2` and `navigation` for deterministic mobile-robot
- execution, and `testing` for the fake-to-simulation-to-hardware acceptance
- ladder.
+ [SILLY-TURTLEBOT.md](SILLY-TURTLEBOT.md) for a ROS/Nav2 mobile robot and
+ [STACKCHAN-ER2.md](STACKCHAN-ER2.md) for a USB, audio, camera, and BLE companion.
+ Use `integration` for process or transport boundaries, `ros2` and `navigation`
+ for deterministic mobile-robot execution, and `testing` for the
+ fake-to-simulation-to-hardware acceptance ladder.
## Done
- A complete user turn can stream input, execute a blocking semantic action,
return its result, and reason from a fresh observation.
- An undeclared or invalid action is rejected before reaching the robot SDK.
- Timeout and cancellation behavior is proven without depending on a model
response.