Spaces:
Sleeping
Sleeping
import torch | |
import gradio as gr | |
from transformers import T5Tokenizer, T5ForConditionalGeneration | |
# Set device | |
device = "mps" if torch.backends.mps.is_available() else "cuda" if torch.cuda.is_available() else "cpu" | |
# Load model and tokenizer | |
model_path = "thenHung/question_decomposer_t5" | |
tokenizer = T5Tokenizer.from_pretrained(model_path) | |
model = T5ForConditionalGeneration.from_pretrained(model_path) | |
model.to(device) | |
model.eval() | |
def decompose_question(question): | |
""" | |
Decompose a complex question into sub-questions | |
Args: | |
question (str): Input complex question | |
Returns: | |
list: List of decomposed sub-questions | |
""" | |
try: | |
# Prepare input | |
input_text = f"decompose question: {question}" | |
input_ids = tokenizer( | |
input_text, | |
max_length=128, | |
padding="max_length", | |
truncation=True, | |
return_tensors="pt" | |
).input_ids.to(device) | |
# Generate sub-questions | |
with torch.no_grad(): | |
outputs = model.generate( | |
input_ids, | |
max_length=128, | |
num_beams=4, | |
early_stopping=True | |
) | |
# Decode and split output | |
decoded_output = tokenizer.decode(outputs[0], skip_special_tokens=True) | |
sub_questions = decoded_output.split(" [SEP] ") | |
return sub_questions | |
except Exception as e: | |
return [f"Error: {str(e)}"] | |
# Create Gradio interface | |
demo = gr.Interface( | |
fn=decompose_question, | |
inputs=gr.Textbox(label="Enter your complex question"), | |
outputs=gr.JSON(label="Decomposed Sub-Questions"), | |
title="Question Decomposer", | |
description="Breaks down complex questions into simpler sub-questions using a T5 model", | |
examples=[ | |
"Who is taller between John and Mary?", | |
"What is the capital of Vietnam and the largest city in Vietnam?", | |
] | |
) | |
# Launch the app | |
if __name__ == "__main__": | |
demo.launch() |