aether-robotics 3.2.4__tar.gz → 3.2.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {aether_robotics-3.2.4/aether_robotics.egg-info → aether_robotics-3.2.6}/PKG-INFO +1 -1
- aether_robotics-3.2.6/VERSION +1 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/__init__.py +1 -1
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/core/tool_builder.py +55 -5
- {aether_robotics-3.2.4 → aether_robotics-3.2.6/aether_robotics.egg-info}/PKG-INFO +1 -1
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/pyproject.toml +1 -1
- aether_robotics-3.2.4/VERSION +0 -1
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/LICENSE +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/MANIFEST.in +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/README.md +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/__main__.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/actions/__init__.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/actions/abstract_actions.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/adapters/__init__.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/adapters/base_adapter.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/adapters/drone_adapter.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/adapters/rover_adapter.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/adapters/universal_adapter.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/agents/__init__.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/agents/adaptation_agent.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/agents/camera_agent.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/agents/correction_agent.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/agents/execution_agent.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/agents/fault_agent.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/agents/memory_agent.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/agents/movement_agent.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/agents/navigation_agent.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/agents/perception_agent.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/agents/planner_agent.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/agents/power_agent.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/agents/task_manager.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/agents/thermal_agent.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/app.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/capabilities/__init__.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/capabilities/capability_loader.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/core/__init__.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/core/auto_installer.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/core/auto_updater.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/core/banner.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/core/calibration.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/core/executor.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/core/feedback.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/core/goal_parser.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/core/llm_planner.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/core/mapper.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/core/memory.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/core/message_bus.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/core/metrics.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/core/navigation_engine.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/core/planner.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/core/task_scheduler.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/core/tool_discovery.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/core/tool_registry.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/core/visualizer.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/faults/__init__.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/faults/fault_detector.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/faults/fault_injector.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/simulation/__init__.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/simulation/environment.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/simulation/real_perception.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether/simulation/scenarios.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether_robotics.egg-info/SOURCES.txt +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether_robotics.egg-info/dependency_links.txt +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether_robotics.egg-info/entry_points.txt +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether_robotics.egg-info/requires.txt +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether_robotics.egg-info/top_level.txt +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/configs/calibrated_camera_only_20260331_121709.json +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/configs/calibrated_camera_only_20260331_122446.json +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/configs/calibrated_camera_only_20260401_094544.json +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/configs/calibrated_camera_only_20260401_094554.json +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/configs/drone_v1.json +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/configs/rover_v1.json +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/context/aether_definitions.txt +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/install.sh +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/main.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/requirements.txt +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/setup.cfg +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/tests/test_auto_updater.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/tests/test_calibration.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/tests/test_calibration_unit.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/tests/test_chaos.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/tests/test_mapper.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/tests/test_navigation_engine.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/tests/test_persistent_memory.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/tests/test_security.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/tests/test_task_scheduler.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/tests/test_tool_builder.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/tests/test_tool_discovery.py +0 -0
- {aether_robotics-3.2.4 → aether_robotics-3.2.6}/tests/test_yolo_integration.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.2.6
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
__version__ = "3.2.
|
|
1
|
+
__version__ = "3.2.6"
|
|
2
2
|
__author__ = "Chahel Paatur"
|
|
@@ -777,10 +777,7 @@ class YOLOTool:
|
|
|
777
777
|
|
|
778
778
|
return _ok({
|
|
779
779
|
"finger_count": finger_count,
|
|
780
|
-
"raw_response":
|
|
781
|
-
"image_path": result["result"].get("image_path", image_path),
|
|
782
|
-
"backend": "anthropic_vision",
|
|
783
|
-
"model": "claude-sonnet-4-20250514",
|
|
780
|
+
"raw_response": str(finger_count),
|
|
784
781
|
})
|
|
785
782
|
|
|
786
783
|
|
|
@@ -1694,7 +1691,40 @@ class OLEDTool:
|
|
|
1694
1691
|
return self.clear()
|
|
1695
1692
|
|
|
1696
1693
|
def display_text(self, text: str = "", font_size: int = 12,
|
|
1697
|
-
x: int = 0, y: int = 0, clear: bool = True) -> Dict:
|
|
1694
|
+
x: int = 0, y: int = 0, clear: bool = True, **kwargs) -> Dict:
|
|
1695
|
+
# Parse string-repr dict or extract from dict
|
|
1696
|
+
if isinstance(text, str) and text.strip().startswith('{'):
|
|
1697
|
+
try:
|
|
1698
|
+
import ast
|
|
1699
|
+
text = ast.literal_eval(text)
|
|
1700
|
+
except:
|
|
1701
|
+
pass
|
|
1702
|
+
if isinstance(text, dict):
|
|
1703
|
+
# Try clean text fields first
|
|
1704
|
+
extracted = (text.get('content') or text.get('body') or
|
|
1705
|
+
text.get('description') or text.get('result') or
|
|
1706
|
+
text.get('summary') or text.get('text'))
|
|
1707
|
+
if extracted:
|
|
1708
|
+
text = str(extracted)
|
|
1709
|
+
else:
|
|
1710
|
+
# Build human readable from weather-like dicts
|
|
1711
|
+
parts = []
|
|
1712
|
+
GOOD_KEYS = {'temp_C','temp_F','FeelsLikeC','FeelsLikeF',
|
|
1713
|
+
'weatherDesc','humidity','windspeedKmph','observation_time'}
|
|
1714
|
+
def extract_readable(d, depth=0):
|
|
1715
|
+
if depth > 3: return
|
|
1716
|
+
if isinstance(d, dict):
|
|
1717
|
+
for k, v in d.items():
|
|
1718
|
+
if k in GOOD_KEYS and isinstance(v, (str,int,float)):
|
|
1719
|
+
parts.append(f"{k}:{v}")
|
|
1720
|
+
elif isinstance(v, (dict,list)):
|
|
1721
|
+
extract_readable(v, depth+1)
|
|
1722
|
+
elif isinstance(d, list):
|
|
1723
|
+
for item in d[:2]:
|
|
1724
|
+
extract_readable(item, depth+1)
|
|
1725
|
+
extract_readable(text)
|
|
1726
|
+
text = ' '.join(parts[:6]) if parts else str(text)[:80]
|
|
1727
|
+
text = str(text)[:120]
|
|
1698
1728
|
if self._Image is None:
|
|
1699
1729
|
return _err("PIL not available")
|
|
1700
1730
|
img = self._new_image() if clear else self._new_image()
|
|
@@ -1869,6 +1899,26 @@ class OLEDTool:
|
|
|
1869
1899
|
|
|
1870
1900
|
def show_value(self, label: str = "", value: Any = "",
|
|
1871
1901
|
unit: str = "") -> Dict:
|
|
1902
|
+
# Extract clean value from dict or string-repr of dict
|
|
1903
|
+
if isinstance(value, str) and value.startswith('{'):
|
|
1904
|
+
try:
|
|
1905
|
+
import ast
|
|
1906
|
+
value = ast.literal_eval(value)
|
|
1907
|
+
except:
|
|
1908
|
+
pass
|
|
1909
|
+
if isinstance(value, dict):
|
|
1910
|
+
SKIP = {'image_path','filepath','path','file','raw_response','backend','tag','mode','resolution','timestamp'}
|
|
1911
|
+
for key in ('finger_count','count','cpu_temp_c','cpu_percent','ram_percent','brightness','percentage','total','result'):
|
|
1912
|
+
if key in value:
|
|
1913
|
+
value = value[key]
|
|
1914
|
+
break
|
|
1915
|
+
else:
|
|
1916
|
+
for k, v in value.items():
|
|
1917
|
+
if k not in SKIP and isinstance(v, (int, float)):
|
|
1918
|
+
value = v
|
|
1919
|
+
break
|
|
1920
|
+
else:
|
|
1921
|
+
value = '?'
|
|
1872
1922
|
if self._Image is None:
|
|
1873
1923
|
return _err("PIL not available")
|
|
1874
1924
|
img = self._new_image()
|
aether_robotics-3.2.4/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
3.2.4
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{aether_robotics-3.2.4 → aether_robotics-3.2.6}/aether_robotics.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{aether_robotics-3.2.4 → aether_robotics-3.2.6}/configs/calibrated_camera_only_20260331_121709.json
RENAMED
|
File without changes
|
{aether_robotics-3.2.4 → aether_robotics-3.2.6}/configs/calibrated_camera_only_20260331_122446.json
RENAMED
|
File without changes
|
{aether_robotics-3.2.4 → aether_robotics-3.2.6}/configs/calibrated_camera_only_20260401_094544.json
RENAMED
|
File without changes
|
{aether_robotics-3.2.4 → aether_robotics-3.2.6}/configs/calibrated_camera_only_20260401_094554.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|