Spaces:
Sleeping
Sleeping
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) | |
class FunctionCall: | |
name: str | |
parameters: Union[Dict, str] | |
class ActionStatusCode(IntEnum): | |
ING = 1 | |
SUCCESS = 0 | |
HTTP_ERROR = -1000 # http error | |
ARGS_ERROR = -1001 # parameter error | |
API_ERROR = -1002 # unknown error | |
class ActionValidCode(IntEnum): | |
FINISH = 1 | |
OPEN = 0 | |
CLOSED = -1 | |
INVALID = -2 | |
ABSENT = -3 # NO ACTION | |
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 | |
# need to integrate int, so asdict can convert AgentStatusCode to int | |
class ModelStatusCode(IntEnum): | |
END = 0 # end of streaming | |
STREAM_ING = 1 # response is in streaming | |
SERVER_ERR = -1 # triton server's error | |
SESSION_CLOSED = -2 # session has been closed | |
SESSION_OUT_OF_LIMIT = -3 # request length out of limit | |
SESSION_INVALID_ARG = -4 # invalid argument | |
SESSION_READY = 2 # session is ready for inference | |
class AgentStatusCode(IntEnum): | |
END = 0 # end of streaming | |
STREAM_ING = 1 # response is in streaming | |
SERVER_ERR = -1 # triton server's error | |
SESSION_CLOSED = -2 # session has been closed | |
SESSION_OUT_OF_LIMIT = -3 # request length out of limit | |
SESSION_INVALID_ARG = -4 # invalid argument | |
SESSION_READY = 2 # session is ready for inference | |
PLUGIN_START = 3 # start tool | |
PLUGIN_END = 4 # finish tool | |
PLUGIN_RETURN = 5 # finish tool | |
CODING = 6 # start python | |
CODE_END = 7 # end python | |
CODE_RETURN = 8 # python return | |
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 | |