Skip to content

MesopGUIMessageVisitor

fastagency.ui.mesop.message.MesopGUIMessageVisitor #

MesopGUIMessageVisitor(
    level: int,
    conversation_id: str,
    conversation_message: ConversationMessage,
    read_only: bool = False,
)

Bases: IOMessageVisitor

Initialize the MesopGUIMessageVisitor object.

PARAMETER DESCRIPTION
level

The level of the message.

TYPE: int

conversation_id

The ID of the conversation.

TYPE: str

conversation_message

Conversation message that wraps the visited io_message

TYPE: ConversationMessage

read_only

Input messages are disabled in read only mode

TYPE: bool DEFAULT: False

Source code in fastagency/ui/mesop/message.py
def __init__(
    self,
    level: int,
    conversation_id: str,
    conversation_message: ConversationMessage,
    read_only: bool = False,
) -> None:
    """Initialize the MesopGUIMessageVisitor object.

    Args:
        level (int): The level of the message.
        conversation_id (str): The ID of the conversation.
        conversation_message (ConversationMessage): Conversation message that wraps the visited io_message
        read_only (bool): Input messages are disabled in read only mode
    """
    self._level = level
    self._conversation_id = conversation_id
    self._readonly = read_only
    self._conversation_message = conversation_message

process_message #

process_message(message: IOMessage) -> Optional[str]
Source code in fastagency/ui/mesop/message.py
def process_message(self, message: IOMessage) -> Optional[str]:
    return self.visit(message)

visit #

visit(message: IOMessage) -> Optional[str]
Source code in fastagency/base.py
def visit(self, message: IOMessage) -> Optional[str]:
    method_name = f"visit_{message.type}"
    method = getattr(self, method_name, self.visit_default)
    return method(message)

visit_default #

visit_default(message: IOMessage) -> None
Source code in fastagency/ui/mesop/message.py
def visit_default(self, message: IOMessage) -> None:
    base_color = "#aff"
    with me.box(
        style=me.Style(
            background=base_color,
            padding=me.Padding.all(16),
            border_radius=16,
            margin=me.Margin.symmetric(vertical=16),
        )
    ):
        self._header(message, base_color)
        me.markdown(message.type)

visit_function_call_execution #

visit_function_call_execution(
    message: FunctionCallExecution,
) -> Optional[str]
Source code in fastagency/ui/mesop/message.py
def visit_function_call_execution(
    self, message: FunctionCallExecution
) -> Optional[str]:
    base_color = "#7ff"
    with me.box(
        style=me.Style(
            background=base_color,
            padding=me.Padding.all(16),
            border_radius=16,
            margin=me.Margin.symmetric(vertical=16),
        )
    ):
        self._header(message, base_color, title="Function Call Execution")
        with me.box():
            me.text(message.function_name)
        me.markdown(json.dumps(message.retval))
    return ""

visit_multiple_choice #

visit_multiple_choice(message: MultipleChoice) -> str
Source code in fastagency/ui/mesop/message.py
def visit_multiple_choice(self, message: MultipleChoice) -> str:
    if message.single:
        return self._visit_single_choice(message)
    else:
        return self._visit_many_choices(message)

visit_suggested_function_call #

visit_suggested_function_call(
    message: SuggestedFunctionCall,
) -> Optional[str]
Source code in fastagency/ui/mesop/message.py
def visit_suggested_function_call(
    self, message: SuggestedFunctionCall
) -> Optional[str]:
    base_color = "#8ff"
    with me.box(
        style=me.Style(
            background=base_color,
            padding=me.Padding.all(16),
            border_radius=16,
            margin=me.Margin.symmetric(vertical=16),
        )
    ):
        self._header(message, base_color, title="Suggested Function Call")
        with me.box():
            me.text(message.function_name)
        me.markdown(json.dumps(message.arguments))
    return ""

visit_system_message #

visit_system_message(message: SystemMessage) -> None
Source code in fastagency/ui/mesop/message.py
def visit_system_message(self, message: SystemMessage) -> None:
    base_color = "#bff"
    with me.box(
        style=me.Style(
            background=base_color,
            padding=me.Padding.all(16),
            border_radius=16,
            margin=me.Margin.symmetric(vertical=16),
        )
    ):
        self._header(message, base_color, title="System Message")
        me.markdown(json.dumps(message.message, indent=2))

visit_text_input #

visit_text_input(message: TextInput) -> str
Source code in fastagency/ui/mesop/message.py
def visit_text_input(self, message: TextInput) -> str:
    def on_input(ev: me.RadioChangeEvent) -> Iterator[None]:
        state = me.state(State)
        feedback = state.conversation.feedback
        self._conversation_message.feedback = [feedback]
        self._conversation_message.feedback_completed = True
        yield from self._provide_feedback(feedback)

    def value_if_completed() -> Optional[str]:
        message = self._conversation_message
        return message.feedback[0] if message.feedback_completed else None

    base_color = "#dff"
    prompt = message.prompt if message.prompt else "Please enter a value"
    if message.suggestions:
        suggestions = ",".join(suggestion for suggestion in message.suggestions)
        prompt += "\n" + suggestions

    with me.box(
        style=me.Style(
            background=base_color,
            padding=me.Padding.all(16),
            border_radius=16,
            margin=me.Margin.symmetric(vertical=16),
        )
    ):
        self._header(message, base_color, title="Input requested")
        me.markdown(prompt)
        input_user_feedback(
            on_input,
            disabled=self._readonly or self._has_feedback(),
            value=value_if_completed(),
        )
    return ""

visit_text_message #

visit_text_message(message: TextMessage) -> None
Source code in fastagency/ui/mesop/message.py
def visit_text_message(self, message: TextMessage) -> None:
    base_color = "#fff"
    with me.box(
        style=me.Style(
            background=base_color,
            padding=me.Padding.all(16),
            border_radius=16,
            margin=me.Margin.symmetric(vertical=16),
        )
    ):
        self._header(message, base_color, title="Text message")
        me.markdown(message.body)

visit_workflow_completed #

visit_workflow_completed(
    message: WorkflowCompleted,
) -> Optional[str]
Source code in fastagency/base.py
def visit_workflow_completed(self, message: WorkflowCompleted) -> Optional[str]:
    return self.visit_default(message)