from typing import List, TypedDict
import reacton.ipyvuetify as v
import solara
import solara.lab
class CustomMessage(TypedDict):
role: str
content: str
messages: solara.Reactive[List[CustomMessage]] = solara.reactive([])
@solara.component
def CourtChatMessage(
message: CustomMessage,
order: int
):
with solara.lab.ChatMessage(
user=False,
name=str(order),
avatar=None,
avatar_background_color='primary',
color="#292929",
border_radius='20px',
notch=True,
):
solara.Markdown(message['content'])
@solara.component
def AgentChatCard(
agent: str,
emoji: str,
):
with v.Container():
with v.Card(elevation=24, outlined=True):
with v.Container():
v.Html(tag='h2', class_='margin-bottom-075rem text-subtitle', children=[f'{agent} {emoji}'])
with solara.lab.ChatBox():
for idx, message in enumerate(messages.value):
CourtChatMessage(message, idx + 1)
@solara.component
def Page():
def add_message():
message = CustomMessage(role='random role', content='random text')
messages.set([
*messages.value,
message
])
def clear_messages():
messages.set([])
solara.Button(label="Add", on_click=add_message)
solara.Button(label="Clear", on_click=clear_messages)
AgentChatCard('xd', 'xd')