File size: 4,168 Bytes
67a7445
323924b
 
 
 
 
67a7445
2d7a9ed
 
 
 
 
 
 
 
 
 
 
323924b
2d7a9ed
 
323924b
2d7a9ed
323924b
 
 
2d7a9ed
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67a7445
2d7a9ed
323924b
2d7a9ed
 
 
 
 
 
 
 
 
 
 
 
323924b
2d7a9ed
323924b
67a7445
323924b
2d7a9ed
 
 
 
323924b
67a7445
2d7a9ed
 
 
 
 
 
 
 
 
 
 
 
67a7445
2d7a9ed
67a7445
 
 
 
2d7a9ed
 
 
 
67a7445
 
 
 
 
 
2d7a9ed
67a7445
 
323924b
67a7445
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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()