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:")