CoolFace
Apppublic

IR-IIITH/MultiAgent-OpenDomain-QnA-System

sourceHugging Faceupdated 2y agoView on Hugging Face
1likes
app.py277 linesDownload Raw Back to root
1import gradio as gr2import json3 4# Import your modules here5from Agents.togetherAIAgent import generate_article_from_query6from Agents.wikiAgent import get_wiki_data7from Agents.rankerAgent import rankerAgent8from Query_Modification.QueryModification import query_Modifier, getKeywords9from Ranking.RRF.RRF_implementation import reciprocal_rank_fusion_three, reciprocal_rank_fusion_six10from Retrieval.tf_idf import tf_idf_pipeline11from Retrieval.bm25 import bm25_pipeline12from Retrieval.vision import vision_pipeline13from Retrieval.openSource import open_source_pipeline14from Baseline.boolean import boolean_pipeline15from AnswerGeneration.getAnswer import generate_answer_withContext, generate_answer_zeroShot16 17# Load miniWikiCollection18miniWikiCollection = json.load(open('Datasets/mini_wiki_collection.json', 'r'))19miniWikiCollectionDict = {wiki['wikipedia_id']: " ".join(wiki['text']) for wiki in miniWikiCollection}20 21def process_query(query):22    # Query modification23    modified_query = query_Modifier(query)24 25    # Context Generation26    article = generate_article_from_query(query)27 28    # Keyword Extraction and getting context from Wiki29    keywords = getKeywords(query)30    wiki_data = get_wiki_data(keywords)31 32    # Retrieve rankings33    boolean_ranking = boolean_pipeline(query)34    tf_idf_ranking = tf_idf_pipeline(query)35    bm25_ranking = bm25_pipeline(query)36    vision_ranking = vision_pipeline(query)37    open_source_ranking = open_source_pipeline(query)38 39    # Modified queries40    boolean_ranking_modified = boolean_pipeline(modified_query)41    tf_idf_ranking_modified = tf_idf_pipeline(modified_query)42    bm25_ranking_modified = bm25_pipeline(modified_query)43    vision_ranking_modified = vision_pipeline(modified_query)44    open_source_ranking_modified = open_source_pipeline(modified_query)45 46    # RRF rankings47    tf_idf_bm25_open_RRF_Ranking = reciprocal_rank_fusion_three(tf_idf_ranking, bm25_ranking, open_source_ranking)48    tf_idf_bm25_open_RRF_Ranking_modified = reciprocal_rank_fusion_three(tf_idf_ranking_modified, bm25_ranking_modified, open_source_ranking_modified)49    tf_idf_bm25_open_RRF_Ranking_combined = reciprocal_rank_fusion_six(50        tf_idf_ranking, bm25_ranking, open_source_ranking,51        tf_idf_ranking_modified, bm25_ranking_modified, open_source_ranking_modified52    )53 54    try:55        agent1_context = wiki_data[0]56    except:57        agent1_context = "Can't find a Wiki article for this query."58        59    agent2_context = article60 61    try:62        boolean_context = miniWikiCollectionDict[boolean_ranking[0]]63    except:64        boolean_context = "Can't find a matching document for this query."65 66    tf_idf_context = miniWikiCollectionDict[tf_idf_ranking[0]]67    bm25_context = miniWikiCollectionDict[str(bm25_ranking[0])]68    vision_context = miniWikiCollectionDict[vision_ranking[0]]69    open_source_context = miniWikiCollectionDict[open_source_ranking[0]]70 71    boolean_context_modified = miniWikiCollectionDict[boolean_ranking_modified[0]]72    tf_idf_context_modified = miniWikiCollectionDict[tf_idf_ranking_modified[0]]73    bm25_context_modified = miniWikiCollectionDict[str(bm25_ranking_modified[0])]74    vision_context_modified = miniWikiCollectionDict[vision_ranking_modified[0]]75    open_source_context_modified = miniWikiCollectionDict[open_source_ranking_modified[0]]76 77    tf_idf_bm25_open_RRF_Ranking_context = miniWikiCollectionDict[tf_idf_bm25_open_RRF_Ranking[0]]78    tf_idf_bm25_open_RRF_Ranking_modified_context = miniWikiCollectionDict[tf_idf_bm25_open_RRF_Ranking_modified[0]]79    tf_idf_bm25_open_RRF_Ranking_combined_context = miniWikiCollectionDict[tf_idf_bm25_open_RRF_Ranking_combined[0]]80 81    # Generating answers82    agent1_answer = generate_answer_withContext(query, agent1_context)83    agent2_answer = generate_answer_withContext(query, agent2_context)84 85    boolean_answer = generate_answer_withContext(query, boolean_context)86    tf_idf_answer = generate_answer_withContext(query, tf_idf_context)87    bm25_answer = generate_answer_withContext(query, bm25_context)88    vision_answer = generate_answer_withContext(query, vision_context)89    open_source_answer = generate_answer_withContext(query, open_source_context)90 91    boolean_answer_modified = generate_answer_withContext(modified_query, boolean_context_modified)92    tf_idf_answer_modified = generate_answer_withContext(modified_query, tf_idf_context_modified)93    bm25_answer_modified = generate_answer_withContext(modified_query, bm25_context_modified)94    vision_answer_modified = generate_answer_withContext(modified_query, vision_context_modified)95    open_source_answer_modified = generate_answer_withContext(modified_query, open_source_context_modified)96 97    tf_idf_bm25_open_RRF_Ranking_answer = generate_answer_withContext(query, tf_idf_bm25_open_RRF_Ranking_context)98    tf_idf_bm25_open_RRF_Ranking_modified_answer = generate_answer_withContext(modified_query, tf_idf_bm25_open_RRF_Ranking_modified_context)99    tf_idf_bm25_open_RRF_Ranking_combined_answer = generate_answer_withContext(query, tf_idf_bm25_open_RRF_Ranking_combined_context)100 101    zeroShot = generate_answer_zeroShot(query)102 103    # Ranking the best answer104    rankerAgentInput = {105        "query": query,106        "agent1": agent1_answer,107        "agent2": agent2_answer,108        "boolean": boolean_answer,109        "tf_idf": tf_idf_answer,110        "bm25": bm25_answer,111        "vision": vision_answer,112        "open_source": open_source_answer,113        "boolean_modified": boolean_answer_modified,114        "tf_idf_modified": tf_idf_answer_modified,115        "bm25_modified": bm25_answer_modified,116        "vision_modified": vision_answer_modified,117        "open_source_modified": open_source_answer_modified,118        "tf_idf_bm25_open_RRF_Ranking": tf_idf_bm25_open_RRF_Ranking_answer,119        "tf_idf_bm25_open_RRF_Ranking_modified": tf_idf_bm25_open_RRF_Ranking_modified_answer,120        "tf_idf_bm25_open_RRF_Ranking_combined": tf_idf_bm25_open_RRF_Ranking_combined_answer,121        "zeroShot": zeroShot122    }123 124    best_model, best_answer = rankerAgent(rankerAgentInput)125 126    return (127        best_model,128        best_answer,129        agent1_answer, agent1_context,130        agent2_answer, agent2_context,131        boolean_answer, boolean_context,132        tf_idf_answer, tf_idf_context,133        bm25_answer, bm25_context,134        vision_answer, vision_context,135        open_source_answer, open_source_context,136        boolean_answer_modified, boolean_context_modified,137        tf_idf_answer_modified, tf_idf_context_modified,138        bm25_answer_modified, bm25_context_modified,139        vision_answer_modified, vision_context_modified,140        open_source_answer_modified, open_source_context_modified,141        tf_idf_bm25_open_RRF_Ranking_answer, tf_idf_bm25_open_RRF_Ranking_context,142        tf_idf_bm25_open_RRF_Ranking_modified_answer, tf_idf_bm25_open_RRF_Ranking_modified_context,143        tf_idf_bm25_open_RRF_Ranking_combined_answer, tf_idf_bm25_open_RRF_Ranking_combined_context,144        zeroShot, "Zero-shot doesn't have a context."145    )146 147# CSS Styling for the fancy effects148css = """149#fancy-column {150    background: linear-gradient(135deg, #1a242f, #2b3a44);  /* Dark blue-gray gradient background */151    padding: 20px;152    border-radius: 15px;153}154 155#query-input, #submit-button, #best-model-output, #best-answer-output {156    border-radius: 10px;  /* Rounded corners */157    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);  /* Darker shadow for better contrast */158    background-color: #34495e;  /* Dark background for inputs */159    color: #ecf0f1;  /* Light text for good readability */160}161 162#query-input:focus, #submit-button:focus, #best-model-output:focus, #best-answer-output:focus {163    outline: none;164    border: 2px solid #7f8c8d;  /* Subtle accent border on focus */165}166 167#submit-button {168    background-color: #16a085;  /* Muted teal color for button */169    color: #ecf0f1;  /* Light text for button */170    font-weight: bold;171    padding: 10px;172}173 174#submit-button:hover {175    background-color: #1abc9c;  /* Slightly lighter teal on hover */176}177 178#best-model-output, #best-answer-output {179    background-color: #2c3e50;  /* Darker background for output boxes */180}181 182#best-model-output label, #best-answer-output label, #query-input label {183    color: #ecf0f1;  /* Light text for labels */184}185"""186 187 188 189# Interface creation190def create_interface():191    with gr.Blocks() as interface:192        with gr.Column(elem_id="fancy-column", scale=3):  # Fancy column with extra styling193            with gr.Row():194                query_input = gr.Textbox(label="Enter your query", scale=3, elem_id="query-input")195                submit_button = gr.Button("Submit", scale=1, elem_id="submit-button")196            197            # Adjusting the spacing between the output fields198            with gr.Row():199                best_model_output = gr.Textbox(label="Best Model", interactive=False, scale=1.5, elem_id="best-model-output")200                best_answer_output = gr.Textbox(label="Best Answer", interactive=False, scale=1.5, elem_id="best-answer-output")201 202        with gr.Column():203            # Function to create a row for answers and contexts204            def create_answer_row(label):205                if label == "Agent 1":206                    label = "Wiki Search"207                elif label == "Agent 2":208                    label = "Llama Context Generation"209                elif label == "Open Source Answer":210                    label = 'MiniLM Text Embedding model'211                elif label == "Open Source (Modified)":212                    label = 'MiniLM Text Embedding model (Modified)'213                elif label == "TF-IDF + BM25 + Open RRF":214                    label = "RRF (TF-IDF + BM25 + MiniLM)"215                elif label == "TF-IDF + BM25 + Open RRF (Modified)":216                    label = "RRF (TF-IDF + BM25 + MiniLM) (Modified)"217                elif label == "TF-IDF + BM25 + Open RRF (Combined)":218                    label = "RRF (TF-IDF + BM25 + MiniLM) (Combined)"219                with gr.Row():220                    answer_textbox = gr.Textbox(label=f"{label} Answer", interactive=False, scale=1.2, elem_id="best-model-output")221                    context_textbox = gr.Textbox(label=f"{label} Context", scale=1.8, elem_id="best-answer-output")222                223                return answer_textbox, context_textbox224 225        agent1_output, agent1_context_output = create_answer_row("Agent 1")226        agent2_output, agent2_context_output = create_answer_row("Agent 2")227        boolean_output, boolean_context_output = create_answer_row("Boolean")228        tf_idf_output, tf_idf_context_output = create_answer_row("TF-IDF")229        bm25_output, bm25_context_output = create_answer_row("BM25")230        vision_output, vision_context_output = create_answer_row("Vision")231        open_source_output, open_source_context_output = create_answer_row("Open Source")232 233        boolean_mod_output, boolean_mod_context_output = create_answer_row("Boolean (Modified)")234        tf_idf_mod_output, tf_idf_mod_context_output = create_answer_row("TF-IDF (Modified)")235        bm25_mod_output, bm25_mod_context_output = create_answer_row("BM25 (Modified)")236        vision_mod_output, vision_mod_context_output = create_answer_row("Vision (Modified)")237        open_source_mod_output, open_source_mod_context_output = create_answer_row("Open Source (Modified)")238 239        tf_idf_rrf_output, tf_idf_rrf_context_output = create_answer_row("TF-IDF + BM25 + Open RRF")240        tf_idf_rrf_mod_output, tf_idf_rrf_mod_context_output = create_answer_row("TF-IDF + BM25 + Open RRF (Modified)")241        tf_idf_rrf_combined_output, tf_idf_rrf_combined_context_output = create_answer_row("TF-IDF + BM25 + Open RRF (Combined)")242 243        zero_shot_output, zero_shot_context_output = create_answer_row("Zero Shot")244 245        submit_button.click(246            fn=process_query,247            inputs=query_input,248            outputs=[249                best_model_output,250                best_answer_output,251                agent1_output, agent1_context_output,252                agent2_output, agent2_context_output,253                boolean_output, boolean_context_output,254                tf_idf_output, tf_idf_context_output,255                bm25_output, bm25_context_output,256                vision_output, vision_context_output,257                open_source_output, open_source_context_output,258                boolean_mod_output, boolean_mod_context_output,259                tf_idf_mod_output, tf_idf_mod_context_output,260                bm25_mod_output, bm25_mod_context_output,261                vision_mod_output, vision_mod_context_output,262                open_source_mod_output, open_source_mod_context_output,263                tf_idf_rrf_output, tf_idf_rrf_context_output,264                tf_idf_rrf_mod_output, tf_idf_rrf_mod_context_output,265                tf_idf_rrf_combined_output, tf_idf_rrf_combined_context_output,266                zero_shot_output, zero_shot_context_output267            ]268        )269 270    return interface271 272# Launch the interface273if __name__ == "__main__":274    interface = create_interface()275    interface.css = css276    interface.launch()277