File size: 3,229 Bytes
6f45939
ff2fdee
31b96c8
d440c70
548732b
d440c70
31b96c8
7f71865
 
 
c6f21e7
 
 
 
 
 
 
 
 
 
7f71865
 
c6f21e7
31b96c8
ff2fdee
e7baaa3
 
 
 
 
d440c70
ff2fdee
e7baaa3
 
 
 
 
31b96c8
 
 
 
d440c70
31b96c8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ff2fdee
d440c70
31b96c8
 
 
 
ff2fdee
 
 
 
31b96c8
ff2fdee
 
 
 
 
31b96c8
 
 
 
 
 
 
 
 
d440c70
 
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
94
95
import gradio as gr
import requests
import json

API_URL = "https://sendthat.cc"

def list_indexes():
    try:
        url = f"{API_URL}/list_indexes"
        response = requests.get(url)
        response.raise_for_status()
        indexes = response.json()
        
        # Check if the response is just ["indexes"] and replace with actual index names
        if indexes == ["indexes"]:
            return ["history", "medical"]  # Hardcoded index names
        elif isinstance(indexes, list) and indexes:
            return indexes
        else:
            return ["No indexes available"]
    except requests.exceptions.RequestException as e:
        print(f"Error fetching indexes: {e}")
        return ["Error fetching indexes"]

def search_document(index_name, query, k):
    url = f"{API_URL}/search/{index_name}"
    payload = {"text": query, "k": k}
    headers = {"Content-Type": "application/json"}
    response = requests.post(url, json=payload, headers=headers)
    return response.json(), "", k  # Return empty string to clear input

def qa_document(index_name, question, k):
    url = f"{API_URL}/qa/{index_name}"
    payload = {"text": question, "k": k}
    headers = {"Content-Type": "application/json"}
    response = requests.post(url, json=payload, headers=headers)
    return response.json(), "", k  # Return empty string to clear input

def refresh_indexes():
    indexes = list_indexes()
    return gr.Dropdown(choices=indexes, label="Select Index")

# Custom CSS for modern appearance
custom_css = """
.gradio-container {
    background-color: #f5f5f5;
}
.input-box, .output-box, .gr-box {
    border-radius: 8px !important;
    border-color: #d1d1d1 !important;
}
.input-box, .gr-dropdown {
    background-color: #e6f2ff !important;
}
.gr-button {
    background-color: #4a90e2 !important;
    color: white !important;
}
.gr-button:hover {
    background-color: #3a7bc8 !important;
}
.gr-form {
    border-color: #d1d1d1 !important;
    background-color: white !important;
}
"""

with gr.Blocks(css=custom_css) as demo:
    gr.Markdown("# Document Search and Question Answering System")
    
    with gr.Row():
        index_dropdown = gr.Dropdown(label="Select Index", choices=list_indexes())
        refresh_button = gr.Button("Refresh Indexes")

    with gr.Tab("Search"):
        search_input = gr.Textbox(label="Search Query")
        search_k = gr.Slider(1, 10, 5, step=1, label="Number of Results")
        search_button = gr.Button("Search")
        search_output = gr.JSON(label="Search Results")
        
    with gr.Tab("Question Answering"):
        qa_input = gr.Textbox(label="Question")
        qa_k = gr.Slider(1, 10, 5, step=1, label="Number of Contexts to Consider")
        qa_button = gr.Button("Ask Question")
        qa_output = gr.JSON(label="Answer")
    
    refresh_button.click(refresh_indexes, outputs=index_dropdown)
    search_button.click(search_document, 
                        inputs=[index_dropdown, search_input, search_k], 
                        outputs=[search_output, search_input, search_k])
    qa_button.click(qa_document, 
                    inputs=[index_dropdown, qa_input, qa_k], 
                    outputs=[qa_output, qa_input, qa_k])

demo.launch()