Skip to content

Image Chat Models

aana.core.models.image_chat

TextContent

Bases: BaseModel

Text content for a chat message.

ATTRIBUTE DESCRIPTION
type

the type of the content, always "text"

TYPE: Literal['text']

text

the text of the message

TYPE: str

ImageContent

Bases: BaseModel

Image content for a chat message.

ATTRIBUTE DESCRIPTION
type

the type of the content, always "image"

TYPE: Literal['image']

image

the image

TYPE: Image

ImageChatMessage

Bases: BaseModel

A chat message with image support.

ATTRIBUTE DESCRIPTION
content

the content of the message

TYPE: list[Content]

role

the role of the message

TYPE: Role

ImageChatDialog

Bases: BaseModel

A chat dialog with image support.

ATTRIBUTE DESCRIPTION
messages

the list of messages

TYPE: list[ImageChatMessage]

from_list

from_list(messages)

Create an ImageChatDialog from a list of messages.

PARAMETER DESCRIPTION
messages

the list of messages

TYPE: list[dict[str, str]]

RETURNS DESCRIPTION
ImageChatDialog

the chat dialog

TYPE: ImageChatDialog

Example:

messages = [
    {
        "content": [
            { "type": "image", "image": Image(...) },
            { "type": "text", "text": "..." }
        ],
        "role": "system"
    },
    {
        "content": [
            { "type": "image", "image": Image(...) },
            { "type": "text", "text": "..." }
        ],
        "role": "user"
    }
]
dialog = ImageChatDialog.from_list(messages)

Source code in aana/core/models/image_chat.py
@classmethod
def from_list(cls, messages: list[dict[str, Any]]) -> "ImageChatDialog":
    """Create an ImageChatDialog from a list of messages.

    Args:
        messages (list[dict[str, str]]): the list of messages

    Returns:
        ImageChatDialog: the chat dialog

    Example:
    ```
    messages = [
        {
            "content": [
                { "type": "image", "image": Image(...) },
                { "type": "text", "text": "..." }
            ],
            "role": "system"
        },
        {
            "content": [
                { "type": "image", "image": Image(...) },
                { "type": "text", "text": "..." }
            ],
            "role": "user"
        }
    ]
    dialog = ImageChatDialog.from_list(messages)
    ```
    """
    return ImageChatDialog(
        messages=[ImageChatMessage(**message) for message in messages]
    )

from_prompt

from_prompt(prompt, images)

Create an ImageChatDialog from a prompt and a list of images.

PARAMETER DESCRIPTION
prompt

the prompt

TYPE: str

images

the list of images

TYPE: list[Image]

RETURNS DESCRIPTION
ImageChatDialog

the chat dialog

TYPE: ImageChatDialog

Source code in aana/core/models/image_chat.py
@classmethod
def from_prompt(cls, prompt: str, images: list[Image]) -> "ImageChatDialog":
    """Create an ImageChatDialog from a prompt and a list of images.

    Args:
        prompt (str): the prompt
        images (list[Image]): the list of images

    Returns:
        ImageChatDialog: the chat dialog
    """
    content: list[Content] = [ImageContent(image=image) for image in images]
    content.append(TextContent(text=prompt))

    return ImageChatDialog(
        messages=[ImageChatMessage(content=content, role="user")]
    )

to_objects

to_objects()

Convert ImageChatDialog to messages and images.

RETURNS DESCRIPTION
tuple[list[dict], list[Image]]

tuple[list[dict], list[Image]]: the messages and the images

Source code in aana/core/models/image_chat.py
def to_objects(self) -> tuple[list[dict], list[Image]]:
    """Convert ImageChatDialog to messages and images.

    Returns:
        tuple[list[dict], list[Image]]: the messages and the images
    """
    dialog_dict = self.model_dump(
        exclude={"messages": {"__all__": {"content": {"__all__": {"image"}}}}}
    )
    messages = dialog_dict["messages"]
    # images = []
    # for message in self.messages:
    #     for content in message.content:
    #         if content.type == "image":
    #             images.append(content.image)
    images = [content.image for message in self.messages for content in message.content if content.type == "image"]

    return messages, images