microagent.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import os
  2. import frontmatter
  3. import pydantic
  4. from openhands.controller.agent import Agent
  5. from openhands.core.exceptions import MicroAgentValidationError
  6. from openhands.core.logger import openhands_logger as logger
  7. class MicroAgentMetadata(pydantic.BaseModel):
  8. name: str
  9. agent: str
  10. require_env_var: dict[str, str]
  11. class MicroAgent:
  12. def __init__(self, path: str):
  13. self.path = path
  14. if not os.path.exists(path):
  15. raise FileNotFoundError(f'Micro agent file {path} is not found')
  16. with open(path, 'r') as file:
  17. self._loaded = frontmatter.load(file)
  18. self._content = self._loaded.content
  19. self._metadata = MicroAgentMetadata(**self._loaded.metadata)
  20. self._validate_micro_agent()
  21. @property
  22. def content(self) -> str:
  23. return self._content
  24. def _validate_micro_agent(self):
  25. logger.debug(
  26. f'Loading and validating micro agent [{self._metadata.name}] based on [{self._metadata.agent}]'
  27. )
  28. # Make sure the agent is registered
  29. agent_cls = Agent.get_cls(self._metadata.agent)
  30. assert agent_cls is not None
  31. # Make sure the environment variables are set
  32. for env_var, instruction in self._metadata.require_env_var.items():
  33. if env_var not in os.environ:
  34. raise MicroAgentValidationError(
  35. f'Environment variable [{env_var}] is required by micro agent [{self._metadata.name}] but not set. {instruction}'
  36. )