import gradio as gr import json # Import your modules here from Agents.togetherAIAgent import generate_article_from_query from Agents.wikiAgent import get_wiki_data from Agents.rankerAgent import rankerAgent from Query_Modification.QueryModification import query_Modifier, getKeywords from Ranking.RRF.RRF_implementation import reciprocal_rank_fusion_three, reciprocal_rank_fusion_six from Retrieval.tf_idf import tf_idf_pipeline from Retrieval.bm25 import bm25_pipeline from Retrieval.vision import vision_pipeline from Retrieval.openSource import open_source_pipeline from Baseline.boolean import boolean_pipeline from AnswerGeneration.getAnswer import generate_answer_withContext, generate_answer_zeroShot # Load miniWikiCollection miniWikiCollection = json.load(open('Datasets/mini_wiki_collection.json', 'r')) miniWikiCollectionDict = {wiki['wikipedia_id']: " ".join(wiki['text']) for wiki in miniWikiCollection} def process_query(query): # Query modification modified_query = query_Modifier(query) # Context Generation article = generate_article_from_query(query) # Keyword Extraction and getting context from Wiki keywords = getKeywords(query) wiki_data = get_wiki_data(keywords) # Retrieve rankings boolean_ranking = boolean_pipeline(query) tf_idf_ranking = tf_idf_pipeline(query) bm25_ranking = bm25_pipeline(query) vision_ranking = vision_pipeline(query) open_source_ranking = open_source_pipeline(query) # Modified queries boolean_ranking_modified = boolean_pipeline(modified_query) tf_idf_ranking_modified = tf_idf_pipeline(modified_query) bm25_ranking_modified = bm25_pipeline(modified_query) vision_ranking_modified = vision_pipeline(modified_query) open_source_ranking_modified = open_source_pipeline(modified_query) # RRF rankings tf_idf_bm25_open_RRF_Ranking = reciprocal_rank_fusion_three(tf_idf_ranking, bm25_ranking, open_source_ranking) tf_idf_bm25_open_RRF_Ranking_modified = reciprocal_rank_fusion_three(tf_idf_ranking_modified, bm25_ranking_modified, open_source_ranking_modified) tf_idf_bm25_open_RRF_Ranking_combined = reciprocal_rank_fusion_six( tf_idf_ranking, bm25_ranking, open_source_ranking, tf_idf_ranking_modified, bm25_ranking_modified, open_source_ranking_modified ) agent1_context = wiki_data[0] agent2_context = article boolean_context = miniWikiCollectionDict[boolean_ranking[0]] tf_idf_context = miniWikiCollectionDict[tf_idf_ranking[0]] bm25_context = miniWikiCollectionDict[str(bm25_ranking[0])] vision_context = miniWikiCollectionDict[vision_ranking[0]] open_source_context = miniWikiCollectionDict[open_source_ranking[0]] boolean_context_modified = miniWikiCollectionDict[boolean_ranking_modified[0]] tf_idf_context_modified = miniWikiCollectionDict[tf_idf_ranking_modified[0]] bm25_context = miniWikiCollectionDict[str(bm25_ranking_modified[0])] vision_context_modified = miniWikiCollectionDict[vision_ranking_modified[0]] open_source_context_modified = miniWikiCollectionDict[open_source_ranking_modified[0]] tf_idf_bm25_open_RRF_Ranking_context = miniWikiCollectionDict[tf_idf_bm25_open_RRF_Ranking[0]] tf_idf_bm25_open_RRF_Ranking_modified_context = miniWikiCollectionDict[tf_idf_bm25_open_RRF_Ranking_modified[0]] tf_idf_bm25_open_RRF_Ranking_combined_context = miniWikiCollectionDict[tf_idf_bm25_open_RRF_Ranking_combined[0]] #Generating answers agent1_answer = generate_answer_withContext(query, agent1_context) agent2_answer = generate_answer_withContext(query, agent2_context) boolean_answer = generate_answer_withContext(query, boolean_context) tf_idf_answer = generate_answer_withContext(query, tf_idf_context) bm25_answer = generate_answer_withContext(query, bm25_context) vision_answer = generate_answer_withContext(query, vision_context) open_source_answer = generate_answer_withContext(query, open_source_context) boolean_answer_modified = generate_answer_withContext(modified_query, boolean_context_modified) tf_idf_answer_modified = generate_answer_withContext(modified_query, tf_idf_context_modified) bm25_answer_modified = generate_answer_withContext(modified_query, bm25_context) vision_answer_modified = generate_answer_withContext(modified_query, vision_context_modified) open_source_answer_modified = generate_answer_withContext(modified_query, open_source_context_modified) tf_idf_bm25_open_RRF_Ranking_answer = generate_answer_withContext(query, tf_idf_bm25_open_RRF_Ranking_context) tf_idf_bm25_open_RRF_Ranking_modified_answer = generate_answer_withContext(modified_query, tf_idf_bm25_open_RRF_Ranking_modified_context) tf_idf_bm25_open_RRF_Ranking_combined_answer = generate_answer_withContext(query, tf_idf_bm25_open_RRF_Ranking_combined_context) zeroShot = generate_answer_zeroShot(query) # Ranking the best answer rankerAgentInput = { "query": query, "agent1": agent1_answer, "agent2": agent2_answer, "boolean": boolean_answer, "tf_idf": tf_idf_answer, "bm25": bm25_answer, "vision": vision_answer, "open_source": open_source_answer, "boolean_modified": boolean_answer_modified, "tf_idf_modified": tf_idf_answer_modified, "bm25_modified": bm25_answer_modified, "vision_modified": vision_answer_modified, "open_source_modified": open_source_answer_modified, "tf_idf_bm25_open_RRF_Ranking": tf_idf_bm25_open_RRF_Ranking_answer, "tf_idf_bm25_open_RRF_Ranking_modified": tf_idf_bm25_open_RRF_Ranking_modified_answer, "tf_idf_bm25_open_RRF_Ranking_combined": tf_idf_bm25_open_RRF_Ranking_combined_answer, "zeroShot": zeroShot } best_model, best_answer = rankerAgent(rankerAgentInput) all_answers = { "Agent 1": agent1_answer, "Agent 2": agent2_answer, "Boolean": boolean_answer, "TF-IDF": tf_idf_answer, "BM25": bm25_answer, "Vision": vision_answer, "Open Source": open_source_answer, "Boolean (Modified)": boolean_answer_modified, "TF-IDF (Modified)": tf_idf_answer_modified, "BM25 (Modified)": bm25_answer_modified, "Vision (Modified)": vision_answer_modified, "Open Source (Modified)": open_source_answer_modified, "TF-IDF + BM25 + Open RRF": tf_idf_bm25_open_RRF_Ranking_answer, "TF-IDF + BM25 + Open RRF (Modified)": tf_idf_bm25_open_RRF_Ranking_modified_answer, "TF-IDF + BM25 + Open RRF (Combined)": tf_idf_bm25_open_RRF_Ranking_combined_answer, "Zero Shot": zeroShot, } return best_model, best_answer, all_answers # Gradio interface def create_interface(): with gr.Blocks() as interface: gr.Markdown("# Query Answering System") gr.Markdown("Enter a query to get the best model and the best answer using multiple retrieval models and ranking techniques.") query_input = gr.Textbox(label="Enter your query") with gr.Row(): best_model_output = gr.Textbox(label="Best Model") best_answer_output = gr.Textbox(label="Best Answer") gr.Markdown("---") # Horizontal line gr.Markdown("## All Answers") with gr.Row(): agent1_output = gr.Textbox(label="Agent 1") agent2_output = gr.Textbox(label="Agent 2") boolean_output = gr.Textbox(label="Boolean") tf_idf_output = gr.Textbox(label="TF-IDF") bm25_output = gr.Textbox(label="BM25") with gr.Row(): vision_output = gr.Textbox(label="Vision") open_source_output = gr.Textbox(label="Open Source") boolean_mod_output = gr.Textbox(label="Boolean (Modified)") tf_idf_mod_output = gr.Textbox(label="TF-IDF (Modified)") bm25_mod_output = gr.Textbox(label="BM25 (Modified)") with gr.Row(): vision_mod_output = gr.Textbox(label="Vision (Modified)") open_source_mod_output = gr.Textbox(label="Open Source (Modified)") tf_idf_rrf_output = gr.Textbox(label="TF-IDF + BM25 + Open RRF") tf_idf_rrf_mod_output = gr.Textbox(label="TF-IDF + BM25 + Open RRF (Modified)") tf_idf_rrf_combined_output = gr.Textbox(label="TF-IDF + BM25 + Open RRF (Combined)") zero_shot_output = gr.Textbox(label="Zero Shot") gr.Button("Submit").click( fn=process_query, inputs=query_input, outputs=[ best_model_output, best_answer_output, agent1_output, agent2_output, boolean_output, tf_idf_output, bm25_output, vision_output, open_source_output, boolean_mod_output, tf_idf_mod_output, bm25_mod_output, vision_mod_output, open_source_mod_output, tf_idf_rrf_output, tf_idf_rrf_mod_output, tf_idf_rrf_combined_output, zero_shot_output, ] ) return interface if __name__ == "__main__": create_interface().launch()