File size: 2,892 Bytes
ec16604
 
 
 
92bc5a2
ec16604
 
 
1757e11
 
 
 
 
 
 
 
 
19ade8f
21bf2d0
d7ce517
21bf2d0
 
70511cb
a401978
79a547d
a401978
 
 
 
 
 
 
 
5aa46d7
7f698f0
a401978
91a25c0
659ec36
b83a14b
ea7253a
3567445
ea7253a
 
 
e21682e
b83a14b
 
 
 
19ade8f
6b94a4b
 
1757e11
6b94a4b
 
 
 
1757e11
6b94a4b
1757e11
6b94a4b
 
 
 
 
b83a14b
4af858f
b83a14b
 
4af858f
 
 
 
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 : 
# {}"""

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 prompting!
        Theres a chance that after sending the first prompt you dont see the output, just click \"Enter\" again.""")
        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:
        with st.chat_message("user"):
            st.markdown(prompt)
            
        for message in st.session_state.messages:
            with st.chat_message(message["role"]):
                st.markdown(message)    
                
        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})