File size: 4,419 Bytes
b8374b8
28a736c
 
2967d61
 
8fd67b9
5aa3509
28a736c
68b45b6
 
 
 
 
28a736c
68b45b6
5aa3509
68b45b6
28a736c
 
68b45b6
5aa3509
68b45b6
5aa3509
28a736c
68b45b6
5aa3509
68b45b6
5aa3509
68b45b6
 
 
5aa3509
68b45b6
 
5aa3509
b8374b8
 
68b45b6
5aa3509
 
68b45b6
 
 
5aa3509
68b45b6
 
 
 
5aa3509
68b45b6
 
 
 
 
8fd67b9
28a736c
 
68b45b6
28a736c
 
 
 
 
 
5aa3509
 
68b45b6
 
28a736c
5aa3509
 
 
 
 
 
 
 
 
68b45b6
 
28a736c
5aa3509
 
 
28a736c
 
 
 
 
 
 
5aa3509
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28a736c
5aa3509
70094a6
 
 
e798f23
70094a6
 
 
7a543a2
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import os
import gradio as gr
import nest_asyncio
from llama_index.core import StorageContext, load_index_from_storage

from telcom_core import query_rag_qa, query_graph_rag_qa, plot_full_kg, evaluate_llm, parse_evaluation_regex


# Define constants for index paths
os.environ["OPENAI_API_KEY"] = os.getenv('oai')
KG_INDEX_PATH = "./telcom_full_property_kg_processed_dynamicpath2_withpackagedata_category/"
KG_PLOT_PATH = KG_INDEX_PATH + "/full_kg.html"
RAG_INDEX_PATH = "./telcom_RAG_full_withpackagedata_category/"

# Load Graph-RAG index
graph_rag_index = load_index_from_storage(
    StorageContext.from_defaults(persist_dir=KG_INDEX_PATH)
)

# Load RAG index
rag_index = load_index_from_storage(
    StorageContext.from_defaults(persist_dir=RAG_INDEX_PATH)
)

def query_tqa(query, search_level):
    """
    Query both Graph-RAG and RAG models and return their responses and references.

    Args:
        query (str): The query to be processed.
        search_level (str): The level of search to be performed.

    Returns:
        tuple: Responses and references from both Graph-RAG and RAG models.
    """
    grag_response, grag_reference, grag_reference_text = query_graph_rag_qa(graph_rag_index, query, search_level)
    rag_response, rag_reference, rag_reference_text = query_rag_qa(rag_index, query, search_level)    
    return grag_response, grag_reference, grag_reference_text, rag_response, rag_reference, rag_reference_text


def eval_llm(query, rag_response, grag_response):
    """
    Evaluate responses from both Graph-RAG and RAG models using an LLM.

    Args:
        query (str): The query that was used to generate the responses.
        rag_response (str): The response from the RAG model.
        grag_response (str): The response from the Graph-RAG model.

    Returns:
        tuple: Evaluation results for both responses.
    """
    grag_eval = evaluate_llm(query, grag_response)
    rag_eval = evaluate_llm(query, rag_response)
    return parse_evaluation_regex(grag_eval), parse_evaluation_regex(rag_eval)


 
with gr.Blocks() as demo:
    gr.Markdown("<h1>Telcom Graph-RAG v0.1</h1>")

    with gr.Tab("Virtual Assistant"):
        with gr.Row():
            query_input = gr.Textbox(label="Input Your Query..")
            search_level = gr.Slider(minimum=1, maximum=50, value=3, step=5, label="Search level")
            ask_button = gr.Button("Ask TelcomVA!!")

            
        with gr.Row():
            with gr.Accordion("Graph-RAG!", open=True):
                grag_output = gr.Textbox(label="Response")
                grag_reference = gr.Textbox(label="Triplets")
                grag_reference_text = gr.Textbox(label="Extracted Reference raw")

            with gr.Accordion("RAG", open=True):
                rag_output = gr.Textbox(label="Response")
                rag_reference = gr.Textbox(label="Extracted Reference")
                rag_reference_text = gr.Textbox(label="Extracted Reference raw")


        with gr.Row():
            grag_performance = gr.Textbox(label="Graph-RAG Performance")
            rag_performance = gr.Textbox(label="RAG Performance")
        eval_button = gr.Button("Evaluate LLMs!!")



    with gr.Accordion("Explore KG!", open=False):
        kg_output = gr.HTML()
        plot_button = gr.Button("Plot Full KG!!")

    ask_button.click(query_tqa, 
                     inputs=[query_input,search_level], 
                     outputs=[
                         grag_output,
                         grag_reference,
                         grag_reference_text,
                         rag_output,
                         rag_reference,
                         rag_reference_text
                         ]
    )
    
    eval_button.click(eval_llm,
                      inputs=[query_input,rag_output,grag_output],
                      outputs=[
                          grag_performance,
                          rag_performance
                      ]
    )

    plot_button.click(plot_full_kg, outputs=kg_output)

    examples = gr.Examples(
    examples=[
        ["what are the upselling ideas for roaming package you can recommend for customer Rina Wati."],
        ["My phone number is 81226808748, i am traveling and want to get some good travel roaming plans. Give me list of plans per GB usage and cost."]
    ],
    inputs=[query_input]
    )
demo.launch(auth=(os.getenv('id'), os.getenv('pass')), share=True)