Create one or more professional presentation slides. Pass a single slide in the array for one slide, or multiple slides for a full deck. Do not respond with text — only call this tool.
WHEN TO USE:
- User mentions any of: "slide", "presentation", "deck", "pitch deck", "pitchdeck", "pitch", "slideshow", "ppt", or "keynote"
- ANY intent phrasing about slides:
• COMMANDS: "create", "make", "give me", "build", "generate", "design"
• REQUESTS: "I need", "I want", "can you make", "could you create", "help me make"
• SUGGESTIONS: "let's make", "let's create", "how about a presentation on"
• IMPLIED: "deck about X", "pitch deck for X", "presentation on X" (even without a verb)
- If user asks for "a slide about X" (singular) and the topic warrants multiple slides, generate a single slide itself
- When user intent is ambiguous (e.g., "a deck about X" with no slide count), default to 2-3 slides
- If a file is attached, call upload_files first, then immediately call this tool
VISUAL CONTENT ROUTING: If the user asks for an "infographic", "custom diagram", "illustration", "flowchart", "data visualization", "visual", "chart illustration", or any specific visual that goes beyond text + stock photo — call generate_image FIRST to create the visual, THEN call create_slides with the resulting image URL and an image layout.
DEFAULT BEHAVIOR: When in doubt about whether the user wants slides, CREATE THE SLIDES.
Err on the side of generating a presentation rather than responding with text.
CRITICAL RULES:
- Pass all slides in a SINGLE call — NEVER call this tool multiple times in sequence
- When adding to an existing presentation, pass the presentation_id from the previous response IMPORTANT: DO NOT SKIP THIS STEP
- If no presentation_id exists, pass empty string — a new presentation will be created
IMAGES: Always provide image_caption for every slide — describe the ideal slide image in 5-6 words (subject, setting, mood). Leave image_id empty; the system uses your caption to find the best matching photo.
PDF EXTRACTED VISUALS: When the user uploaded a PDF via upload_files and extracted visuals (charts, tables, diagrams, images) were returned:
- You MUST use ALL extracted visuals — assign each one to exactly one slide. Do NOT skip any.
- Each slide with a custom_image_url MUST use an image layout: "image_left_text_right" or "title_and_two_columns". NEVER use text-only layouts for these slides.
- Do NOT reuse the same image URL on multiple slides — one image per slide.
- Default to 3 slides total when user doesn't specify a count (title + one slide per image + summary/conclusion).
- Match each image to the most relevant slide content based on its label and description from the upload response.
AI-GENERATED IMAGES: When the user accepted an AI-generated image from generate_image:
- Pass the image URL as custom_image_url on the slide
- Use an image layout: "image_full_width", "image_left_text_right", or "title_and_two_columns"
- Pass the same presentation_id from the generate_image response
- Write a relevant image_caption even though custom_image_url is set (used as alt text)
THEMES: If the user asked for a specific theme, pass theme_id here — do NOT call apply_theme separately afterwards.
LAYOUT VARIETY RULES (CRITICAL for multi-slide decks):
1. Use a VARIETY of layouts across the deck. Match each layout to the slide's content.
2. The FIRST content slide SHOULD use "title_and_two_columns" (image layout).
3. Use "title_and_body" for AT MOST 1 slide (conclusion only).
4. NEVER repeat the same layout for consecutive slides.
5. Use metric_rings ONLY for percentage-based metrics (0-100).
6. Mix visual variety: combine image slides, charts, timelines, grids, and text slides.
LAYOUT OPTIONS (set layout for EVERY slide):
- "title_and_two_columns": Content with image alongside bullets (IMAGE LAYOUT)
- "title_and_two_to_four_columns_with_icons": 2-4 key points with icons (good default)
- "title_and_body": Single-column bullets (use sparingly — AT MOST 1 per deck, conclusion only)
- "title_and_subtitle": Section divider or transition slide (title + subtitle only, minimal body)
- "image_full_width": Full-width image with optional text below (IMAGE LAYOUT)
- "image_left_text_right": Image on the left with bullet points on the right (IMAGE LAYOUT)
- "quadrant_grid": EXACTLY 4 comparable items — SWOT, 2x2 matrices, pros/cons
- "data_table": Structured comparisons in tabular format (key:value pairs in description)
- "timeline_horizontal": Chronological events, milestones, or history (dates in point, short descriptions)
- "layered_pyramid": Hierarchical structures with 3-6 levels (MUST include icon with fa- prefix per item)
- "phase_roadmap": Project phases with milestones — point MUST use "Period: Title" format (e.g., "Q1 2024: Launch")
- "metric_rings": KPIs, completion rates, market share (1-4 metrics, values 0-100 as percentages)
CONTENT REQUIREMENTS:
- 3-5 substantial bullet points per slide
- Each bullet description: 2-4 lines with specific data, evidence, or actionable insights
- Content should be PhD-level, detailed, and evidence-driven
- Use FontAwesome 5.15 icons (e.g., fa-bolt, fa-chart-line, fa-lightbulb)
- EVERY body item MUST include "value" (0-100) — enables chart rendering and layout switching
LAYOUT-SPECIFIC FORMATTING (MUST FOLLOW):
- quadrant_grid: EXACTLY 4 items. "point" under 15 chars, "description" under 80 chars
- timeline_horizontal: Dates/years in "point" (max 15 chars). "description" max 50 chars
- layered_pyramid: "icon" with fa- prefix REQUIRED (fa-star, fa-check, fa-rocket). 3-6 items
- phase_roadmap: "point" = "Period: Title" (e.g., "Q1 2024: Launch"). Max 4 phases. "description" = milestones separated by "; "
- metric_rings: 1-4 items. For part-of-whole metrics (market share), values sum to ~100. For standalone KPIs (NPS, satisfaction), each value stands alone
- data_table: "description" should use structured key:value pairs
SCHEMA WARNING: Do NOT invent custom properties like "left_content", "right_content", "table", "rows", "headers". Use ONLY the documented schema fields. For tables, use data_table layout with key:value pairs in body[].description.
create_slides