Package to extract embodiment information from robot documentation
Project description
RAI Whoami
Overview
RAI Whoami is a Python package designed to extract and synthesize robot embodiment information from a structured directory of documentation, images, and URDFs.
It generates a comprehensive system prompt (embodiment info) for robots controlled by LLMs, enabling advanced reasoning guided by the robot's embodiment setup.
How It Works
Given a directory containing robot documentation (documents, images, URDFs), RAI Whoami processes these resources to produce a structured representation of the robot, including:
- Rules: Extracted operational or safety rules.
- Behaviors: Descriptions of robot behaviors.
- Capabilities: Functional and physical capabilities.
- Images: Visual representations.
- Vector Database: Embeddings of the robot's documentation. (optional)
This embodiment info is then used to create a system prompt for LLM-based agents, enabling them to reason about and interact with the robot effectively.
Directory Structure
Prepare your robot documentation directory as follows:
documentation_dir/
├── images/ # png, jpg, jpeg files
├── documentation/ # pdf, docx, doc, md files
├── urdf/ # urdf files
Building the Embodiment Info
To generate the system prompt from your documentation directory:
python src/rai_whoami/rai_whoami/build_whoami.py documentation_dir [--output_dir output_dir] [--build-vector-db]
Generated files will be saved in the output_dir / generated directory or documentation_dir / generated if not specified.
Using with ROS2 and ReActAgent
Integrate the generated embodiment info into your LLM-powered robot agent:
from rai_whoami import EmbodimentInfo
from rai.agents import ReActAgent, wait_for_shutdown
from rai.communication.ros2 import ROS2HRIConnector
info = EmbodimentInfo.from_directory("output_dir/")
system_prompt = info.to_langchain() # Convert EmbodimentInfo to a system prompt
# example usage with langchain runnable
from rai.agents.langchain import create_react_runnable
react_agent = create_react_runnable(
tools=[],
system_prompt=system_prompt
)
# example usage with RAI Agent
connector = ROS2HRIConnector()
agent = ReActAgent(
target_connectors={"/to_human": connector},
system_prompt=system_prompt,
)
agent.subscribe_source("/from_human", connector)
agent.run()
wait_for_shutdown([agent])
Using generated Vector Database
rai whoami provides a langchain tool to query the generated vector database. There are a couple of ways to use it:
- Through a langchain runnable
from langchain_core.messages import HumanMessage
from rai_whoami.tools import QueryDatabaseTool
from rai.agents.langchain import create_react_runnable
query_tool = QueryDatabaseTool(root_dir="output_dir")
react_agent = create_react_runnable(tools=[query_tool])
print(
react_agent.invoke(
{"messages": [HumanMessage(content="Check the db for Robot's name")]}
)
)
- Through a RAI Agent
from rai.agents import ReActAgent, wait_for_shutdown
from rai.communication.ros2 import ROS2HRIConnector
from rai_whoami.tools import QueryDatabaseTool
query_tool = QueryDatabaseTool(root_dir="output_dir")
connector = ROS2HRIConnector()
agent = ReActAgent(
target_connectors={"/to_human": connector}, system_prompt="", tools=[query_tool]
)
agent.subscribe_source("/from_human", connector)
agent.run()
wait_for_shutdown([agent])
Using ROS2 Vector Store Retrieval Agent
The ROS2VectorStoreRetrievalAgent is a ROS2 agent that can be used to retrieve information from the vector database through a ROS 2 service.
from rai_whoami.agents.ros2 import ROS2VectorStoreRetrievalAgent
from rai.agents import wait_for_shutdown
agent = ROS2VectorStoreRetrievalAgent(
service_name="rai_whoami_documentation_service",
root_dir="output_dir",
k=4,
)
agent.run()
wait_for_shutdown([agent])
With the agent running, you can query the vector database through a ROS 2 service:
ros2 service call /rai_whoami_documentation_service rai_interfaces/srv/VectorStoreRetrieval "query: 'maximum load'"
Using ROS2 Embodiment Info Agent
The ROS2EmbodimentInfoAgent is a ROS2 agent that can be used to retrieve information from the embodiment info through a ROS 2 service.
from rai_whoami.agents.ros2 import ROS2EmbodimentInfoAgent
from rai.agents import wait_for_shutdown
agent = ROS2EmbodimentInfoAgent(
service_name="rai_whoami_embodiment_info_service",
root_dir="output_dir",
)
agent.run()
wait_for_shutdown([agent])
With the agent running, you can query the embodiment info through a ROS 2 service:
ros2 service call /rai_whoami_embodiment_info_service rai_interfaces/srv/EmbodimentInfo
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 rai_whoami-0.0.2.tar.gz.
File metadata
- Download URL: rai_whoami-0.0.2.tar.gz
- Upload date:
- Size: 12.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.1 CPython/3.12.3 Linux/6.11.0-25-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
556d81f7d6d1d2d2496a9262f8f7ddee5763c709675ffdd65ef2c4a25d6a1096
|
|
| MD5 |
66967403f59cde36b47b5e485747c4aa
|
|
| BLAKE2b-256 |
5fc509f003e2b66ff13caa3c39812d7f59b7b5d3d7ee3af19e2c45aae5af7b63
|
File details
Details for the file rai_whoami-0.0.2-py3-none-any.whl.
File metadata
- Download URL: rai_whoami-0.0.2-py3-none-any.whl
- Upload date:
- Size: 29.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.1 CPython/3.12.3 Linux/6.11.0-25-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aaa8f1eea0a9c00fec172a025436d7a14408b272c3e7289909aa44e2302e373a
|
|
| MD5 |
c35baf0c87e9e24e1e33a2fdfd3ae4d9
|
|
| BLAKE2b-256 |
f0362e6ba25a9fc1d8ef5913334d908a64deb1a2f2bcc1669d46d5382b7f56a9
|