app.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import streamlit as st
  2. from embedchain import App
  3. @st.cache_resource
  4. def embedchain_bot():
  5. return App()
  6. st.title("💬 Chatbot")
  7. st.caption("🚀 An Embedchain app powered by OpenAI!")
  8. if "messages" not in st.session_state:
  9. st.session_state.messages = [
  10. {
  11. "role": "assistant",
  12. "content": """
  13. Hi! I'm a chatbot. I can answer questions and learn new things!\n
  14. Ask me anything and if you want me to learn something do `/add <source>`.\n
  15. I can learn mostly everything. :)
  16. """,
  17. }
  18. ]
  19. for message in st.session_state.messages:
  20. with st.chat_message(message["role"]):
  21. st.markdown(message["content"])
  22. if prompt := st.chat_input("Ask me anything!"):
  23. app = embedchain_bot()
  24. if prompt.startswith("/add"):
  25. with st.chat_message("user"):
  26. st.markdown(prompt)
  27. st.session_state.messages.append({"role": "user", "content": prompt})
  28. prompt = prompt.replace("/add", "").strip()
  29. with st.chat_message("assistant"):
  30. message_placeholder = st.empty()
  31. message_placeholder.markdown("Adding to knowledge base...")
  32. app.add(prompt)
  33. message_placeholder.markdown(f"Added {prompt} to knowledge base!")
  34. st.session_state.messages.append({"role": "assistant", "content": f"Added {prompt} to knowledge base!"})
  35. st.stop()
  36. with st.chat_message("user"):
  37. st.markdown(prompt)
  38. st.session_state.messages.append({"role": "user", "content": prompt})
  39. with st.chat_message("assistant"):
  40. msg_placeholder = st.empty()
  41. msg_placeholder.markdown("Thinking...")
  42. full_response = ""
  43. for response in app.chat(prompt):
  44. msg_placeholder.empty()
  45. full_response += response
  46. msg_placeholder.markdown(full_response)
  47. st.session_state.messages.append({"role": "assistant", "content": full_response})