Source code for agents

import sys
import os
from importlib.metadata import version, PackageNotFoundError
from packaging import version as pkg_version

# Define the minimum required version of sugarcoat
MIN_SUGARCOAT_VERSION = "0.5.0"


def _print_sugarcoat_error(current_version=None):
    """
    Helper to print the standard error message for missing/incompatible sugarcoat.
    """
    package_name = "automatika-ros-sugar"

    print("\n" + "=" * 60)
    if current_version:
        print(f"❌ CRITICAL ERROR: Incompatible '{package_name}' version found.")
        print("=" * 60)
        print(f"EmbodiedAgents requires {package_name} >= {MIN_SUGARCOAT_VERSION}")
        print(f"Found version: {current_version}")
    else:
        print(f"❌ CRITICAL ERROR: '{package_name}' not found.")
        print("=" * 60)
        print(f"EmbodiedAgents depends on {package_name} (Sugarcoat).")

    print("\nPLEASE INSTALL THE CORRECT VERSION:")
    print("-" * 60)
    print("OPTION 1: Using your Package Manager (Recommended for Ubuntu):")
    print("  sudo apt install ros-$ROS_DISTRO-automatika-ros-sugar")
    print("-" * 60)
    print("OPTION 2: Build from Source (If unsure, use this):")
    print("  mkdir -p ros-sugar-ws/src")
    print("  cd ros-sugar-ws/src")
    print("  git clone https://github.com/automatika-robotics/sugarcoat && cd ..")
    print("  # Install dependencies (ensure attrs>=23.2.0 is included)")
    print(
        "  pip install numpy opencv-python-headless 'attrs>=23.2.0' jinja2 msgpack msgpack-numpy setproctitle pyyaml toml"
    )
    print("  colcon build")
    print("  source install/setup.bash")
    print("-" * 60)
    print(
        "Check the installation docs: https://automatika-robotics.github.io/sugarcoat/installation.html"
    )
    print("=" * 60 + "\n")

    # Force exit to prevent runtime errors
    sys.exit(1)


[docs] def check_sugarcoat_version(): """ Verifies that the installed version of automatika-ros-sugar (sugarcoat) meets the minimum requirement for this release of EmbodiedAgents. """ package_name = "automatika-ros-sugar" try: installed_ver_str = version(package_name) # Check if installed version is less than minimum required if pkg_version.parse(installed_ver_str) < pkg_version.parse( MIN_SUGARCOAT_VERSION ): _print_sugarcoat_error(current_version=installed_ver_str) except PackageNotFoundError: _print_sugarcoat_error(current_version=None)
# Check if we are running inside a documentation build _IS_DOCS_BUILD = os.environ.get("AGENTS_DOCS_BUILD") == "1" if not _IS_DOCS_BUILD: check_sugarcoat_version()