| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 | from abc import ABCfrom enum import Enumfrom typing import Optionalfrom pydantic import BaseModelclass PromptMessageRole(Enum):    """    Enum class for prompt message.    """    SYSTEM = "system"    USER = "user"    ASSISTANT = "assistant"    TOOL = "tool"    @classmethod    def value_of(cls, value: str) -> 'PromptMessageRole':        """        Get value of given mode.        :param value: mode value        :return: mode        """        for mode in cls:            if mode.value == value:                return mode        raise ValueError(f'invalid prompt message type value {value}')class PromptMessageTool(BaseModel):    """    Model class for prompt message tool.    """    name: str    description: str    parameters: dictclass PromptMessageFunction(BaseModel):    """    Model class for prompt message function.    """    type: str = 'function'    function: PromptMessageToolclass PromptMessageContentType(Enum):    """    Enum class for prompt message content type.    """    TEXT = 'text'    IMAGE = 'image'class PromptMessageContent(BaseModel):    """    Model class for prompt message content.    """    type: PromptMessageContentType    data: strclass TextPromptMessageContent(PromptMessageContent):    """    Model class for text prompt message content.    """    type: PromptMessageContentType = PromptMessageContentType.TEXTclass ImagePromptMessageContent(PromptMessageContent):    """    Model class for image prompt message content.    """    class DETAIL(Enum):        LOW = 'low'        HIGH = 'high'    type: PromptMessageContentType = PromptMessageContentType.IMAGE    detail: DETAIL = DETAIL.LOWclass PromptMessage(ABC, BaseModel):    """    Model class for prompt message.    """    role: PromptMessageRole    content: Optional[str | list[PromptMessageContent]] = None    name: Optional[str] = Noneclass UserPromptMessage(PromptMessage):    """    Model class for user prompt message.    """    role: PromptMessageRole = PromptMessageRole.USERclass AssistantPromptMessage(PromptMessage):    """    Model class for assistant prompt message.    """    class ToolCall(BaseModel):        """        Model class for assistant prompt message tool call.        """        class ToolCallFunction(BaseModel):            """            Model class for assistant prompt message tool call function.            """            name: str            arguments: str        id: str        type: str        function: ToolCallFunction    role: PromptMessageRole = PromptMessageRole.ASSISTANT    tool_calls: list[ToolCall] = []class SystemPromptMessage(PromptMessage):    """    Model class for system prompt message.    """    role: PromptMessageRole = PromptMessageRole.SYSTEMclass ToolPromptMessage(PromptMessage):    """    Model class for tool prompt message.    """    role: PromptMessageRole = PromptMessageRole.TOOL    tool_call_id: str
 |