54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
import unittest
|
|
|
|
from opc.core.models import ExecutionMode
|
|
from opc.layer1_perception.context_loader import LoadedContext
|
|
from opc.layer1_perception.task_router import TaskRouter
|
|
|
|
|
|
class _StubLLM:
|
|
def __init__(self) -> None:
|
|
self.called = False
|
|
|
|
async def simple_chat(self, prompt: str, system: str, task_type: str) -> str:
|
|
_ = (prompt, system, task_type)
|
|
self.called = True
|
|
return "{}"
|
|
|
|
|
|
class TaskRouterTests(unittest.IsolatedAsyncioTestCase):
|
|
async def test_route_returns_default_task_mode_without_llm_call(self) -> None:
|
|
llm = _StubLLM()
|
|
router = TaskRouter(llm)
|
|
|
|
decision = await router.route("build a local product", LoadedContext())
|
|
|
|
self.assertEqual(decision.mode, ExecutionMode.TASK_MODE)
|
|
self.assertEqual(decision.domains, ["general"])
|
|
self.assertFalse(llm.called)
|
|
|
|
async def test_route_ignores_context_and_preferences(self) -> None:
|
|
llm = _StubLLM()
|
|
router = TaskRouter(llm)
|
|
context = LoadedContext()
|
|
context.session_execution_defaults = {
|
|
"mode": "company_mode",
|
|
"company_profile": "corporate",
|
|
"preferred_agent": "codex",
|
|
}
|
|
|
|
decision = await router.route(
|
|
"continue the current project",
|
|
context,
|
|
preferences={"mode": "company_mode"},
|
|
)
|
|
|
|
self.assertEqual(decision.mode, ExecutionMode.TASK_MODE)
|
|
self.assertEqual(decision.domains, ["general"])
|
|
self.assertFalse(llm.called)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|