File size: 2,078 Bytes
d594a38
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
542890e
d594a38
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
542890e
d594a38
 
 
 
 
 
 
 
 
 
 
 
 
 
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
52
53
54
55
56
57
58
59
60
61
import dotenv

import streamlit as st

import web_rag as wr
import web_crawler as wc

from langchain_core.tracers.langchain import LangChainTracer
from langsmith.client import Client

dotenv.load_dotenv()

ls_tracer = LangChainTracer(
    project_name="Search Agent UI",
    client=Client()
)


chat = wr.get_chat_llm(provider="cohere")

st.title("πŸ” Simple Search Agent πŸ’¬")

if "messages" not in st.session_state:
    st.session_state["messages"] = [{"role": "assistant", "content": "How can I help you?"}]

for message in st.session_state.messages:
    st.chat_message(message["role"]).write(message["content"])

if prompt := st.chat_input():
    
    st.chat_message("user").write(prompt)
    st.session_state.messages.append({"role": "user", "content": prompt})
    
    message = "I first need to do some research"
    st.chat_message("assistant").write(message)
    st.session_state.messages.append({"role": "assistant", "content": message})
    
    with st.spinner("Optimizing search query"):
        optimize_search_query = wr.optimize_search_query(chat, query=prompt, callbacks=[ls_tracer])
        
    message = f"I'll search the web for: {optimize_search_query}"
    st.chat_message("assistant").write(message)
    st.session_state.messages.append({"role": "assistant", "content": message})
    
    
    with st.spinner(f"Searching the web for: {optimize_search_query}"):
        sources = wc.get_sources(optimize_search_query, max_pages=20)
        
    with st.spinner(f"I'm now retrieveing the {len(sources)} webpages and documents I found (be patient)"):
        contents = wc.get_links_contents(sources)


    with st.spinner( f"Reading through the {len(contents)} sources I managed to retrieve"):
        vector_store = wc.vectorize(contents)

    with st.spinner( "Ok I have now enough information to answer"):
        response = wr.query_rag(chat, prompt, optimize_search_query, vector_store, callbacks=[ls_tracer])

    st.chat_message("assistant").write(response)
    st.session_state.messages.append({"role": "assistant", "content": response})