from hugchat import hugchat from hugchat.login import Login import streamlit as st if "logged_in" not in st.session_state: st.session_state.logged_in = False if "cookies" not in st.session_state: st.session_state.cookies = None llms = [ 'meta-llama/Meta-Llama-3.1-70B-Instruct', 'meta-llama/Meta-Llama-3.1-405B-Instruct-FP8', 'CohereForAI/c4ai-command-r-plus', 'mistralai/Mixtral-8x7B-Instruct-v0.1', 'NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO', '01-ai/Yi-1.5-34B-Chat', 'mistralai/Mistral-7B-Instruct-v0.3', 'microsoft/Phi-3-mini-4k-instruct' ] st.title("HugChat LLM Chatbot") st.markdown("Made by Vo1d_s") sidebar = st.sidebar sidebar.markdown("## HuggingFace account") email = sidebar.text_input("Email", placeholder="Your email", disabled=st.session_state.logged_in) password = sidebar.text_input("Password (secure)", placeholder="Your password", type="password", disabled=st.session_state.logged_in) empty = sidebar.empty() sidebar.warning("Note: You may get an email saying that someone logged into your account because this uses HuggingFace, it is safe.") def change_system_prompt(): st.session_state.messages = [] st.session_state.chatbot.delete_conversation() st.session_state.chatbot = hugchat.ChatBot(st.session_state.cookies, system_prompt=st.session_state.sys_prompt, default_llm=st.session_state.selected_llm) print(st.session_state.selected_llm) sidebar.markdown("## Model Configuration") system_prompt = sidebar.text_input("System prompt (don't leave empty)", placeholder="Model behaviour", on_change=change_system_prompt, key="sys_prompt", disabled=not st.session_state.logged_in) selected_llm = sidebar.selectbox("LLM (model)", placeholder="Default LLM", on_change=change_system_prompt, options=llms, key="selected_llm", disabled=not st.session_state.logged_in) if email and password: if not st.session_state.logged_in: try: credentials = Login(email=email, passwd=password) st.session_state.cookies = credentials.login() st.session_state.logged_in = True st.session_state.chatbot = hugchat.ChatBot(st.session_state.cookies) except Exception as e: empty.error(f"Error: {e}") def stream(prompt): for event in st.session_state.chatbot.chat(prompt): if event: yield event["token"] def main(): if "messages" not in st.session_state: st.session_state.messages = [] for message in st.session_state.messages: with st.chat_message(message["role"]): st.write(message["content"]) if prompt := st.chat_input("What is up?", disabled=not st.session_state.logged_in): with st.chat_message("user"): st.write(prompt) st.session_state.messages.append({"role": "user", "content": prompt}) with st.chat_message("assistant"): try: response = st.write_stream(stream(prompt)) except Exception as e: response = f"Error: {e}" st.write(response) st.session_state.messages.append({"role": "assistant", "content": response}) if __name__ == "__main__": main()