File size: 1,661 Bytes
c429240
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
"""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,
    )