File size: 1,792 Bytes
09113b6
 
 
 
 
678b515
 
 
09113b6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43fee5b
09113b6
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
from backend.core import run_llm
import streamlit as st
from streamlit_chat import message
from typing import Set

st.header("Peter's LangChain documentation chatbot")
st.subheader("GPT-3.5-turbo + the entire LangChain documentation")
prompt = st.text_input("You can also ask for code.", placeholder="")

# Initialize session state variables if they don't exist yet.
if "user_prompt_history" not in st.session_state:
    st.session_state.user_prompt_history = []

if "chat_answers_history" not in st.session_state:
    st.session_state.chat_answers_history = []


# Format sources links (referencing LangChain urls) as a clean enumerated list.
def create_sources_string(source_urls: Set[str]) -> str:
    if not source_urls:
        return ""
    sources_list = list(source_urls)
    sources_list.sort()
    sources_string = "sources:\n"
    for i, source in enumerate(sources_list):
        sources_string += f"{i+1}. {source}\n"
    return sources_string


if prompt:
    with st.spinner("Thinking..."):
        generated_response = run_llm(query=prompt)
        sources = set(
            [doc.metadata["source"]
                for doc in generated_response["source_documents"]
             ]
        )
        formatted_response = (
            f"{generated_response['result']}"
        )

        # Add the user's prompt and the chatbot's response to the session state variables.
        st.session_state.user_prompt_history.append(prompt)
        st.session_state.chat_answers_history.append(formatted_response)

if st.session_state.chat_answers_history:
    for generated_response, user_query in zip(
            st.session_state.chat_answers_history, st.session_state.user_prompt_history):
        message(user_query, is_user=True)
        message(generated_response, is_user=False)