Chatbot message appears twice

Hello! Do you kwnow why the responses of the chatbot/llm are appearing twice when it is thinking for the next answer?

I mean, when I asked a second question, the response of the first question appears twice. Then it disappears when the second answer is delivered.

We need to see the relevant code.

That just happens when using StreamlitCallbackHandler

Here the code:

Start the chat conversation

if “messages” not in st.session_state:
st.session_state.messages = [{“role”: “assistant”, “content”: “How may I assist you today?”}]

for message in st.session_state.messages:
with st.chat_message(message[“role”]):
st.markdown(message[“content”])

user_input = st.chat_input(“Write your message here…”)
if user_input:
st.session_state.messages.append({“role”: “user”, “content”: user_input, “save”: True})
with st.chat_message(“user”):
st.markdown(user_input)

try:
    with st.chat_message("assistant"):
        with st.spinner("Thinking..."):
            
            st_callback = StreamlitCallbackHandler(
                parent_container = st.container(),
                max_thought_containers = 4,
                expand_new_thoughts = False)

            def response_generator():
                response = agent_conversational.invoke({"input": user_input, "chat_history": message}, {"callbacks": [st_callback]})
                output_message = response["output"]
                for word in output_message.split(" "):
                    yield word + " "
                    time.sleep(0.1)
            output_message = st.write_stream(response_generator())
        st.session_state.messages.append({"role": "assistant", "content": output_message})

Try to remove that,

time.sleep(0.1)

See if the ghost disappears.

That is not working. I think its because of the StreamlitCallbackHandler containers/functions. But I do not know how to fix it

I have encountered this issue too and I did not use StreamlitCallbackHandler @RomeoSe. Unsure why is this though, did not see any problem in the code.

Try:

# Your code above...
with st.chat_message("assistant"):
   st.empty()
# Your code below...

It works perfectly. Thanks @asehmi

1 Like

Great… this is a general technique you can use to address these kinds of “ghost” trails.

The OP where this solution came from is here: Ghost double text bug

1 Like