| from dataclasses import asdict, dataclass |
| from enum import IntEnum |
| from typing import Any, Dict, List, Optional, Union |
|
|
| from pydantic import BaseModel |
|
|
|
|
| def enum_dict_factory(inputs): |
| inputs = [(i[0], i[-1].value) if isinstance(i[-1], IntEnum) else i |
| for i in inputs] |
| return dict(inputs) |
|
|
|
|
| def dataclass2dict(data): |
| return asdict(data, dict_factory=enum_dict_factory) |
|
|
|
|
| @dataclass |
| class FunctionCall: |
| name: str |
| parameters: Union[Dict, str] |
|
|
|
|
| class ActionStatusCode(IntEnum): |
| ING = 1 |
| SUCCESS = 0 |
| HTTP_ERROR = -1000 |
| ARGS_ERROR = -1001 |
| API_ERROR = -1002 |
|
|
|
|
| class ActionValidCode(IntEnum): |
| FINISH = 1 |
| OPEN = 0 |
| CLOSED = -1 |
| INVALID = -2 |
| ABSENT = -3 |
|
|
|
|
| @dataclass |
| class ActionReturn: |
| args: Optional[dict] = None |
| url: Optional[str] = None |
| type: Optional[str] = None |
| result: Optional[List[dict]] = None |
| errmsg: Optional[str] = None |
| state: Union[ActionStatusCode, int] = ActionStatusCode.SUCCESS |
| thought: Optional[str] = None |
| valid: Optional[ActionValidCode] = ActionValidCode.OPEN |
|
|
| def format_result(self) -> str: |
| """Concatenate items in result.""" |
| result = [] |
| for item in self.result or []: |
| if item['type'] == 'text': |
| result.append(item['content']) |
| else: |
| result.append(f"[{item['type']}]({item['content']})") |
| result = '\n'.join(result) |
| return result |
|
|
|
|
| |
| class ModelStatusCode(IntEnum): |
| END = 0 |
| STREAM_ING = 1 |
| SERVER_ERR = -1 |
| SESSION_CLOSED = -2 |
| SESSION_OUT_OF_LIMIT = -3 |
| SESSION_INVALID_ARG = -4 |
| SESSION_READY = 2 |
|
|
|
|
| class AgentStatusCode(IntEnum): |
| END = 0 |
| STREAM_ING = 1 |
| SERVER_ERR = -1 |
| SESSION_CLOSED = -2 |
| SESSION_OUT_OF_LIMIT = -3 |
| SESSION_INVALID_ARG = -4 |
| SESSION_READY = 2 |
| PLUGIN_START = 3 |
| PLUGIN_END = 4 |
| PLUGIN_RETURN = 5 |
| CODING = 6 |
| CODE_END = 7 |
| CODE_RETURN = 8 |
|
|
|
|
| class AgentMessage(BaseModel): |
| content: Any |
| sender: str = 'user' |
| formatted: Optional[Any] = None |
| extra_info: Optional[Any] = None |
| type: Optional[str] = None |
| receiver: Optional[str] = None |
| stream_state: Union[ModelStatusCode, AgentStatusCode] = AgentStatusCode.END |
|
|