File size: 2,832 Bytes
ec16604
 
 
 
92bc5a2
ec16604
 
 
1757e11
 
 
 
 
 
 
 
 
884299d
 
21bf2d0
d7ce517
21bf2d0
 
70511cb
a401978
79a547d
a401978
 
 
 
 
 
 
 
3a130a2
a401978
91a25c0
659ec36
b83a14b
ea7253a
aa2c6ec
ea7253a
2e08e6b
 
 
6aacd92
 
 
2e08e6b
19ade8f
6b94a4b
 
1757e11
6b94a4b
 
 
 
1757e11
6b94a4b
1757e11
6b94a4b
 
 
 
 
b83a14b
4af858f
b83a14b
 
4af858f
 
 
 
3a130a2
19ade8f
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
from openai import OpenAI
import crawl_the_site
import create_database
import streamlit as st
import time

api_key = "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"

openai_client = OpenAI(base_url="https://openrouter.ai/api/v1",api_key=api_key)

prompt_template = """Answer the question only according to the information provided below. Answer only the user's question, dont give additional information.
## Information : 
{}

## Question : 
# {}"""

if not "messages" in st.session_state:
    st.session_state.messages = []
if not "stage" in st.session_state:
    st.session_state.stage = "crawl-input"
elif st.session_state.stage == "remove-crawl-input-widgets":
    st.session_state.stage = "prompt-input"

if st.session_state.stage == "crawl-input":
    config = st.text_area("Enter the start URL and the limit of crawling (in this format : URL,limit) :")
    config_btn = st.button("Start crawling!")

    if config and config_btn:
        start = config.split(",")[0]
        limit = int(config.split(",")[1])
            
        txt = crawl_the_site.crawl(start,limit)
        st.session_state.collection = create_database.create_database(txt)
        st.write("Crawling is done. Click \"Start Crawling!\" again to start chatting!")
        st.session_state.stage = "remove-crawl-input-widgets"

if st.session_state.stage == "prompt-input":
    
    prompt = st.chat_input("Ask the documentation a question!")
                
    if prompt:
        for message in st.session_state.messages:
            with st.chat_message(message["role"]):
                st.markdown(message["message"])
        
        with st.chat_message("user"):
            st.markdown(prompt)
                
        st.session_state.messages.append({"role":"user","message":prompt})
        results = st.session_state.collection.query(query_texts=[prompt],n_results=5)
        infos = results["documents"][0]
        
        info_text = ""
        for info in infos:
            info_text += info + "\n---\n"
        info_text = info_text.strip()
        
        prompt = prompt_template.format(info_text,prompt)
        
        completion = openai_client.chat.completions.create(
        extra_headers={},
        extra_body={},
        model="deepseek/deepseek-r1:free",
        messages=[{"role":"user","content":prompt}])
        
        with st.chat_message("assistant"):
            full_response = ""
            message_placeholder = st.empty()
            for chunk in completion.choices[0].message.content.split():
                full_response += chunk + " "
                time.sleep(0.05)
                message_placeholder.markdown(full_response + "▌")
            message_placeholder.markdown(full_response)
        st.session_state.messages.append({"role":"assistant","message":full_response})