echobot / app.py
alonsosilva's picture
Add app
12da214
import solara
from typing import List
from typing_extensions import TypedDict
class MessageDict(TypedDict):
role: str
content: str
messages: solara.Reactive[List[MessageDict]] = solara.reactive([])
@solara.component
def Page():
with solara.Column(style={"padding": "30px"}):
solara.Title("EchoBot")
solara.Markdown("#EchoBot")
user_message_count = len([m for m in messages.value if m["role"] == "user"])
def send(message):
messages.value = [
*messages.value,
{"role": "user", "content": message},
]
def response(message):
messages.value = [
*messages.value,
{"role": "assistant", "content": message}
]
def result():
if messages.value !=[]: response(messages.value[-1]["content"])
result = solara.use_memo(result, [user_message_count])
print(messages.value)
with solara.Column(style={"width": "70%"}):
with solara.lab.ChatBox():
for item in messages.value:
with solara.lab.ChatMessage(
user=item["role"] == "user",
name="Echobot" if item["role"] == "assistant" else "User",
avatar_background_color="#33cccc" if item["role"] == "assistant" else "#ff991f",
border_radius="20px",
):
solara.Markdown(item["content"])
solara.lab.ChatInput(send_callback=send)