105 lines
3.4 KiB
Python
105 lines
3.4 KiB
Python
import streamlit.components.v1 as components
|
|
import os
|
|
from typing import Optional, Union
|
|
|
|
try:
|
|
from typing import Literal
|
|
except ImportError:
|
|
from typing_extensions import Literal
|
|
|
|
|
|
_RELEASE = True
|
|
COMPONENT_NAME = "streamlit_chat"
|
|
|
|
if _RELEASE: # use the build instead of development if release is true
|
|
root_dir = os.path.dirname(os.path.abspath(__file__))
|
|
build_dir = os.path.join(root_dir, "frontend/build")
|
|
|
|
_streamlit_chat = components.declare_component(
|
|
COMPONENT_NAME,
|
|
path = build_dir
|
|
)
|
|
else:
|
|
_streamlit_chat = components.declare_component(
|
|
COMPONENT_NAME,
|
|
url = "http://localhost:3001"
|
|
)
|
|
|
|
# data type for avatar style
|
|
AvatarStyle = Literal[
|
|
"adventurer",
|
|
"adventurer-neutral",
|
|
"avataaars",
|
|
"avataaars-neutral",
|
|
"big-ears",
|
|
"big-ears-neutral",
|
|
"big-smile",
|
|
"bottts",
|
|
"bottts-neutral",
|
|
"croodles",
|
|
"croodles-neutral",
|
|
"fun-emoji",
|
|
"icons",
|
|
"identicon",
|
|
"initials",
|
|
"lorelei",
|
|
"lorelei-neutral",
|
|
"micah",
|
|
"miniavs",
|
|
"open-peeps",
|
|
"personas",
|
|
"pixel-art",
|
|
"pixel-art-neutral",
|
|
"shapes",
|
|
"thumbs",
|
|
]
|
|
|
|
def message(message: str,
|
|
is_user: Optional[bool] = False,
|
|
avatar_style: Optional[AvatarStyle] = None,
|
|
seed: Optional[Union[int, str]] = 88,
|
|
key: Optional[str] = None,
|
|
allow_html: Optional[bool] = False,
|
|
is_table: Optional[bool] = False):
|
|
"""
|
|
Creates a new instance of streamlit-chat component
|
|
|
|
Parameters
|
|
----------
|
|
message: str
|
|
The message to be displayed in the component
|
|
is_user: bool
|
|
if the sender of the message is user, if `True` will align the
|
|
message to right, default is False.
|
|
avatar_style: Literal or None
|
|
The style for the avatar of the sender of message, default is bottts
|
|
for not user, and pixel-art-neutral for user.
|
|
st-chat uses https://www.dicebear.com/styles for the avatar
|
|
seed: int or str
|
|
The seed for choosing the avatar to be used, default is 42.
|
|
key: str or None
|
|
An optional key that uniquely identifies this component. If this is
|
|
None, and the component's arguments are changed, the component will
|
|
be re-mounted in the Streamlit frontend and lose its current state.
|
|
|
|
Returns: None
|
|
"""
|
|
if not avatar_style:
|
|
avatar_style = "fun-emoji" if is_user else "bottts"
|
|
|
|
_streamlit_chat(message=message, seed=seed, isUser=is_user, avatarStyle=avatar_style, key=key, allow_html=allow_html, is_table=is_table)
|
|
|
|
|
|
if not _RELEASE:
|
|
import streamlit as st
|
|
# testing
|
|
long_message = """A chatbot or chatterbot is a software application used to conduct an on-line chat conversation via text or text-to-speech, in lieu of providing direct contact with a live human agent.
|
|
Designed to convincingly simulate the way a human would behave as a conversational partner, chatbot systems typically require continuous tuning and testing, and many in production remain unable to adequately converse, while none of them can pass the standard Turing test.
|
|
The term "ChatterBot" was originally coined by Michael Mauldin (creator of the first Verbot) in 1994 to describe these conversational programs.
|
|
"""
|
|
|
|
message("Hello, I am a Chatbot, how may I help you?")
|
|
message("Hey, \nwhat's a chatbot?", is_user=True)
|
|
message(long_message)
|
|
st.text_input("Message:")
|