import streamlit as st from streamlit_chat import message from streamlit_extras.colored_header import colored_header from streamlit_extras.add_vertical_space import add_vertical_space from langchain import PromptTemplate, HuggingFaceHub, LLMChain from hugchat import hugchat from hugchat.login import Login from time import sleep from hugchat_api import HuggingChat import os from dotenv import load_dotenv # load the Environment Variables. load_dotenv() st.set_page_config(page_title="OpenAssistant Powered Chat App") # Sidebar contents with st.sidebar: st.title('🤗💬 HuggingChat App') st.markdown(''' - [OpenAssistant/oasst-sft-4-pythia-12b-epoch-3.5](https://huggingface.co/OpenAssistant/oasst-sft-4-pythia-12b-epoch-3.5) LLM model ''') add_vertical_space(3) #st.write('Made with ❤️ by [Prompt Engineer](https://youtube.com/@engineerprompt)') st.header("Your Personal Assistant 💬") def main(): # Generate empty lists for generated and user. ## Assistant Response if 'generated' not in st.session_state: st.session_state['generated'] = ["I'm Assistant, How may I help you?"] ## user question if 'user' not in st.session_state: st.session_state['user'] = ['Hi!'] # Layout of input/response containers response_container = st.container() colored_header(label='', description='', color_name='blue-30') input_container = st.container() # get user input def get_text(): input_text = st.text_input("You: ", "", key="input") return input_text ## Applying the user input box with input_container: user_input = get_text() def chain_setup(): template = """<|prompter|>{question}<|endoftext|> <|assistant|>""" prompt = PromptTemplate(template=template, input_variables=["question"]) llm=HuggingFaceHub(repo_id="OpenAssistant/oasst-sft-4-pythia-12b-epoch-3.5", model_kwargs={"max_new_tokens":1200}) llm_chain=LLMChain( llm=llm, prompt=prompt ) return llm_chain # generate response def generate_response(question, llm_chain): response = llm_chain.run(question) return response ## load LLM llm_chain = chain_setup() # main loop with response_container: if user_input: response = generate_response(user_input, llm_chain) st.session_state.user.append(user_input) st.session_state.generated.append(response) # # Initialize chat history # if "messages" not in st.session_state: # st.session_state.messages = [] if st.session_state['generated']: # for message in st.session_state.messages: # with st.chat_message(message["role"]): # st.markdown(message["content"]) for i in range(len(st.session_state['generated'])): message(st.session_state['user'][i], is_user=True, key=str(i) + '_user') message(st.session_state["generated"][i], key=str(i)) if __name__ == '__main__': main()