antiquesordo's picture
Update app.py
2d7a9ed verified
import gradio as gr
from transformers import AutoTokenizer, AutoModelForCausalLM
from pptx import Presentation
from pptx.util import Inches
import subprocess
import os
# Specify the DeepSeek model name
DEEPSEEK_MODEL_NAME = "deepseek-ai/deepseek-llm-67b-chat" # Replace with the correct model name
# Initialize tokenizer and model globally
try:
tokenizer = AutoTokenizer.from_pretrained(DEEPSEEK_MODEL_NAME, padding_side='left')
model = AutoModelForCausalLM.from_pretrained(DEEPSEEK_MODEL_NAME)
except Exception as e:
print(f"Error loading model: {e}")
# Content Generation Function using DeepSeek
def generate_content(prompt):
if not tokenizer or not model:
return "Model not loaded properly."
inputs = tokenizer.encode(prompt + tokenizer.eos_token, return_tensors='pt')
outputs = model.generate(inputs, max_length=200, do_sample=True, temperature=0.7)
text = tokenizer.decode(outputs[0], skip_special_tokens=True)
return text
# Generate Slide Titles and Content from Description
def generate_slides_from_description(title, subtitle, description):
if not description:
return []
# Generate slide titles
slide_titles_prompt = f"Generate 3 slide titles for a presentation titled '{title}' about '{description}'. Return the titles as a comma-separated list."
slide_titles = generate_content(slide_titles_prompt).split(",")
# Generate slide content for each title
slides = []
for title_slide in slide_titles:
content_prompt = f"Generate detailed content for a slide titled '{title_slide.strip()}' about '{description}'."
content = generate_content(content_prompt)
slides.append({"title": title_slide.strip(), "content": content.strip()})
return slides
# Slide Design Function
def create_presentation(title, subtitle, slides, output_dir):
prs = Presentation()
# Create title slide
title_slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(title_slide_layout)
slide.shapes.title.text = title
slide.placeholders[1].text = subtitle
# Create content slides
for slide_data in slides:
content_slide_layout = prs.slide_layouts[1]
slide = prs.slides.add_slide(content_slide_layout)
slide.shapes.title.text = slide_data["title"]
slide.placeholders[1].text = slide_data["content"]
output_file = os.path.join(output_dir, "output.pptx")
prs.save(output_file)
return output_file
# Output Conversion Function
def convert_to_pdf(pptx_file, pdf_file):
try:
subprocess.run(['soffice', '--headless', '--convert-to', 'pdf', pptx_file, '--outdir', os.path.dirname(pdf_file)])
except Exception as e:
print(f"Error converting to PDF: {e}")
# Main Function
def main(title, subtitle, description):
if not title or not description:
return "Please provide a title and description.", "Please provide a title and description."
# Generate slides from description
slides = generate_slides_from_description(title, subtitle, description)
if not slides:
return "No slides generated.", "No slides generated."
# Create presentation
output_dir = os.getcwd()
pptx_file = create_presentation(title, subtitle, slides, output_dir)
# Convert to PDF
pdf_file = os.path.join(output_dir, "output.pdf")
convert_to_pdf(pptx_file, pdf_file)
# Return file paths for download
return pptx_file, pdf_file
# Gradio Interface
with gr.Blocks() as demo:
gr.Markdown("# Presentation Generator with DeepSeek")
title = gr.Textbox(label="Presentation Title", placeholder="Enter the title of your presentation")
subtitle = gr.Textbox(label="Subtitle", placeholder="Enter a subtitle (optional)")
description = gr.Textbox(label="Presentation Description", placeholder="Describe the purpose and content of your presentation")
generate_button = gr.Button("Generate Presentation")
output_pptx = gr.File(label="Download PPTX")
output_pdf = gr.File(label="Download PDF")
generate_button.click(
main,
inputs=[title, subtitle, description],
outputs=[output_pptx, output_pdf]
)
demo.launch()