usmanayaz commited on
Commit
2ed91ba
·
verified ·
1 Parent(s): d2bb1b4

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +59 -0
app.py ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from transformers import pipeline, AutoModelForSeq2SeqLM, AutoTokenizer
3
+ import coqui_tts
4
+ from tempfile import NamedTemporaryFile
5
+
6
+ # Initialize models
7
+ @st.cache_resource
8
+ def load_models():
9
+ summarizer_model = AutoModelForSeq2SeqLM.from_pretrained("google/flan-t5-base")
10
+ summarizer_tokenizer = AutoTokenizer.from_pretrained("google/flan-t5-base")
11
+ question_generator = pipeline("text2text-generation", model="valhalla/t5-small-qg-hl")
12
+ qa_model = pipeline("question-answering", model="deepset/roberta-base-squad2")
13
+ tts = coqui_tts.TTS("tts_models/en/ljspeech/glow-tts") # Load voice model
14
+ return summarizer_model, summarizer_tokenizer, question_generator, qa_model, tts
15
+
16
+ summarizer_model, summarizer_tokenizer, question_generator, qa_model, tts = load_models()
17
+
18
+ def summarize_document(text):
19
+ input_ids = summarizer_tokenizer.encode(text, return_tensors="pt", max_length=512, truncation=True)
20
+ summary_ids = summarizer_model.generate(input_ids, max_length=150, min_length=30, length_penalty=2.0, num_beams=4, early_stopping=True)
21
+ return summarizer_tokenizer.decode(summary_ids[0], skip_special_tokens=True)
22
+
23
+ def generate_questions(summary):
24
+ return question_generator(summary)
25
+
26
+ def generate_audio(text, voice_gender):
27
+ tts.voice = "male" if voice_gender == "male" else "female"
28
+ audio_file = NamedTemporaryFile(delete=False, suffix=".wav")
29
+ tts.tts_to_file(text=text, file_path=audio_file.name)
30
+ return audio_file.name
31
+
32
+ def app():
33
+ st.title("Interactive Document Summarizer")
34
+ uploaded_file = st.file_uploader("Upload a document", type=["txt", "pdf", "docx"])
35
+ if uploaded_file:
36
+ raw_text = uploaded_file.read().decode("utf-8")
37
+ st.write("Processing document...")
38
+
39
+ # Summarize
40
+ summary = summarize_document(raw_text)
41
+ st.write("Summary Generated:")
42
+ st.write(summary)
43
+
44
+ # Generate dialogue
45
+ questions = generate_questions(summary)
46
+ dialogue = [{"persona": "male", "text": q["generated_text"]} for q in questions]
47
+ for idx, item in enumerate(dialogue):
48
+ if idx % 2 == 1:
49
+ dialogue[idx]["persona"] = "female"
50
+
51
+ # Interactive simulation
52
+ st.write("Simulating Conversation:")
53
+ for item in dialogue:
54
+ st.write(f"{item['persona'].capitalize()} says: {item['text']}")
55
+ audio_path = generate_audio(item["text"], item["persona"])
56
+ st.audio(audio_path, format="audio/wav")
57
+
58
+ if __name__ == "__main__":
59
+ app()