g0th commited on
Commit
037e271
Β·
verified Β·
1 Parent(s): 7eabc4f

Delete app.py

Browse files
Files changed (1) hide show
  1. app.py +0 -87
app.py DELETED
@@ -1,87 +0,0 @@
1
- import gradio as gr
2
- import google.generativeai as genai
3
- from transformers import pipeline
4
- import json
5
- from tempfile import NamedTemporaryFile
6
- from app import transfer_to_structure # from your pptx-parser
7
-
8
- # βœ… Use your Gemini API Key
9
- GOOGLE_API_KEY = "AIzaSyA8fWpwJE21zxpuN8Fi8Qx9-iwx3d_AZiw"
10
- genai.configure(api_key=GOOGLE_API_KEY)
11
-
12
- # βœ… Load Summarization Model
13
- summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
14
- gemini_model = genai.GenerativeModel("models/gemini-1.5-flash")
15
-
16
- # βœ… Global text storage
17
- extracted_text = ""
18
-
19
- # βœ… Function to flatten PPTX-parsed JSON into readable text
20
- def extract_text_from_pptx_json(parsed_json: dict) -> str:
21
- extracted_text = ""
22
- for slide_key, slide in parsed_json.items():
23
- for shape_key, shape in slide.items():
24
- if shape.get('type') == 'group':
25
- group = shape.get('group_content', {})
26
- for _, group_shape in group.items():
27
- if group_shape.get('type') == 'text':
28
- for para_key, para in group_shape.items():
29
- if para_key.startswith("paragraph_"):
30
- extracted_text += para.get("text", "") + "\n"
31
- elif shape.get('type') == 'text':
32
- for para_key, para in shape.items():
33
- if para_key.startswith("paragraph_"):
34
- extracted_text += para.get("text", "") + "\n"
35
- return extracted_text.strip()
36
-
37
- # βœ… Handler for file upload & parsing
38
- def handle_pptx_upload(pptx_file):
39
- global extracted_text
40
- with NamedTemporaryFile(delete=False, suffix=".pptx") as tmp:
41
- tmp.write(pptx_file.read())
42
- tmp_path = tmp.name
43
-
44
- parsed_json_str, _, _ = transfer_to_structure(tmp_path, "images")
45
- parsed_json = json.loads(parsed_json_str)
46
- extracted_text = extract_text_from_pptx_json(parsed_json)
47
- return extracted_text or "No readable text found in slides."
48
-
49
- # βœ… Summarization function
50
- def summarize_text():
51
- global extracted_text
52
- if not extracted_text:
53
- return "Please upload and extract text from a PPTX file first."
54
- summary = summarizer(extracted_text, max_length=200, min_length=50, do_sample=False)[0]['summary_text']
55
- return summary
56
-
57
- # βœ… Gemini-powered Q&A
58
- def clarify_concept(question):
59
- global extracted_text
60
- if not extracted_text:
61
- return "Please upload and extract text from a PPTX file first."
62
- prompt = f"Context:\n{extracted_text}\n\nQuestion: {question}"
63
- response = gemini_model.generate_content(prompt)
64
- return response.text if response else "No response from Gemini."
65
-
66
- # βœ… Gradio UI
67
- with gr.Blocks() as demo:
68
- gr.Markdown("## 🧠 AI-Powered Study Assistant for PowerPoint Lectures")
69
-
70
- pptx_input = gr.File(label="πŸ“‚ Upload PPTX File")
71
- extract_btn = gr.Button("πŸ“œ Extract & Summarize")
72
-
73
- extracted_output = gr.Textbox(label="πŸ“„ Extracted Text", lines=10, interactive=False)
74
- summary_output = gr.Textbox(label="πŸ“ Summary", interactive=False)
75
-
76
- extract_btn.click(handle_pptx_upload, inputs=[pptx_input], outputs=[extracted_output])
77
- extract_btn.click(summarize_text, outputs=[summary_output])
78
-
79
- question = gr.Textbox(label="❓ Ask a Question")
80
- ask_btn = gr.Button("πŸ’¬ Ask Gemini")
81
- ai_answer = gr.Textbox(label="πŸ€– Gemini Answer", lines=4)
82
-
83
- ask_btn.click(clarify_concept, inputs=[question], outputs=[ai_answer])
84
-
85
- # βœ… Run Gradio app
86
- if __name__ == "__main__":
87
- demo.launch(server_name="0.0.0.0", server_port=7860, share=True)