|
import gradio as gr |
|
import json |
|
|
|
|
|
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 |
|
|
|
|
|
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): |
|
|
|
modified_query = query_Modifier(query) |
|
|
|
|
|
article = generate_article_from_query(query) |
|
|
|
|
|
keywords = getKeywords(query) |
|
wiki_data = get_wiki_data(keywords) |
|
|
|
|
|
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) |
|
|
|
|
|
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) |
|
|
|
|
|
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_modified = 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]] |
|
|
|
|
|
|
|
|
|
|
|
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_modified) |
|
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) |
|
|
|
|
|
|
|
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) |
|
|
|
|
|
|
|
return ( |
|
best_model, |
|
best_answer, |
|
agent1_answer, agent1_context, |
|
agent2_answer, agent2_context, |
|
boolean_answer, boolean_context, |
|
tf_idf_answer, tf_idf_context, |
|
bm25_answer, bm25_context, |
|
vision_answer, vision_context, |
|
open_source_answer, open_source_context, |
|
boolean_answer_modified, boolean_context_modified, |
|
tf_idf_answer_modified, tf_idf_context_modified, |
|
bm25_answer_modified, bm25_context_modified, |
|
vision_answer_modified, vision_context_modified, |
|
open_source_answer_modified, open_source_context_modified, |
|
tf_idf_bm25_open_RRF_Ranking_answer, tf_idf_bm25_open_RRF_Ranking_context, |
|
tf_idf_bm25_open_RRF_Ranking_modified_answer, tf_idf_bm25_open_RRF_Ranking_modified_context, |
|
tf_idf_bm25_open_RRF_Ranking_combined_answer, tf_idf_bm25_open_RRF_Ranking_combined_context, |
|
zeroShot, "Zero-shot doesn't have a context." |
|
) |
|
|
|
|
|
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("---") |
|
gr.Markdown("## All Answers and Contexts") |
|
|
|
def create_answer_row(label, context): |
|
with gr.Row(): |
|
answer_textbox = gr.Textbox(label=f"{label} Answer", interactive=False).style(container=True) |
|
context_button = gr.Button(f"Show {label} Context") |
|
context_textbox = gr.Textbox(label=f"{label} Context", visible=False).style(container=True) |
|
|
|
context_button.click( |
|
fn=lambda: gr.update(visible=True, value=context), |
|
inputs=[], |
|
outputs=context_textbox, |
|
) |
|
return answer_textbox, context_textbox |
|
|
|
|
|
with gr.Row(): |
|
agent1_output, agent1_context_box = create_answer_row("Agent 1", agent1_context) |
|
agent2_output, agent2_context_box = create_answer_row("Agent 2", agent_text_context) |
|
boolean_output, boolean_context_box = create_answer_row("Boolean", boolean_context) |
|
tf_idf_output, tf_idf_context_box = create_answer_row("TF-IDF", tf_idf_context) |
|
bm25_output, bm25_context_box = create_answer_row("BM25", bm25_context) |
|
vision_output, vision_context_box = create_answer_row("Vision", vision_context) |
|
open_source_output, open_source_context_box = create_answer_row("Open Source", open_source_context) |
|
|
|
with gr.Row(): |
|
boolean_mod_output, boolean_mod_context_box = create_answer_row("Boolean (Modified)", boolean_context_modified) |
|
tf_idf_mod_output, tf_idf_mod_context_box = create_answer_row("TF-IDF (Modified)", tf_idf_context_modified) |
|
bm25_mod_output, bm25_mod_context_box = create_answer_row("BM25 (Modified)", bm25_context_modified) |
|
vision_mod_output, vision_mod_context_box = create_answer_row("Vision (Modified)", vision_context_modified) |
|
open_source_mod_output, open_source_mod_context_box = create_answer_row("Open Source (Modified)", open_source_context_modified) |
|
|
|
with gr.Row(): |
|
tf_idf_rrf_output, tf_idf_rrf_context_box = create_answer_row("TF-IDF + BM25 + Open RRF", tf_idf_bm25_open_RRF_Ranking_context) |
|
tf_idf_rrf_mod_output, tf_idf_rrf_mod_context_box = create_answer_row("TF-IDF + BM25 + Open RRF (Modified)", tf_idf_bm25_open_RRF_Ranking_modified_context) |
|
tf_idf_rrf_combined_output, tf_idf_rrf_combined_context_box = create_answer_row("TF-IDF + BM25 + Open RRF (Combined)", tf_idf_bm25_open_RRF_Ranking_combined_context) |
|
|
|
with gr.Row(): |
|
zero_shot_output, zero_shot_context_box = create_answer_row("Zero Shot", "Zero-shot doesn't have a context.") |
|
|
|
gr.Button("Submit").click( |
|
fn=process_query, |
|
inputs=query_input, |
|
outputs=[ |
|
best_model_output, |
|
best_answer_output, |
|
agent1_output, agent1_context_box, |
|
agent2_output, agent2_context_box, |
|
boolean_output, boolean_context_box, |
|
tf_idf_output, tf_idf_context_box, |
|
bm25_output, bm25_context_box, |
|
vision_output, vision_context_box, |
|
open_source_output, open_source_context_box, |
|
boolean_mod_output, boolean_mod_context_box, |
|
tf_idf_mod_output, tf_idf_mod_context_box, |
|
bm25_mod_output, bm25_mod_context_box, |
|
vision_mod_output, vision_mod_context_box, |
|
open_source_mod_output, open_source_context_box, |
|
tf_idf_rrf_output, tf_idf_rrf_context_box, |
|
tf_idf_rrf_mod_output, tf_idf_rrf_mod_context_box, |
|
tf_idf_rrf_combined_output, tf_idf_rrf_combined_context_box, |
|
zero_shot_output, zero_shot_context_box, |
|
] |
|
) |
|
|
|
return interface |
|
|
|
if __name__ == "__main__": |
|
create_interface().launch() |
|
|