Skip to content

Chat prompt

ChatPrompt

Bases: Prompt

Source code in agentuniverse/prompt/chat_prompt.py
Python
class ChatPrompt(Prompt):
    messages: List[Message] = []

    def as_langchain(self) -> ChatPromptTemplate:
        return ChatPromptTemplate.from_messages(Message.as_langchain_list(self.messages))

    def build_prompt(self, agent_prompt_model: AgentPromptModel, prompt_assemble_order: list[str]) -> 'ChatPrompt':
        """Build the prompt class.

        Args:
            agent_prompt_model (AgentPromptModel): The user agent prompt model.
            prompt_assemble_order (list[str]): The prompt assemble ordered list.

        Returns:
            ChatPrompt: The chat prompt object.
        """
        self.messages = generate_chat_template(agent_prompt_model, prompt_assemble_order)
        self.input_variables = self.extract_placeholders()
        return self

    def extract_placeholders(self) -> List[str]:
        """Extract the placeholders from the messages.

        Returns:
            List[str]: The placeholders list.
        """
        result = []
        placeholder_pattern = re.compile(r'\{(.*?)}')
        for message in self.messages:
            matches = placeholder_pattern.findall(message.content)
            result.extend(matches)
        return result

    def generate_image_prompt(self, image_urls: list[str]) -> None:
        """ Generate the prompt with image urls.

        Args:
            image_urls (list[str]): The image urls.
        """
        if image_urls:
            for image_url in image_urls:
                parsed_url = urlparse(image_url)
                # Check if the URL is a valid HTTP or HTTPS URL.
                if parsed_url.scheme in ["http", "https"]:
                    content = [{"type": "image_url", "image_url": {"url": image_url}}]
                    self.messages.append(Message(type=ChatMessageEnum.HUMAN.value, content=content))
                # Check if the URL is a local file.
                elif parsed_url.scheme == "file" or not parsed_url.scheme:
                    if parsed_url.path.lower().endswith(image_extensions):
                        with open(parsed_url.path, "rb") as image_file:
                            base64_image = base64.b64encode(image_file.read()).decode(
                                "utf-8",
                            )
                            extension = parsed_url.path.lower().split(".")[-1]
                            mime_type = f"image/{extension}"
                            content = [
                                {"type": "image_url", "image_url": {"url": f"data:{mime_type};base64,{base64_image}"}}]
                            self.messages.append(Message(type=ChatMessageEnum.HUMAN.value, content=content))

build_prompt(agent_prompt_model, prompt_assemble_order)

Build the prompt class.

Parameters:

Name Type Description Default
agent_prompt_model AgentPromptModel

The user agent prompt model.

required
prompt_assemble_order list[str]

The prompt assemble ordered list.

required

Returns:

Name Type Description
ChatPrompt ChatPrompt

The chat prompt object.

Source code in agentuniverse/prompt/chat_prompt.py
Python
def build_prompt(self, agent_prompt_model: AgentPromptModel, prompt_assemble_order: list[str]) -> 'ChatPrompt':
    """Build the prompt class.

    Args:
        agent_prompt_model (AgentPromptModel): The user agent prompt model.
        prompt_assemble_order (list[str]): The prompt assemble ordered list.

    Returns:
        ChatPrompt: The chat prompt object.
    """
    self.messages = generate_chat_template(agent_prompt_model, prompt_assemble_order)
    self.input_variables = self.extract_placeholders()
    return self

extract_placeholders()

Extract the placeholders from the messages.

Returns:

Type Description
List[str]

List[str]: The placeholders list.

Source code in agentuniverse/prompt/chat_prompt.py
Python
def extract_placeholders(self) -> List[str]:
    """Extract the placeholders from the messages.

    Returns:
        List[str]: The placeholders list.
    """
    result = []
    placeholder_pattern = re.compile(r'\{(.*?)}')
    for message in self.messages:
        matches = placeholder_pattern.findall(message.content)
        result.extend(matches)
    return result

generate_image_prompt(image_urls)

Generate the prompt with image urls.

Parameters:

Name Type Description Default
image_urls list[str]

The image urls.

required
Source code in agentuniverse/prompt/chat_prompt.py
Python
def generate_image_prompt(self, image_urls: list[str]) -> None:
    """ Generate the prompt with image urls.

    Args:
        image_urls (list[str]): The image urls.
    """
    if image_urls:
        for image_url in image_urls:
            parsed_url = urlparse(image_url)
            # Check if the URL is a valid HTTP or HTTPS URL.
            if parsed_url.scheme in ["http", "https"]:
                content = [{"type": "image_url", "image_url": {"url": image_url}}]
                self.messages.append(Message(type=ChatMessageEnum.HUMAN.value, content=content))
            # Check if the URL is a local file.
            elif parsed_url.scheme == "file" or not parsed_url.scheme:
                if parsed_url.path.lower().endswith(image_extensions):
                    with open(parsed_url.path, "rb") as image_file:
                        base64_image = base64.b64encode(image_file.read()).decode(
                            "utf-8",
                        )
                        extension = parsed_url.path.lower().split(".")[-1]
                        mime_type = f"image/{extension}"
                        content = [
                            {"type": "image_url", "image_url": {"url": f"data:{mime_type};base64,{base64_image}"}}]
                        self.messages.append(Message(type=ChatMessageEnum.HUMAN.value, content=content))