Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import torch | |
| from transformers import BertTokenizerFast, BertForQuestionAnswering, pipeline | |
| import torch.nn.functional as F | |
| import speech_recognition as sr | |
| # Load QA Model | |
| tokenizer = BertTokenizerFast.from_pretrained("bert-base-uncased") | |
| model = BertForQuestionAnswering.from_pretrained("bert-base-uncased") | |
| model.load_state_dict(torch.load("lexpilot_trained_model.pt", map_location=torch.device("cpu"))) | |
| model.eval() | |
| # Load Summarizer | |
| summarizer = pipeline("summarization", model="facebook/bart-large-cnn") | |
| def answer_with_confidence(question, context): | |
| inputs = tokenizer.encode_plus(question, context, return_tensors="pt") | |
| with torch.no_grad(): | |
| outputs = model(**inputs) | |
| start_logits = outputs.start_logits | |
| end_logits = outputs.end_logits | |
| start_probs = F.softmax(start_logits, dim=1) | |
| end_probs = F.softmax(end_logits, dim=1) | |
| start = torch.argmax(start_probs) | |
| end = torch.argmax(end_probs) + 1 | |
| confidence = (start_probs[0][start] * end_probs[0][end - 1]).item() | |
| tokens = inputs["input_ids"][0][start:end] | |
| answer = tokenizer.decode(tokens) | |
| return answer.strip(), round(confidence, 2) | |
| def summarize_text(text): | |
| summary = summarizer(text, max_length=100, min_length=30, do_sample=False) | |
| return summary[0]["summary_text"] | |
| def voice_to_text(audio): | |
| recognizer = sr.Recognizer() | |
| with sr.AudioFile(audio) as source: | |
| audio_data = recognizer.record(source) | |
| try: | |
| return recognizer.recognize_google(audio_data) | |
| except Exception as e: | |
| return f"Error: {str(e)}" | |
| def qa_interface(context, question): | |
| answer, confidence = answer_with_confidence(question, context) | |
| summary = summarize_text(context) | |
| return answer, confidence, summary | |
| with gr.Blocks() as app: | |
| gr.Markdown("## π€ LexPilot: QA + Summarization + Voice Input") | |
| with gr.Row(): | |
| context_input = gr.Textbox(lines=6, label="π Context") | |
| question_input = gr.Textbox(lines=1, label="β Question") | |
| with gr.Row(): | |
| answer_output = gr.Textbox(label="π§ Answer") | |
| confidence_output = gr.Number(label="π Confidence") | |
| summary_output = gr.Textbox(label="π Summary") | |
| with gr.Row(): | |
| submit_btn = gr.Button("π Get Answer & Summary") | |
| audio_input = gr.Audio(type="filepath", label="ποΈ Upload Voice Question") | |
| submit_btn.click(fn=qa_interface, inputs=[context_input, question_input], | |
| outputs=[answer_output, confidence_output, summary_output]) | |
| audio_input.change(fn=voice_to_text, inputs=audio_input, outputs=question_input) | |
| app.launch() | |