app.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import os
  2. import streamlit as st
  3. from embedchain import Pipeline as App
  4. @st.cache_resource
  5. def ec_app():
  6. return App.from_config(config_path="config.yaml")
  7. with st.sidebar:
  8. huggingface_access_token = st.text_input("Hugging face Token", key="chatbot_api_key", type="password")
  9. "[Get Hugging Face Access Token](https://huggingface.co/settings/tokens)"
  10. "[View the source code](https://github.com/embedchain/examples/mistral-streamlit)"
  11. st.title("💬 Chatbot")
  12. st.caption("🚀 An Embedchain app powered by Mistral!")
  13. if "messages" not in st.session_state:
  14. st.session_state.messages = [
  15. {
  16. "role": "assistant",
  17. "content": """
  18. Hi! I'm a chatbot. I can answer questions and learn new things!\n
  19. Ask me anything and if you want me to learn something do `/add <source>`.\n
  20. I can learn mostly everything. :)
  21. """,
  22. }
  23. ]
  24. for message in st.session_state.messages:
  25. with st.chat_message(message["role"]):
  26. st.markdown(message["content"])
  27. if prompt := st.chat_input("Ask me anything!"):
  28. if not st.session_state.chatbot_api_key:
  29. st.error("Please enter your Hugging Face Access Token")
  30. st.stop()
  31. os.environ["HUGGINGFACE_ACCESS_TOKEN"] = st.session_state.chatbot_api_key
  32. app = ec_app()
  33. if prompt.startswith("/add"):
  34. with st.chat_message("user"):
  35. st.markdown(prompt)
  36. st.session_state.messages.append({"role": "user", "content": prompt})
  37. prompt = prompt.replace("/add", "").strip()
  38. with st.chat_message("assistant"):
  39. message_placeholder = st.empty()
  40. message_placeholder.markdown("Adding to knowledge base...")
  41. app.add(prompt)
  42. message_placeholder.markdown(f"Added {prompt} to knowledge base!")
  43. st.session_state.messages.append({"role": "assistant", "content": f"Added {prompt} to knowledge base!"})
  44. st.stop()
  45. with st.chat_message("user"):
  46. st.markdown(prompt)
  47. st.session_state.messages.append({"role": "user", "content": prompt})
  48. with st.chat_message("assistant"):
  49. msg_placeholder = st.empty()
  50. msg_placeholder.markdown("Thinking...")
  51. full_response = ""
  52. for response in app.chat(prompt):
  53. msg_placeholder.empty()
  54. full_response += response
  55. msg_placeholder.markdown(full_response)
  56. st.session_state.messages.append({"role": "assistant", "content": full_response})