diff --git a/streamlit_app.py b/streamlit_app.py index 7a0ed1272052..95b7cddf4224 100644 --- a/streamlit_app.py +++ b/streamlit_app.py @@ -1,40 +1,55 @@ -import altair as alt -import numpy as np -import pandas as pd import streamlit as st - -""" -# Welcome to Streamlit! - -Edit `/streamlit_app.py` to customize this app to your heart's desire :heart:. -If you have any questions, checkout our [documentation](https://docs.streamlit.io) and [community -forums](https://discuss.streamlit.io). - -In the meantime, below is an example of what you can do with just a few lines of code: -""" - -num_points = st.slider("Number of points in spiral", 1, 10000, 1100) -num_turns = st.slider("Number of turns in spiral", 1, 300, 31) - -indices = np.linspace(0, 1, num_points) -theta = 2 * np.pi * num_turns * indices -radius = indices - -x = radius * np.cos(theta) -y = radius * np.sin(theta) - -df = pd.DataFrame({ - "x": x, - "y": y, - "idx": indices, - "rand": np.random.randn(num_points), -}) - -st.altair_chart(alt.Chart(df, height=700, width=700) - .mark_point(filled=True) - .encode( - x=alt.X("x", axis=None), - y=alt.Y("y", axis=None), - color=alt.Color("idx", legend=None, scale=alt.Scale()), - size=alt.Size("rand", legend=None, scale=alt.Scale(range=[1, 150])), - )) +from hugchat import hugchat +from hugchat.login import Login + +# App title +st.set_page_config(page_title="🤗💬 HugChat") + +# Hugging Face Credentials +with st.sidebar: + st.title('🤗💬 HugChat') + if ('EMAIL' in st.secrets) and ('PASS' in st.secrets): + st.success('HuggingFace Login credentials already provided!', icon='✅') + hf_email = st.secrets['EMAIL'] + hf_pass = st.secrets['PASS'] + else: + hf_email = st.text_input('Enter E-mail:', type='password') + hf_pass = st.text_input('Enter password:', type='password') + if not (hf_email and hf_pass): + st.warning('Please enter your credentials!', icon='⚠️') + else: + st.success('Proceed to entering your prompt message!', icon='👉') + st.markdown('📖 Learn how to build this app in this [blog](https://blog.streamlit.io/how-to-build-an-llm-powered-chatbot-with-streamlit/)!') + +# Store LLM generated responses +if "messages" not in st.session_state.keys(): + st.session_state.messages = [{"role": "assistant", "content": "How may I help you?"}] + +# Display chat messages +for message in st.session_state.messages: + with st.chat_message(message["role"]): + st.write(message["content"]) + +# Function for generating LLM response +def generate_response(prompt_input, email, passwd): + # Hugging Face Login + sign = Login(email, passwd) + cookies = sign.login() + # Create ChatBot + chatbot = hugchat.ChatBot(cookies=cookies.get_dict()) + return chatbot.chat(prompt_input) + +# User-provided prompt +if prompt := st.chat_input(disabled=not (hf_email and hf_pass)): + st.session_state.messages.append({"role": "user", "content": prompt}) + with st.chat_message("user"): + st.write(prompt) + +# Generate a new response if last message is not from assistant +if st.session_state.messages[-1]["role"] != "assistant": + with st.chat_message("assistant"): + with st.spinner("Thinking..."): + response = generate_response(prompt, hf_email, hf_pass) + st.write(response) + message = {"role": "assistant", "content": response} + st.session_state.messages.append(message)