|
from functools import cached_property |
|
from typing import Literal |
|
|
|
from pydantic import Field |
|
|
|
from proxy_lite.history import MessageHistory, MessageLabel, SystemMessage, Text |
|
from proxy_lite.tools import Tool |
|
|
|
from .agent_base import Agents, BaseAgent, BaseAgentConfig |
|
|
|
MODEL_SYSTEM_PROMPT = """You are Proxy-Lite, an AI assistant that can perform actions on a computer screen. |
|
You were developed by Convergence AI. |
|
The user will instuct you to perform a task. |
|
You will be shown a screen as well as relevant interactable elements highlighted by mark_ids and you will be given a set of tools to use to perform the task. |
|
You should make observations about the screen, putting them in <observation></observation> tags. |
|
You should then reason about what needs to be done to complete the task, putting your thoughts in <thinking></thinking> tags. |
|
You should then use the tools to perform the task, putting the tool calls in <tool_call></tool_call> tags. |
|
""" |
|
|
|
MAX_MESSAGES_FOR_CONTEXT_WINDOW = { |
|
MessageLabel.SCREENSHOT: 1, |
|
} |
|
|
|
|
|
@Agents.register_agent_config("proxy_lite") |
|
class ProxyLiteAgentConfig(BaseAgentConfig): |
|
name: Literal["proxy_lite"] = "proxy_lite" |
|
history_messages_limit: dict[MessageLabel, int] = Field( |
|
default_factory=lambda: MAX_MESSAGES_FOR_CONTEXT_WINDOW, |
|
) |
|
|
|
|
|
@Agents.register_agent("proxy_lite") |
|
class ProxyLiteAgent(BaseAgent): |
|
config: ProxyLiteAgentConfig |
|
message_label: MessageLabel = MessageLabel.AGENT_MODEL_RESPONSE |
|
|
|
def __init__(self, **data): |
|
super().__init__(**data) |
|
|
|
@property |
|
def system_prompt(self) -> str: |
|
return MODEL_SYSTEM_PROMPT |
|
|
|
@cached_property |
|
def tools(self) -> list[Tool]: |
|
return self.env_tools |
|
|
|
async def get_history_view(self) -> MessageHistory: |
|
return MessageHistory( |
|
messages=[SystemMessage(content=[Text(text=self.system_prompt)])], |
|
) + self.history.history_view( |
|
limits=self.config.history_messages_limit, |
|
) |
|
|