File size: 3,455 Bytes
30eced7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import gradio as gr
from advanced_rag import ElevatedRagChain


rag_chain = ElevatedRagChain()


def load_pdfs(pdf_links):
    if not pdf_links:
        gr.Warning("Please enter non-empty URLs")
        return "Please enter non-empty URLs"
    try:
        pdf_links = pdf_links.split("\n")  # get individual PDF links
        rag_chain.add_pdfs_to_vectore_store(pdf_links)
        gr.Info("PDFs loaded successfully into a new vector store. If you had an old one, it was overwritten.")
        return "PDFs loaded successfully into a new vector store. If you had an old one, it was overwritten."
    except Exception as e:
        gr.Warning("Could not load PDFs. Are URLs valid?")
        print(e)
        return "Could not load PDFs. Are URLs valid?"


def submit_query(query):
    if not query:
        gr.Warning("Please enter a non-empty query")
        return "Please enter a non-empty query"
    if hasattr(rag_chain, 'elevated_rag_chain'):
        try:
            response = rag_chain.elevated_rag_chain.invoke(query)
            return response
        except Exception as e:
            gr.Warning("LLM error. Please re-submit your query")
            print(e)
            return "LLM error. Please re-submit your query"

    else:
        gr.Warning("Please load PDFs before submitting a query")
        return "Please load PDFs before submitting a query"


def reset_app():
    global rag_chain
    rag_chain = ElevatedRagChain()  # Re-initialize the ElevatedRagChain object
    gr.Info("App reset successfully. You can now load new PDFs")
    return "App reset successfully. You can now load new PDFs"


# custom css for different age elements
custom_css = """
// customize button
button {
    background-color: grey !important;
    font-family: Arial !important;
    font-weight: bold !important;
    color: blue !important;
}



// customize background color and use it as "app = gr.Blocks(css=custom_css)"
//.gradio-container {background-color: #E0F7FA}
"""

# Define the Gradio app using Blocks for a flexible layout
app = gr.Blocks(css=custom_css)    # theme=gr.themes.Base(), Soft(), Default(), Glass(), Monochrome(): https://www.gradio.app/guides/theming-guide

with app:
    gr.Markdown('''# Query your own data
## Llama 2 RAG
- Type in one or more URLs for PDF files - one per line and click on Load PDFs. Wait until the RAG system is built.
- Type your query and click on Submit Query. Once the LLM sends back a reponse, it will be displayed in the Reponse field.
- The system "remembers" the source documents, but has no memory of past user queries.
- Click on Reset App to clear / reset the RAG system
    ''')
    with gr.Row():
        with gr.Column():
            pdf_input = gr.Textbox(label="Enter your PDF URLs (one per line)", placeholder="Enter one URL per line", lines=4)
            load_button = gr.Button("Load PDF")
        with gr.Column():
            query_input = gr.Textbox(label="Enter your query here", placeholder="Type your query", lines=4)
            submit_button = gr.Button("Submit")
            
    response_output = gr.Textbox(label="Response", placeholder="Response will appear here", lines=4)
    reset_button = gr.Button("Reset App")

    load_button.click(load_pdfs, inputs=pdf_input, outputs=response_output)
    submit_button.click(submit_query, inputs=query_input, outputs=response_output)
    reset_button.click(reset_app, inputs=None, outputs=response_output)


# Run the app
app.launch()