"""Assemble the OpenHands agent whose reasoning engine is Cortex.0.""" from __future__ import annotations from openhands.sdk import Agent, Tool from openhands.sdk.context.condenser import LLMSummarizingCondenser from openhands.sdk.context.agent_context import AgentContext # Importing each tool class registers it in the SDK tool registry. # Without these imports resolve_tool() raises "not registered". from openhands.tools.file_editor import FileEditorTool # noqa: F401 from openhands.tools.glob import GlobTool # noqa: F401 from openhands.tools.grep import GrepTool # noqa: F401 from openhands.tools.task_tracker import TaskTrackerTool # noqa: F401 from openhands.tools.terminal import TerminalTool # noqa: F401 from cortex0.llm import build_llm from cortex0.settings import Cortex0Settings def build_agent(settings: Cortex0Settings) -> Agent: """Build an agent driven by Cortex.0. The model is not a tool the agent calls: it is the ``llm`` the agent reasons with on every turn of the action-perception loop. Tools are handed to the model as its own action space. """ llm = build_llm(settings) tools = [Tool(name=name) for name in settings.tools] # Cortex.0 has a 262k window, but a long agent session still needs # condensation so the prompt stays affordable and fast. condenser = LLMSummarizingCondenser(llm=llm, max_size=settings.condenser_max_size) return Agent( llm=llm, tools=tools, system_prompt=settings.system_prompt(), agent_context=AgentContext( skills=[], system_prompt_filename=None, ), condenser=condenser, )