Spaces:
Sleeping
Sleeping
| """ | |
| Business Value PowerPoint Deck Generator | |
| ========================================= | |
| Creates a concise, non-technical business presentation explaining | |
| the Multi-Agent Market Simulator and its RL-based value proposition. | |
| """ | |
| from pptx import Presentation | |
| from pptx.util import Inches, Pt, Emu | |
| from pptx.dml.color import RGBColor | |
| from pptx.enum.text import PP_ALIGN, MSO_ANCHOR | |
| from pptx.enum.shapes import MSO_SHAPE | |
| import os | |
| # ── Brand Colors ────────────────────────────────────────────── | |
| NAVY = RGBColor(0x0B, 0x1D, 0x3A) # Dark navy background | |
| WHITE = RGBColor(0xFF, 0xFF, 0xFF) | |
| GOLD = RGBColor(0xFF, 0xB8, 0x00) # Accent / highlights | |
| LIGHT_BLUE = RGBColor(0x4A, 0x9E, 0xD9) # Secondary accent | |
| GRAY = RGBColor(0x8C, 0x8C, 0x8C) | |
| LIGHT_GRAY = RGBColor(0xE8, 0xE8, 0xE8) | |
| GREEN = RGBColor(0x2E, 0xCC, 0x71) | |
| RED_ACCENT = RGBColor(0xE7, 0x4C, 0x3C) | |
| DARK_BG = RGBColor(0x10, 0x25, 0x45) | |
| SOFT_BG = RGBColor(0xF5, 0xF7, 0xFA) | |
| prs = Presentation() | |
| prs.slide_width = Inches(13.333) | |
| prs.slide_height = Inches(7.5) | |
| W = prs.slide_width | |
| H = prs.slide_height | |
| # ── Helper Functions ────────────────────────────────────────── | |
| def add_bg(slide, color=NAVY): | |
| """Fill entire slide with a solid color.""" | |
| bg = slide.background | |
| fill = bg.fill | |
| fill.solid() | |
| fill.fore_color.rgb = color | |
| def add_shape_bg(slide, left, top, width, height, color, alpha=None): | |
| """Add a filled rectangle shape.""" | |
| shape = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, left, top, width, height) | |
| shape.fill.solid() | |
| shape.fill.fore_color.rgb = color | |
| shape.line.fill.background() | |
| if alpha is not None: | |
| shape.fill.fore_color.brightness = alpha | |
| return shape | |
| def add_text(slide, left, top, width, height, text, font_size=18, | |
| color=WHITE, bold=False, alignment=PP_ALIGN.LEFT, | |
| font_name="Calibri"): | |
| """Add a text box to the slide.""" | |
| txBox = slide.shapes.add_textbox(left, top, width, height) | |
| tf = txBox.text_frame | |
| tf.word_wrap = True | |
| p = tf.paragraphs[0] | |
| p.text = text | |
| p.font.size = Pt(font_size) | |
| p.font.color.rgb = color | |
| p.font.bold = bold | |
| p.font.name = font_name | |
| p.alignment = alignment | |
| return tf | |
| def add_paragraph(tf, text, font_size=18, color=WHITE, bold=False, | |
| alignment=PP_ALIGN.LEFT, space_before=Pt(6), | |
| font_name="Calibri"): | |
| """Add another paragraph to an existing text frame.""" | |
| p = tf.add_paragraph() | |
| p.text = text | |
| p.font.size = Pt(font_size) | |
| p.font.color.rgb = color | |
| p.font.bold = bold | |
| p.font.name = font_name | |
| p.alignment = alignment | |
| if space_before: | |
| p.space_before = space_before | |
| return p | |
| def add_circle_number(slide, left, top, number, size=Inches(0.5), color=GOLD): | |
| """Add a numbered circle indicator.""" | |
| shape = slide.shapes.add_shape(MSO_SHAPE.OVAL, left, top, size, size) | |
| shape.fill.solid() | |
| shape.fill.fore_color.rgb = color | |
| shape.line.fill.background() | |
| tf = shape.text_frame | |
| tf.word_wrap = False | |
| p = tf.paragraphs[0] | |
| p.text = str(number) | |
| p.font.size = Pt(14) | |
| p.font.color.rgb = NAVY | |
| p.font.bold = True | |
| p.font.name = "Calibri" | |
| p.alignment = PP_ALIGN.CENTER | |
| tf.paragraphs[0].space_before = Pt(0) | |
| tf.paragraphs[0].space_after = Pt(0) | |
| def add_icon_card(slide, left, top, width, height, icon_text, title, body, | |
| card_color=DARK_BG, icon_color=GOLD): | |
| """Add a card with icon, title and body text.""" | |
| card = add_shape_bg(slide, left, top, width, height, card_color) | |
| card.shadow.inherit = False | |
| # Icon circle | |
| icon_size = Inches(0.6) | |
| icon_left = left + (width - icon_size) // 2 | |
| icon = slide.shapes.add_shape(MSO_SHAPE.OVAL, icon_left, top + Inches(0.3), | |
| icon_size, icon_size) | |
| icon.fill.solid() | |
| icon.fill.fore_color.rgb = icon_color | |
| icon.line.fill.background() | |
| itf = icon.text_frame | |
| itf.paragraphs[0].text = icon_text | |
| itf.paragraphs[0].font.size = Pt(20) | |
| itf.paragraphs[0].font.color.rgb = NAVY | |
| itf.paragraphs[0].font.bold = True | |
| itf.paragraphs[0].alignment = PP_ALIGN.CENTER | |
| # Title | |
| add_text(slide, left + Inches(0.2), top + Inches(1.1), | |
| width - Inches(0.4), Inches(0.4), | |
| title, font_size=16, color=WHITE, bold=True, | |
| alignment=PP_ALIGN.CENTER) | |
| # Body | |
| add_text(slide, left + Inches(0.25), top + Inches(1.55), | |
| width - Inches(0.5), height - Inches(1.8), | |
| body, font_size=12, color=LIGHT_GRAY, | |
| alignment=PP_ALIGN.CENTER) | |
| # ===================================================================== | |
| # SLIDE 1: TITLE SLIDE | |
| # ===================================================================== | |
| slide1 = prs.slides.add_slide(prs.slide_layouts[6]) # Blank | |
| add_bg(slide1, NAVY) | |
| # Accent bar at top | |
| add_shape_bg(slide1, 0, 0, W, Inches(0.08), GOLD) | |
| # Main title | |
| add_text(slide1, Inches(1.5), Inches(1.8), Inches(10), Inches(1.2), | |
| "AI-Powered Market Intelligence", font_size=44, color=WHITE, | |
| bold=True, alignment=PP_ALIGN.CENTER) | |
| # Subtitle | |
| add_text(slide1, Inches(1.5), Inches(3.0), Inches(10), Inches(0.8), | |
| "How Smart Agents Learn to Trade, Negotiate & Win", | |
| font_size=24, color=GOLD, bold=False, alignment=PP_ALIGN.CENTER) | |
| # Divider line | |
| add_shape_bg(slide1, Inches(5.5), Inches(4.0), Inches(2.3), Inches(0.04), GOLD) | |
| # Description | |
| add_text(slide1, Inches(2), Inches(4.4), Inches(9), Inches(1.0), | |
| "A reinforcement learning platform that trains AI agents to make\n" | |
| "better trading decisions — reducing costs, increasing margins,\n" | |
| "and discovering strategies humans might miss.", | |
| font_size=16, color=LIGHT_GRAY, alignment=PP_ALIGN.CENTER) | |
| # Footer | |
| add_text(slide1, Inches(1), Inches(6.5), Inches(11), Inches(0.5), | |
| "MarketForge | OpenEnv Hackathon 2025", | |
| font_size=13, color=GRAY, alignment=PP_ALIGN.CENTER) | |
| # ===================================================================== | |
| # SLIDE 2: THE BUSINESS PROBLEM | |
| # ===================================================================== | |
| slide2 = prs.slides.add_slide(prs.slide_layouts[6]) | |
| add_bg(slide2, NAVY) | |
| add_shape_bg(slide2, 0, 0, W, Inches(0.08), GOLD) | |
| # Title | |
| add_text(slide2, Inches(0.8), Inches(0.4), Inches(11), Inches(0.8), | |
| "The Business Problem", font_size=36, color=WHITE, bold=True) | |
| # Subtitle | |
| add_text(slide2, Inches(0.8), Inches(1.1), Inches(11), Inches(0.5), | |
| "Traditional trading and procurement decisions leave money on the table", | |
| font_size=16, color=GOLD) | |
| # Problem cards | |
| problems = [ | |
| ("$", "Pricing Guesswork", | |
| "Companies set prices based on gut\n" | |
| "feel, spreadsheets, or last quarter's\n" | |
| "data — missing real-time market\n" | |
| "signals that affect margins."), | |
| ("!", "Slow Negotiations", | |
| "Deal-making with suppliers and\n" | |
| "buyers takes weeks of back-and-\n" | |
| "forth. Every delay costs money\n" | |
| "and opportunities slip away."), | |
| ("?", "Blind Spots", | |
| "Market disruptions — supply\n" | |
| "shortages, demand spikes, new\n" | |
| "competitors — catch teams off\n" | |
| "guard with no playbook."), | |
| ("#", "Missed Partnerships", | |
| "Companies compete when they\n" | |
| "should cooperate. They miss\n" | |
| "joint ventures and supply chain\n" | |
| "alliances that boost both sides."), | |
| ] | |
| card_w = Inches(2.7) | |
| card_h = Inches(3.2) | |
| start_x = Inches(0.6) | |
| gap = Inches(0.35) | |
| for i, (icon, title, body) in enumerate(problems): | |
| x = start_x + i * (card_w + gap) | |
| add_icon_card(slide2, x, Inches(2.0), card_w, card_h, | |
| icon, title, body) | |
| # Bottom insight | |
| add_text(slide2, Inches(0.8), Inches(5.6), Inches(11.5), Inches(0.8), | |
| "Result: Companies lose 5-15% of potential margin due to suboptimal\n" | |
| "trading decisions, slow reactions, and missed collaboration opportunities.", | |
| font_size=15, color=LIGHT_GRAY, alignment=PP_ALIGN.CENTER) | |
| # ===================================================================== | |
| # SLIDE 3: OUR SOLUTION — THE AI MARKET SIMULATOR | |
| # ===================================================================== | |
| slide3 = prs.slides.add_slide(prs.slide_layouts[6]) | |
| add_bg(slide3, NAVY) | |
| add_shape_bg(slide3, 0, 0, W, Inches(0.08), GOLD) | |
| add_text(slide3, Inches(0.8), Inches(0.4), Inches(11), Inches(0.8), | |
| "The Solution: AI Agents That Learn to Win", font_size=36, | |
| color=WHITE, bold=True) | |
| add_text(slide3, Inches(0.8), Inches(1.1), Inches(11), Inches(0.5), | |
| "A virtual marketplace where AI agents practice and master trading strategies", | |
| font_size=16, color=GOLD) | |
| # How it works — 3 step visual | |
| steps = [ | |
| ("1", "Build the Market", | |
| "We create a realistic virtual\n" | |
| "marketplace with real commodity\n" | |
| "prices, supply/demand dynamics,\n" | |
| "and market disruptions — just\n" | |
| "like the real world."), | |
| ("2", "Train AI Agents", | |
| "AI agents enter the market and\n" | |
| "learn by doing — thousands of\n" | |
| "trades, negotiations, and deals.\n" | |
| "Each round they get smarter\n" | |
| "based on what worked."), | |
| ("3", "Deploy Insights", | |
| "The trained agents reveal optimal\n" | |
| "strategies: when to buy, what\n" | |
| "price to offer, who to partner\n" | |
| "with, and how to react when\n" | |
| "markets shift."), | |
| ] | |
| step_w = Inches(3.4) | |
| step_h = Inches(3.0) | |
| step_start = Inches(0.7) | |
| step_gap = Inches(0.6) | |
| for i, (num, title, body) in enumerate(steps): | |
| x = step_start + i * (step_w + step_gap) | |
| y = Inches(2.0) | |
| # Card background | |
| add_shape_bg(slide3, x, y, step_w, step_h, DARK_BG) | |
| # Step number circle | |
| num_size = Inches(0.55) | |
| num_shape = slide3.shapes.add_shape(MSO_SHAPE.OVAL, | |
| x + Inches(0.15), y + Inches(0.2), | |
| num_size, num_size) | |
| num_shape.fill.solid() | |
| num_shape.fill.fore_color.rgb = GOLD | |
| num_shape.line.fill.background() | |
| ntf = num_shape.text_frame | |
| ntf.paragraphs[0].text = num | |
| ntf.paragraphs[0].font.size = Pt(18) | |
| ntf.paragraphs[0].font.color.rgb = NAVY | |
| ntf.paragraphs[0].font.bold = True | |
| ntf.paragraphs[0].alignment = PP_ALIGN.CENTER | |
| # Title | |
| add_text(slide3, x + Inches(0.85), y + Inches(0.25), | |
| step_w - Inches(1.0), Inches(0.4), | |
| title, font_size=18, color=WHITE, bold=True) | |
| # Body | |
| add_text(slide3, x + Inches(0.25), y + Inches(0.85), | |
| step_w - Inches(0.5), step_h - Inches(1.0), | |
| body, font_size=13, color=LIGHT_GRAY) | |
| # Arrow between steps | |
| if i < 2: | |
| arrow_x = x + step_w + Inches(0.1) | |
| add_text(slide3, arrow_x, y + Inches(1.2), Inches(0.4), Inches(0.5), | |
| ">>>", font_size=22, color=GOLD, bold=True, | |
| alignment=PP_ALIGN.CENTER) | |
| # Bottom tagline | |
| add_text(slide3, Inches(1), Inches(5.4), Inches(11), Inches(0.8), | |
| "Think of it as a flight simulator for traders — practice in a safe\n" | |
| "environment, then apply proven strategies in real markets.", | |
| font_size=15, color=LIGHT_GRAY, alignment=PP_ALIGN.CENTER) | |
| # ===================================================================== | |
| # SLIDE 4: HOW THE AI LEARNS — AWARDS & TRAINING | |
| # ===================================================================== | |
| slide4 = prs.slides.add_slide(prs.slide_layouts[6]) | |
| add_bg(slide4, NAVY) | |
| add_shape_bg(slide4, 0, 0, W, Inches(0.08), GOLD) | |
| add_text(slide4, Inches(0.8), Inches(0.4), Inches(11), Inches(0.8), | |
| "How the AI Gets Smarter Over Time", font_size=36, | |
| color=WHITE, bold=True) | |
| add_text(slide4, Inches(0.8), Inches(1.1), Inches(11), Inches(0.5), | |
| "Clear goals + practice + feedback = continuous improvement", | |
| font_size=16, color=GOLD) | |
| # Left panel — Award 1 | |
| panel_w = Inches(5.5) | |
| panel_h = Inches(4.0) | |
| add_shape_bg(slide4, Inches(0.6), Inches(1.9), panel_w, panel_h, DARK_BG) | |
| # Gold trophy icon | |
| trophy = slide4.shapes.add_shape(MSO_SHAPE.OVAL, | |
| Inches(0.9), Inches(2.15), | |
| Inches(0.5), Inches(0.5)) | |
| trophy.fill.solid() | |
| trophy.fill.fore_color.rgb = GOLD | |
| trophy.line.fill.background() | |
| ttf = trophy.text_frame | |
| ttf.paragraphs[0].text = "1" | |
| ttf.paragraphs[0].font.size = Pt(16) | |
| ttf.paragraphs[0].font.color.rgb = NAVY | |
| ttf.paragraphs[0].font.bold = True | |
| ttf.paragraphs[0].alignment = PP_ALIGN.CENTER | |
| add_text(slide4, Inches(1.55), Inches(2.15), Inches(4.0), Inches(0.5), | |
| "Award 1: Market Champion", font_size=20, color=GOLD, bold=True) | |
| tf4a = add_text(slide4, Inches(0.9), Inches(2.8), Inches(4.8), Inches(2.8), | |
| "Goal: Make the most money.", font_size=14, color=WHITE, bold=True) | |
| add_paragraph(tf4a, "", font_size=6, color=WHITE) | |
| add_paragraph(tf4a, | |
| "The AI agent that builds the most wealth wins.\n" | |
| "This teaches the AI to:", font_size=13, color=LIGHT_GRAY) | |
| add_paragraph(tf4a, "", font_size=4, color=WHITE) | |
| add_paragraph(tf4a, " \u2022 Buy low and sell high", font_size=13, color=LIGHT_GRAY) | |
| add_paragraph(tf4a, " \u2022 Manage inventory wisely", font_size=13, color=LIGHT_GRAY) | |
| add_paragraph(tf4a, " \u2022 Time the market correctly", font_size=13, color=LIGHT_GRAY) | |
| add_paragraph(tf4a, " \u2022 Avoid bad trades that lose money", font_size=13, color=LIGHT_GRAY) | |
| # Right panel — Award 2 | |
| add_shape_bg(slide4, Inches(6.5), Inches(1.9), panel_w + Inches(0.5), panel_h, DARK_BG) | |
| trophy2 = slide4.shapes.add_shape(MSO_SHAPE.OVAL, | |
| Inches(6.8), Inches(2.15), | |
| Inches(0.5), Inches(0.5)) | |
| trophy2.fill.solid() | |
| trophy2.fill.fore_color.rgb = LIGHT_BLUE | |
| trophy2.line.fill.background() | |
| ttf2 = trophy2.text_frame | |
| ttf2.paragraphs[0].text = "2" | |
| ttf2.paragraphs[0].font.size = Pt(16) | |
| ttf2.paragraphs[0].font.color.rgb = NAVY | |
| ttf2.paragraphs[0].font.bold = True | |
| ttf2.paragraphs[0].alignment = PP_ALIGN.CENTER | |
| add_text(slide4, Inches(7.45), Inches(2.15), Inches(5.0), Inches(0.5), | |
| "Award 2: Master Strategist", font_size=20, color=LIGHT_BLUE, bold=True) | |
| tf4b = add_text(slide4, Inches(6.8), Inches(2.8), Inches(5.5), Inches(2.8), | |
| "Goal: Be the smartest player.", font_size=14, color=WHITE, bold=True) | |
| add_paragraph(tf4b, "", font_size=6, color=WHITE) | |
| add_paragraph(tf4b, | |
| "The AI agent with the best overall strategy wins.\n" | |
| "This teaches the AI to:", font_size=13, color=LIGHT_GRAY) | |
| add_paragraph(tf4b, "", font_size=4, color=WHITE) | |
| add_paragraph(tf4b, " \u2022 Negotiate better deals with partners", font_size=13, color=LIGHT_GRAY) | |
| add_paragraph(tf4b, " \u2022 Form alliances that create value", font_size=13, color=LIGHT_GRAY) | |
| add_paragraph(tf4b, " \u2022 Adapt quickly when markets change", font_size=13, color=LIGHT_GRAY) | |
| add_paragraph(tf4b, " \u2022 Trade efficiently — no wasted moves", font_size=13, color=LIGHT_GRAY) | |
| # Bottom — Improvement cycle | |
| add_shape_bg(slide4, Inches(0.6), Inches(6.15), W - Inches(1.2), Inches(0.9), DARK_BG) | |
| add_text(slide4, Inches(0.9), Inches(6.25), W - Inches(1.8), Inches(0.7), | |
| "The Learning Cycle: Train \u2192 Compete \u2192 Score \u2192 Improve \u2192 Repeat" | |
| " | Each cycle makes the AI more accurate and profitable.", | |
| font_size=15, color=LIGHT_GRAY, alignment=PP_ALIGN.CENTER) | |
| # ===================================================================== | |
| # SLIDE 5: THE IMPROVEMENT ENGINE | |
| # ===================================================================== | |
| slide5 = prs.slides.add_slide(prs.slide_layouts[6]) | |
| add_bg(slide5, NAVY) | |
| add_shape_bg(slide5, 0, 0, W, Inches(0.08), GOLD) | |
| add_text(slide5, Inches(0.8), Inches(0.4), Inches(11), Inches(0.8), | |
| "Continuous Improvement: Better Every Round", font_size=36, | |
| color=WHITE, bold=True) | |
| add_text(slide5, Inches(0.8), Inches(1.1), Inches(11), Inches(0.5), | |
| "Like an athlete reviewing game tape — the AI studies every trade and improves", | |
| font_size=16, color=GOLD) | |
| # Improvement cycle cards | |
| cycle_items = [ | |
| ("1", "PLAY", "The Market Game", | |
| "AI agents enter the simulated\n" | |
| "marketplace and make real-time\n" | |
| "decisions: buying, selling,\n" | |
| "negotiating, and forming\n" | |
| "partnerships."), | |
| ("2", "SCORE", "Every Decision", | |
| "After each round, every action\n" | |
| "is scored: Did the trade make\n" | |
| "money? Was the negotiation\n" | |
| "successful? Was the move\n" | |
| "even valid?"), | |
| ("3", "LEARN", "From Mistakes", | |
| "The AI reviews what worked\n" | |
| "and what didn't. Good strategies\n" | |
| "get reinforced. Bad strategies\n" | |
| "get corrected. Accuracy\n" | |
| "improves each cycle."), | |
| ("4", "MASTER", "The Strategy", | |
| "After thousands of practice\n" | |
| "rounds, the AI discovers\n" | |
| "optimal strategies that\n" | |
| "maximize profit and minimize\n" | |
| "risk — ready for deployment."), | |
| ] | |
| card_w2 = Inches(2.7) | |
| card_h2 = Inches(3.5) | |
| start_x2 = Inches(0.6) | |
| gap2 = Inches(0.35) | |
| for i, (num, label, title, body) in enumerate(cycle_items): | |
| x = start_x2 + i * (card_w2 + gap2) | |
| y = Inches(1.9) | |
| add_shape_bg(slide5, x, y, card_w2, card_h2, DARK_BG) | |
| # Number + Label | |
| num_size = Inches(0.5) | |
| ns = slide5.shapes.add_shape(MSO_SHAPE.OVAL, x + Inches(0.15), y + Inches(0.2), | |
| num_size, num_size) | |
| ns.fill.solid() | |
| ns.fill.fore_color.rgb = GOLD if i < 3 else GREEN | |
| ns.line.fill.background() | |
| nsf = ns.text_frame | |
| nsf.paragraphs[0].text = num | |
| nsf.paragraphs[0].font.size = Pt(14) | |
| nsf.paragraphs[0].font.color.rgb = NAVY | |
| nsf.paragraphs[0].font.bold = True | |
| nsf.paragraphs[0].alignment = PP_ALIGN.CENTER | |
| add_text(slide5, x + Inches(0.75), y + Inches(0.15), | |
| card_w2 - Inches(0.9), Inches(0.35), | |
| label, font_size=16, color=GOLD if i < 3 else GREEN, bold=True) | |
| add_text(slide5, x + Inches(0.75), y + Inches(0.45), | |
| card_w2 - Inches(0.9), Inches(0.35), | |
| title, font_size=14, color=WHITE, bold=True) | |
| add_text(slide5, x + Inches(0.2), y + Inches(1.0), | |
| card_w2 - Inches(0.4), card_h2 - Inches(1.2), | |
| body, font_size=12, color=LIGHT_GRAY) | |
| # Arrow | |
| if i < 3: | |
| arrow_x = x + card_w2 + Inches(0.05) | |
| add_text(slide5, arrow_x, y + Inches(1.4), Inches(0.3), Inches(0.4), | |
| "\u25B6", font_size=18, color=GOLD, bold=True, | |
| alignment=PP_ALIGN.CENTER) | |
| # Key metric | |
| add_shape_bg(slide5, Inches(0.6), Inches(5.7), W - Inches(1.2), Inches(1.0), DARK_BG) | |
| metrics_tf = add_text(slide5, Inches(1.0), Inches(5.85), Inches(3.5), Inches(0.6), | |
| "Accuracy Tracking", font_size=16, color=GOLD, bold=True) | |
| add_text(slide5, Inches(4.5), Inches(5.85), Inches(8.0), Inches(0.6), | |
| "We measure what % of decisions are valid and profitable. " | |
| "As the AI trains, this number climbs — from ~60% to 90%+ — " | |
| "meaning fewer wasted moves and more money captured.", | |
| font_size=13, color=LIGHT_GRAY) | |
| # ===================================================================== | |
| # SLIDE 6: BUSINESS VALUE & ROI | |
| # ===================================================================== | |
| slide6 = prs.slides.add_slide(prs.slide_layouts[6]) | |
| add_bg(slide6, NAVY) | |
| add_shape_bg(slide6, 0, 0, W, Inches(0.08), GOLD) | |
| add_text(slide6, Inches(0.8), Inches(0.4), Inches(11), Inches(0.8), | |
| "Business Impact: Real Revenue, Real Growth", font_size=36, | |
| color=WHITE, bold=True) | |
| add_text(slide6, Inches(0.8), Inches(1.1), Inches(11), Inches(0.5), | |
| "How AI-trained trading strategies translate to bottom-line results", | |
| font_size=16, color=GOLD) | |
| # Value proposition cards — 2 rows of 3 | |
| values = [ | |
| ("\u2191", "Better Pricing", | |
| "AI discovers optimal buy/sell\n" | |
| "prices by testing thousands of\n" | |
| "strategies. Companies capture\n" | |
| "3-8% more margin per trade."), | |
| ("\u26A1", "Faster Deals", | |
| "AI-powered negotiations close\n" | |
| "deals in minutes instead of\n" | |
| "weeks. Automated offers and\n" | |
| "counter-offers 24/7."), | |
| ("\u26A0", "Risk Protection", | |
| "AI agents learn to spot market\n" | |
| "disruptions and react instantly.\n" | |
| "No more being caught off\n" | |
| "guard by supply shocks."), | |
| ("\u2764", "Smarter Partnerships", | |
| "AI identifies which alliances\n" | |
| "create value. Companies form\n" | |
| "the right partnerships at the\n" | |
| "right time."), | |
| ("\u2699", "Operational Savings", | |
| "Automated trading decisions\n" | |
| "reduce manual analysis by\n" | |
| "60-80%. Teams focus on\n" | |
| "strategy, not spreadsheets."), | |
| ("\u2B50", "Competitive Edge", | |
| "First movers who deploy AI\n" | |
| "trading agents gain an unfair\n" | |
| "advantage — better margins,\n" | |
| "faster execution, fewer losses."), | |
| ] | |
| val_w = Inches(3.6) | |
| val_h = Inches(1.9) | |
| val_gap_x = Inches(0.35) | |
| val_gap_y = Inches(0.25) | |
| for i, (icon, title, body) in enumerate(values): | |
| row = i // 3 | |
| col = i % 3 | |
| x = Inches(0.6) + col * (val_w + val_gap_x) | |
| y = Inches(1.85) + row * (val_h + val_gap_y) | |
| add_shape_bg(slide6, x, y, val_w, val_h, DARK_BG) | |
| # Icon | |
| add_text(slide6, x + Inches(0.2), y + Inches(0.15), | |
| Inches(0.4), Inches(0.4), | |
| icon, font_size=20, color=GOLD, bold=True) | |
| # Title | |
| add_text(slide6, x + Inches(0.65), y + Inches(0.15), | |
| val_w - Inches(0.8), Inches(0.35), | |
| title, font_size=16, color=WHITE, bold=True) | |
| # Body | |
| add_text(slide6, x + Inches(0.25), y + Inches(0.6), | |
| val_w - Inches(0.5), val_h - Inches(0.7), | |
| body, font_size=12, color=LIGHT_GRAY) | |
| # Bottom ROI bar | |
| add_shape_bg(slide6, Inches(0.6), Inches(6.3), W - Inches(1.2), Inches(0.75), DARK_BG) | |
| add_text(slide6, Inches(1.0), Inches(6.38), W - Inches(2.0), Inches(0.55), | |
| "Estimated ROI: 10-25x return on AI training investment within 12 months " | |
| "| Payback period: 3-6 months for commodity trading operations", | |
| font_size=14, color=GOLD, bold=True, alignment=PP_ALIGN.CENTER) | |
| # ===================================================================== | |
| # SLIDE 7: USE CASES — WHO BENEFITS | |
| # ===================================================================== | |
| slide7 = prs.slides.add_slide(prs.slide_layouts[6]) | |
| add_bg(slide7, NAVY) | |
| add_shape_bg(slide7, 0, 0, W, Inches(0.08), GOLD) | |
| add_text(slide7, Inches(0.8), Inches(0.4), Inches(11), Inches(0.8), | |
| "Who Benefits: Industry Applications", font_size=36, | |
| color=WHITE, bold=True) | |
| add_text(slide7, Inches(0.8), Inches(1.1), Inches(11), Inches(0.5), | |
| "Any business that buys, sells, or trades can benefit from AI-trained strategies", | |
| font_size=16, color=GOLD) | |
| industries = [ | |
| ("Commodity Trading", | |
| "Energy, agriculture, metals\n" | |
| "trading firms use AI agents\n" | |
| "to find optimal entry/exit\n" | |
| "points and manage portfolio\n" | |
| "risk across volatile markets."), | |
| ("Supply Chain", | |
| "Procurement teams train AI\n" | |
| "to negotiate better supplier\n" | |
| "contracts, time purchases\n" | |
| "around price dips, and build\n" | |
| "resilient supply networks."), | |
| ("Retail & E-Commerce", | |
| "Dynamic pricing engines\n" | |
| "trained on market simulations\n" | |
| "adjust prices in real-time\n" | |
| "to maximize revenue while\n" | |
| "staying competitive."), | |
| ("Financial Services", | |
| "Portfolio managers use AI\n" | |
| "agents to test trading\n" | |
| "strategies before deploying\n" | |
| "real capital — reducing risk\n" | |
| "and finding alpha."), | |
| ] | |
| ind_w = Inches(2.7) | |
| ind_h = Inches(3.3) | |
| ind_start = Inches(0.6) | |
| ind_gap = Inches(0.35) | |
| ind_colors = [GOLD, LIGHT_BLUE, GREEN, RGBColor(0xE7, 0x73, 0xE7)] | |
| for i, (title, body) in enumerate(industries): | |
| x = ind_start + i * (ind_w + ind_gap) | |
| y = Inches(1.9) | |
| add_shape_bg(slide7, x, y, ind_w, ind_h, DARK_BG) | |
| # Color bar at top of card | |
| add_shape_bg(slide7, x, y, ind_w, Inches(0.06), ind_colors[i]) | |
| # Title | |
| add_text(slide7, x + Inches(0.2), y + Inches(0.3), | |
| ind_w - Inches(0.4), Inches(0.4), | |
| title, font_size=17, color=ind_colors[i], bold=True, | |
| alignment=PP_ALIGN.CENTER) | |
| # Body | |
| add_text(slide7, x + Inches(0.2), y + Inches(0.9), | |
| ind_w - Inches(0.4), ind_h - Inches(1.1), | |
| body, font_size=12, color=LIGHT_GRAY, | |
| alignment=PP_ALIGN.CENTER) | |
| # Bottom | |
| add_shape_bg(slide7, Inches(0.6), Inches(5.5), W - Inches(1.2), Inches(0.8), DARK_BG) | |
| add_text(slide7, Inches(1.0), Inches(5.6), W - Inches(2.0), Inches(0.6), | |
| "The platform is industry-agnostic — any market with buyers, sellers,\n" | |
| "and dynamic pricing can benefit from AI-trained trading intelligence.", | |
| font_size=14, color=LIGHT_GRAY, alignment=PP_ALIGN.CENTER) | |
| # ===================================================================== | |
| # SLIDE 8: CLOSING — NEXT STEPS | |
| # ===================================================================== | |
| slide8 = prs.slides.add_slide(prs.slide_layouts[6]) | |
| add_bg(slide8, NAVY) | |
| add_shape_bg(slide8, 0, 0, W, Inches(0.08), GOLD) | |
| # Big statement | |
| add_text(slide8, Inches(1.5), Inches(1.2), Inches(10), Inches(1.2), | |
| "Ready to Trade Smarter?", font_size=44, | |
| color=WHITE, bold=True, alignment=PP_ALIGN.CENTER) | |
| # Divider | |
| add_shape_bg(slide8, Inches(5.5), Inches(2.5), Inches(2.3), Inches(0.04), GOLD) | |
| # Value prop summary | |
| add_text(slide8, Inches(2), Inches(3.0), Inches(9), Inches(1.0), | |
| "Train AI agents in a safe simulation. Deploy winning strategies.\n" | |
| "Capture more margin. React faster. Partner smarter.", | |
| font_size=20, color=LIGHT_GRAY, alignment=PP_ALIGN.CENTER) | |
| # Next steps | |
| steps_data = [ | |
| ("1", "Pilot Program", | |
| "Start with a focused simulation\n" | |
| "using your real market data"), | |
| ("2", "Train & Validate", | |
| "Run AI agents through 1000+\n" | |
| "trading scenarios to discover\n" | |
| "optimal strategies"), | |
| ("3", "Deploy & Grow", | |
| "Roll out AI-powered trading\n" | |
| "insights across your\n" | |
| "organization"), | |
| ] | |
| ns_w = Inches(3.3) | |
| ns_h = Inches(1.6) | |
| ns_start = Inches(0.9) | |
| ns_gap = Inches(0.4) | |
| for i, (num, title, body) in enumerate(steps_data): | |
| x = ns_start + i * (ns_w + ns_gap) | |
| y = Inches(4.3) | |
| add_shape_bg(slide8, x, y, ns_w, ns_h, DARK_BG) | |
| ns2 = slide8.shapes.add_shape(MSO_SHAPE.OVAL, | |
| x + Inches(0.15), y + Inches(0.15), | |
| Inches(0.4), Inches(0.4)) | |
| ns2.fill.solid() | |
| ns2.fill.fore_color.rgb = GOLD | |
| ns2.line.fill.background() | |
| nsf2 = ns2.text_frame | |
| nsf2.paragraphs[0].text = num | |
| nsf2.paragraphs[0].font.size = Pt(14) | |
| nsf2.paragraphs[0].font.color.rgb = NAVY | |
| nsf2.paragraphs[0].font.bold = True | |
| nsf2.paragraphs[0].alignment = PP_ALIGN.CENTER | |
| add_text(slide8, x + Inches(0.65), y + Inches(0.15), | |
| ns_w - Inches(0.8), Inches(0.35), | |
| title, font_size=16, color=GOLD, bold=True) | |
| add_text(slide8, x + Inches(0.2), y + Inches(0.6), | |
| ns_w - Inches(0.4), ns_h - Inches(0.7), | |
| body, font_size=12, color=LIGHT_GRAY) | |
| # Footer | |
| add_text(slide8, Inches(1), Inches(6.4), Inches(11), Inches(0.5), | |
| "MarketForge | Built with OpenEnv | Powered by Reinforcement Learning", | |
| font_size=13, color=GRAY, alignment=PP_ALIGN.CENTER) | |
| # ===================================================================== | |
| # SAVE | |
| # ===================================================================== | |
| output_path = os.path.join(os.path.dirname(__file__), | |
| "AI_Market_Intelligence_Business_Deck.pptx") | |
| prs.save(output_path) | |
| print(f"\nPowerPoint saved to: {output_path}") | |
| print(f"Total slides: {len(prs.slides)}") | |