Spaces:
Running
Running
| from abc import abstractmethod | |
| from typing import List | |
| from ..config import BackendConfig, Configurable | |
| from ..message import Message | |
| class IntelligenceBackend(Configurable): | |
| """An abstraction of the intelligence source of the agents.""" | |
| stateful = None | |
| type_name = None | |
| def __init__(self, **kwargs): | |
| super().__init__(**kwargs) # registers the arguments with Configurable | |
| def __init_subclass__(cls, **kwargs): | |
| # check if the subclass has the required attributes | |
| for required in ( | |
| "stateful", | |
| "type_name", | |
| ): | |
| if getattr(cls, required) is None: | |
| raise TypeError( | |
| f"Can't instantiate abstract class {cls.__name__} without {required} attribute defined" | |
| ) | |
| return super().__init_subclass__(**kwargs) | |
| def to_config(self) -> BackendConfig: | |
| self._config_dict["backend_type"] = self.type_name | |
| return BackendConfig(**self._config_dict) | |
| def query( | |
| self, | |
| agent_name: str, | |
| role_desc: str, | |
| history_messages: List[Message], | |
| global_prompt: str = None, | |
| request_msg: Message = None, | |
| *args, | |
| **kwargs, | |
| ) -> str: | |
| raise NotImplementedError | |
| async def async_query( | |
| self, | |
| agent_name: str, | |
| role_desc: str, | |
| history_messages: List[Message], | |
| global_prompt: str = None, | |
| request_msg: Message = None, | |
| *args, | |
| **kwargs, | |
| ) -> str: | |
| """Async querying.""" | |
| raise NotImplementedError | |
| # reset the state of the backend | |
| def reset(self): | |
| if self.stateful: | |
| raise NotImplementedError | |
| else: | |
| pass | |