ros_sugar.robot.registries

Action and Event registries for robot plugins.

A plugin exposes high-level, user-triggerable behaviours as factories: calling plugin.actions.stand_up() constructs a fresh core.action.Action, and plugin.events.low_battery(0.15) constructs a fresh core.event.Event. Factories (rather than pre-built instances) let recipe authors pass per-call arguments, plain values or MsgConditionBuilder references from any topic.

Action factories can carry an OpenAI-style tool description (decorate them with plugin_action or stamp _tool_description directly). Downstream LLM-driven components (e.g. in EmbodiedAgents) consume these via ActionRegistry.tool_descriptions.

Module Contents

Classes

ActionSpec

Introspection record for one action factory.

EventSpec

Introspection record for one event factory.

ActionRegistry

Registry of factories producing core.action.Action.

EventRegistry

Registry of factories producing core.event.Event.

Functions

plugin_action

Decorator that stamps an LLM-tool description on a plugin action factory.

API

ros_sugar.robot.registries.plugin_action(function: Optional[Callable] = None, description: Optional[Union[str, Dict]] = None)

Decorator that stamps an LLM-tool description on a plugin action factory.

Mirrors utils.component_action for actions exposed through a robot plugin. The decorated callable is unchanged at runtime; it carries a _tool_description attribute that ActionRegistry surfaces.

Usage::

@plugin_action(description="Sit down or stand up from a sitting position")
def _make_sit_stand(self) -> Action:
    ...

@plugin_action(description={
    "name": "move_to",
    "description": "Drive to an absolute pose",
    "parameters": {
        "type": "object",
        "properties": {
            "x": {"type": "number"},
            "y": {"type": "number"},
        },
        "required": ["x", "y"],
    },
})
def _make_move_to(self) -> Action:
    ...

A plain string becomes the function description with a zero-arg parameter schema. A dict is taken as the OpenAI function block; missing fields are filled in by ActionRegistry.tool_descriptions.

class ros_sugar.robot.registries.ActionSpec

Bases: ros_sugar.config.BaseAttrs

Introspection record for one action factory.

asdict(filter: Optional[Callable] = None) Dict
to_dict() Dict
from_dict(dict_obj: Dict) None
from_file(file_path: str, nested_root_name: Union[str, None] = None, get_common: bool = False) bool
to_json() Union[str, bytes, bytearray]
from_json(json_obj: Union[str, bytes, bytearray]) None
has_attribute(attr_name: str) bool
get_attribute_type(attr_name: str) Optional[type]
update_value(attr_name: str, attr_value: Any) bool
classmethod get_fields_info(class_object) Dict[str, Dict[str, Any]]
class ros_sugar.robot.registries.EventSpec

Bases: ros_sugar.config.BaseAttrs

Introspection record for one event factory.

asdict(filter: Optional[Callable] = None) Dict
to_dict() Dict
from_dict(dict_obj: Dict) None
from_file(file_path: str, nested_root_name: Union[str, None] = None, get_common: bool = False) bool
to_json() Union[str, bytes, bytearray]
from_json(json_obj: Union[str, bytes, bytearray]) None
has_attribute(attr_name: str) bool
get_attribute_type(attr_name: str) Optional[type]
update_value(attr_name: str, attr_value: Any) bool
classmethod get_fields_info(class_object) Dict[str, Dict[str, Any]]
class ros_sugar.robot.registries.ActionRegistry(factories: Dict[str, Callable[..., ros_sugar.core.action.Action]])

Bases: ros_sugar.robot.registries._FactoryRegistry

Registry of factories producing core.action.Action.

Parameters:

factories – Mapping of action name to a zero-or-more-arg callable that returns a fresh Action.

list() List[ros_sugar.robot.registries.ActionSpec]

Return introspection specs for every registered action.

tool_descriptions(namespace: Optional[str] = None) List[Dict[str, Any]]

Return OpenAI-style tool descriptions for every registered action.

Each entry is a dict ready to drop into an LLM-tool list. The tool name is {namespace}.{action_name} when namespace is given.

Sources, in order of preference:

  1. factory._tool_description stamped via plugin_action (string or OpenAI function dict). Missing schema fields are filled in with a zero-arg default.

  2. The factory’s first docstring line — short description, zero-arg schema.

  3. A bare description string of "<no description>".

tool_descriptions_json(namespace: Optional[str] = None) str

JSON-serialized form of tool_descriptions.

names() List[str]
class ros_sugar.robot.registries.EventRegistry(factories: Dict[str, Callable[..., ros_sugar.core.event.Event]])

Bases: ros_sugar.robot.registries._FactoryRegistry

Registry of factories producing core.event.Event.

Parameters:

factories – Mapping of event name to a zero-or-more-arg callable that returns a fresh Event.

list() List[ros_sugar.robot.registries.EventSpec]

Return introspection specs for every registered event.

names() List[str]