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