Skip to content

embabel/decker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build

Kotlin Spring Apache Maven ChatGPT JSON GitHub Actions Docker IntelliJ IDEA

    

    

Presentation Maker Agent

Agent to build presentations using Embabel. Both an example of Embabel and a useful tool in its own right.

Flow:

  • Starts from a YML definition file describing the speaker and presentation goals.
  • Decides on key points to cover using the best available model
  • Performs internet research to back up points to be made, in parallel using a cheaper model and MCP tools.
  • Draws code examples from a software project, if specified.
  • Generates Markdown slide content using the best available model, adhering to Marp conventions
  • Uses the Marp CLI to convert the Markdown into an HTML presentation
  • Expands images in dot format using GraphViz

To run

Run the shell script to start Embabel under Spring Shell:

./shell.sh

Commands

make-presentation <absolute path to presentation YML file>

The presentation YML file should have the following structure:

data class PresentationRequest(
    val slideCount: Int,
    val presenterBio: String,
    val brief: String,
    val softwareProject: String?,
    val outputDirectory: String = "/Users/rjohnson/Documents",
    val outputFile: String = "presentation.md",
    val header: String,
    val images: Map<String, ImageInfo> = emptyMap(),
    val autoIllustrate: Boolean = false,
    val coStar: CoStar,
)

See kotlinconf_presentation.yml for an example.

Here's a real YML file, used to generate Rod Johnson's presentation at KotlinConf 2025.

slideCount: 28
presenterBio: >
  Rod Johnson, Embabel. Creator of Spring

brief: >
  Kotlin and Spring are the ideal modern server side stack.
  
  We're not just looking backward, but forward. This deck is generated by
  an agent framework written in Kotlin using Spring.
  The JVM has a big place in the future.
  
  In the last 10 years, I've done a lot of languages:
  [make this a table]
  Scala - Elegant language, too clever for mortals
  TypeScript - Love the language, but Node is messy
  Python - Getting better but still thumbs its nose at computer science.
  Modern Java - I hadn't done for >10 years, and it's improved a lot. Spring is so nice after Node and Python ecosystem.
  Kotlin - The best of both worlds
  
  While modern Java has improved a lot, Kotlin remains better.

  Provide all examples from the given codebase if possible, not via web search.

  Show examples of Kotlin reification and extension functions.
  Show how Spring @Service works naturally with Kotlin classes
  Show how Kotlin data classes work well with Spring @ConfigurationProperties annotation.
  Show how Java code can consume Kotlin code in a natural way: see StarNewsFinder.java.
  
  Add slides on how the Kotlin compiler "open" is configured in pom.xml and how
  it helps avoid errors with Spring.
  
  Explain how this presentation has been created by Embabel, which is written in Kotlin and based on Spring.
  
  Explain the core concepts of Embabel, as explained in project README.md.
  Specifically distinguished by:
  - planning toward goals, which enables extensibility without modification
  - rich domain model, exposing domain methods to LLMs as tools
  
  Show how the file named 'kotlinconf_presentation.yml' in the project (use findFiles and readFile), 
  lays out the narrative for this presentation.
  
  Explain the implementation of the PresentationMaker Kotlin class. 
  Show the signatures of the @Action methods
  Draw a GraphViz diagram of how the class works.
  
  Conclude with a call to action: experience the future of agentic systems
  by trying Embabel; it's an example of Spring + Kotlin in action.
  You can see the code that built this presentation.

header: |
  ---
  marp: true
  title: Kotlin and Spring: The Modern Server Side Stack
  theme: default
  paginate: false
  class: invert
  size: 16:9
  ---

images:
  embabel:
    useWhen: start of deck on title slide, end of deck. it's a tall image
    url: https://raw.githubusercontent.com/embabel/embabel-agent/refs/heads/main/embabel-agent-api/images/315px-Meister_der_Weltenchronik_001.jpg
  spring:
    useWhen: on first slide mentioning spring
    url: https://upload.wikimedia.org/wikipedia/commons/4/44/Spring_Framework_Logo_2018.svg
  kotlin:
    useWhen: background of first slide mentioning kotlin
    url: https://upload.wikimedia.org/wikipedia/commons/thumb/0/06/Kotlin_Icon.svg/1024px-Kotlin_Icon.svg.png?20171012085709
  spring-ai:
    useWhen: first slide mentioning Spring AI
    url: https://raw.githubusercontent.com/spring-io/spring-io-static/refs/heads/main/blog/tzolov/20250520/spring-ai-logo.png


outputFile: kotlinconf.md

softwareProject: /Users/rjohnson/dev/embabel.com/embabel-agent/embabel-agent-api

coStar:
  context: talk at KotlinConf 2025
  objective: >
    convey the importance of Kotlin in the Spring ecosystem and how they
    complement each other
  style: Rod Johnson on programming
  tone: informative and entertaining. be provocative and challenge the audience
  audience: Kotlin developers interested in Spring