Files
OpenHands/openhands/utils/microagent.py
Raj Maheshwari 2b06e4e5d0 [Feat] Custom MicroAgents. (#4983)
Co-authored-by: diwu-sf <di.wu@shadowfaxdata.com>
2024-12-06 17:11:06 -05:00

55 lines
1.5 KiB
Python

import os
import frontmatter
import pydantic
class MicroAgentMetadata(pydantic.BaseModel):
name: str
agent: str
triggers: list[str] = []
class MicroAgent:
def __init__(self, path: str | None = None, content: str | None = None):
if path and not content:
self.path = path
if not os.path.exists(path):
raise FileNotFoundError(f'Micro agent file {path} is not found')
with open(path, 'r') as file:
self._loaded = frontmatter.load(file)
self._content = self._loaded.content
self._metadata = MicroAgentMetadata(**self._loaded.metadata)
elif content and not path:
self._metadata, self._content = frontmatter.parse(content)
self._metadata = MicroAgentMetadata(**self._metadata)
else:
raise Exception('You must pass either path or file content, but not both.')
def get_trigger(self, message: str) -> str | None:
message = message.lower()
for trigger in self.triggers:
if trigger.lower() in message:
return trigger
return None
@property
def content(self) -> str:
return self._content
@property
def metadata(self) -> MicroAgentMetadata:
return self._metadata
@property
def name(self) -> str:
return self._metadata.name
@property
def triggers(self) -> list[str]:
return self._metadata.triggers
@property
def agent(self) -> str:
return self._metadata.agent