| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- 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
|