|
import os |
|
|
|
import streamlit as st |
|
|
|
from service.haystack_documentation_pipeline import return_haystack_documentation_agent |
|
|
|
st.title('Haystack Documentation Chatbot') |
|
|
|
if 'image_bytes' not in st.session_state: |
|
st.session_state.image_bytes = open('service/assets/bot.png', 'rb').read() |
|
|
|
if 'messages' not in st.session_state: |
|
st.session_state.messages = [{'role': 'assistant', 'content': 'Hello there!'}] |
|
|
|
with st.sidebar: |
|
st.image('service/assets/bot.png') |
|
st.markdown( |
|
""" |
|
# Haystack Documentation Chatbot |
|
|
|
This chatbot can answer questions about the Haystack documentation. |
|
|
|
## How to use |
|
|
|
1. Type your question in the chat input box. |
|
2. Press enter. |
|
3. Wait for the chatbot to respond (since it works as an agent responses may take a while). |
|
4. enjoy! |
|
""" |
|
) |
|
|
|
for message in st.session_state.messages: |
|
with st.chat_message( |
|
message['role'], |
|
avatar=st.session_state.image_bytes if message['role'] == 'assistant' else None, |
|
): |
|
st.markdown(message['content']) |
|
|
|
if 'agent' not in st.session_state: |
|
st.session_state.agent = return_haystack_documentation_agent(openai_key=os.environ['OPENAI_KEY']) |
|
|
|
if prompt := st.chat_input('What is up?"'): |
|
st.chat_message('user').markdown(prompt) |
|
st.session_state.messages.append({'role': 'user', 'content': prompt}) |
|
chat_message = st.chat_message(name='assistant', avatar=st.session_state.image_bytes) |
|
with chat_message: |
|
with st.spinner('Thinking...'): |
|
response = st.session_state.agent.run(query=prompt) |
|
answer = response['answers'][0].answer |
|
chat_message.markdown(answer) |
|
|
|
st.session_state.messages.append({'role': 'assistant', 'content': answer}) |
|
|