| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import importlib.util
- import sys
- import tempfile
- import unittest
- from contextvars import ContextVar
- from pathlib import Path
- from types import SimpleNamespace
- from unittest.mock import patch
- spec = importlib.util.spec_from_file_location('test_yaoyao_environment_bridge', Path(__file__).parents[1] / 'bridge_runtime.py')
- bridge = importlib.util.module_from_spec(spec)
- sys.modules[spec.name] = bridge
- spec.loader.exec_module(bridge)
- class RuntimeEnvironmentTests(unittest.TestCase):
- def test_capabilities_reports_the_scoped_profile_catalog_without_operating_a_computer(self):
- with tempfile.TemporaryDirectory() as directory:
- root = Path(directory)
- scope = ContextVar('runtime_environment_profile', default=root)
- configs = {
- root / 'default': {'agent': {'disabled_toolsets': []}},
- root / 'limited': {'agent': {'disabled_toolsets': ['terminal', 'computer_use']}},
- }
- observations = []
- def definitions(enabled_toolsets, disabled_toolsets, **kwargs):
- observations.append((scope.get(), kwargs))
- names = ['yaoyao_tools', 'yaoyao_call', 'terminal', 'read_file', 'computer_use', 'browser_navigate', 'memory', 'yaoyao_desktop_fake']
- return [{'function': {'name': name}} for name in names if name not in disabled_toolsets]
- modules = {
- 'hermes_cli.profiles': SimpleNamespace(get_profile_dir=lambda profile: root / profile, profile_exists=lambda profile: profile in {'default', 'limited'}),
- 'hermes_constants': SimpleNamespace(set_hermes_home_override=scope.set, reset_hermes_home_override=scope.reset),
- 'hermes_cli.plugins': SimpleNamespace(discover_plugins=lambda: None),
- 'hermes_cli.config': SimpleNamespace(load_config=lambda: configs[scope.get()]),
- 'model_tools': SimpleNamespace(get_tool_definitions=definitions),
- }
- with patch.dict(sys.modules, modules), patch.object(bridge, '_web'), \
- patch.object(bridge, '_server', return_value=SimpleNamespace(_load_enabled_toolsets=lambda: ['all'])):
- full = bridge.capabilities('default')
- limited = bridge.capabilities('limited')
- self.assertTrue(full['ready'])
- facts = full['runtime_environment']
- self.assertEqual(facts['profile'], 'default')
- self.assertEqual(facts['nativeTools'], {'terminal': ['terminal'], 'files': ['read_file'], 'desktop': ['computer_use'], 'browser': ['browser_navigate']})
- self.assertEqual(limited['runtime_environment']['nativeTools'], {'terminal': [], 'files': ['read_file'], 'desktop': [], 'browser': ['browser_navigate']})
- self.assertEqual(set(facts), {'version', 'profile', 'platform', 'osRelease', 'arch', 'nativeTools'})
- self.assertEqual(scope.get(), root)
- self.assertEqual([entry[0] for entry in observations], [root / 'default', root / 'limited'])
- self.assertTrue(all(entry[1]['skip_tool_search_assembly'] for entry in observations))
- def test_runtime_directory_does_not_report_bridge_tools_as_native_computer_capabilities(self):
- definitions = [{'function': {'name': name}} for name in ['yaoyao_tools', 'yaoyao_call', 'yaoyao_desktop_shell_123', 'tool_call', 'tool_describe', 'memory']]
- self.assertEqual(bridge._runtime_environment('default', definitions)['nativeTools'], {'terminal': [], 'files': [], 'desktop': [], 'browser': []})
- if __name__ == '__main__':
- unittest.main()
|