File size: 1,712 Bytes
0d061c3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import requests
from config import backend_url

file_id = None
def upload_file(file):
    global file_id

    if not file:
        return "No file selected"
    
    with open(file.name, "rb") as f:
        files ={
            "file": (file.name,f, "application/pdf")
        }

        res= requests.post(f"{backend_url}/api/gemini/upload-pdf", files=files)

    if res.status_code == 200:
        file_id = res.json().get("file_id")
        return "File uploaded."
    else:
        return "Upload failed!"

def query_pdf(question):
    if not file_id:
        return "Please upload a PDF first!"
    
    payload = {
        "file_id": file_id,
        "question" : question
    }

    with requests.post(
        f"{backend_url}/api/gemini/query-pdf", 
        json=payload,
        stream=True
    ) as res:

        if res.status_code != 200:
            yield f"Something's not right: {res.status_code} - {res.text}"
            return
        
        reply = ""
        for chunk in res.iter_content(chunk_size=None, decode_unicode=True):
            reply += chunk
            yield reply

def create_pdf_tab():
    with gr.Tab("PDF"):
        pdf_file = gr.File(label="Upload PDF", file_types=[".pdf"])
        upload_status = gr.Textbox(label="Upload Status")
        question = gr.Textbox(label="Your question")
        answer = gr.Textbox(label="Reply of Chatbot")
        btn = gr.Button("Upload PDF")
        query_btn = gr.Button("Ask")

        btn.click(upload_file, [pdf_file], [upload_status])
        query_btn.click(query_pdf, [question], [answer])
        question.submit(query_pdf, [question], [answer])