We put too much thing in EventStream , so it looks mess now. In order to make OH pluggable, Not only EventStream, but also need to simplify the controller logic.
Motivation
Make the module pluggable. If someone want to try his agent, just replace the agent module. If someone want to interact with robot rather than docker, change the runtime module.
For example:
Agent (Event+Action+ step logic)
Runtime (How to interact with robot)
When we change the above logic, we can change openHands from a code generation platform into robot controll platform.
Technical Design
Our current logic:
controller will call agent via function call.
controller will communicate async with runtime via EventStream
runtime will interact with docker via REST API. We implement a docker client inside the docker.
To achieve pluggable, we should optimize the interaction logic between controller with agent and controller with runtime. If we can decouple their logic, we can make agent/runtime as hot plug.
Summary
We put too much thing in EventStream , so it looks mess now. In order to make OH pluggable, Not only
EventStream
, but also need to simplify the controller logic.Motivation Make the module pluggable. If someone want to try his agent, just replace the agent module. If someone want to interact with robot rather than docker, change the runtime module.
For example:
When we change the above logic, we can change openHands from a code generation platform into robot controll platform.
Technical Design
Our current logic:
To achieve pluggable, we should optimize the interaction logic between controller with agent and controller with runtime. If we can decouple their logic, we can make agent/runtime as hot plug.
Alternatives to Consider
Additional context