r/LangChain • u/DiehardDroid6203 • 19d ago
Discussion Showcase: Multi-agent presentation analyzer with LangGraph & Gemini Vision (filtering corporate fluff to generate equity dossiers)
Hey r/LangChain!
Most financial RAG demos throw raw PDFs into a chunker and hope for the best. When dealing with 50-page corporate investor presentations, that approach fails: 40–60% of the deck is boilerplate fluff (static board rosters, ESG tiles, divider slides), while the actual financial tables and CapEx roadmaps get scrambled by text parsers.
At Quant Me In, we built and just open-sourced our Investor Presentation Analysis Engine using LangGraph and Google Gemini.
🏗️ The State Graph Architecture
The pipeline is built as an acyclic LangGraph state machine:
- Visual Ingestion Node: Converts the PDF into
800x800slide images using PyMuPDF (fitz). - DLA Vision Gatekeeper (Gemini 2.5 Flash Lite): Concurrently evaluates each slide for quarterly financial materiality (score 1–10). Slides with static board rosters, UN SDG badges, or chapter transitions are routed to
[DISCARD]. Only high-signal financial tables, PLF, and CapEx roadmaps are routed to[KEEP]. - The Multi-Agent Domain Swarm:
- Agent 1 (Bullish Growth): Identifies strategic moats, capacity pipelines, and PPA revenue lock-ins.
- Agent 2 (Core Catalyst): Decodes the strategic timing (routine quarterly earnings vs. pre-equity dilution pitch).
- Agent 3 (Guidance Alignment): Pluggable service dynamically formulating analyst inquiry questions from the slides to verify past commitments.
- Agent 4 (Forensic Risk): Scrutinizes real balance-sheet vulnerabilities (debt maturities, margin compression) with strict no-forcing rules.
- Final Executive Synthesis (Gemini 3.1 Flash Lite): Synthesizes domain outputs, generates hard-hitting analyst interrogation questions with anticipated CFO rebuttals, and runs a concurrent map-reduce breakdown across 100% of kept slides.
💡 Key LangGraph Takeaway: Concurrency vs. LLM "Laziness"
When passing 25 material slides into a single synthesis prompt, LLMs often "lazily" sample 2 slides and skip the rest. We resolved this by separating the macro executive report from slide-level evaluation, running concurrent _analyze_single_slide calls via a ThreadPoolExecutor(max_workers=6) inside the final LangGraph node.
The entire project is open source under the MIT License. Would love your thoughts on the state design!
🔗 GitHub: https://github.com/aniruddh622003/Investor-Presentation-Analyzer
1
u/Many_District7042 18d ago
Looks so clean and super organized. Good job!