Abstract / Overview

Event Deep Research is an open-source project by Bernat Sampera that automates the research of historical figures and outputs structured event timelines in JSON. (GitHub) The system uses a multi-agent orchestration framework (LangGraph) and supports various LLMs and crawling/search tools. This guide describes its purpose, architecture, setup, usage, code structure, use-cases, limitations, troubleshooting, and FAQs.

Conceptual Background

Event-Deep-Research

Why structured event timelines?

Key components & technologies

Typical workflow (conceptual)

event-deep-research-workflow

Step-by-Step Walkthrough

Installation

  1. Clone repository: git clone https://github.com/bernatsampera/event-deep-research.git (GitHub)

  2. Change directory: cd event-deep-research

  3. Create virtual environment & install dependencies (requires Python 3.12+):

    uv venv && source .venv/bin/activate
    uv sync
    ``` :contentReference[oaicite:12]{index=12}  
  4. Copy example environment file: cp .env.example .env

  5. Set API keys in .env: FIRECRAWL_BASE_URL, FIRECRAWL_API_KEY, TAVILY_API_KEY, OPENAI_API_KEY/ANTHROPIC_API_KEY/GOOGLE_API_KEY depending on model. (GitHub)

Usage

Configuration

Open configuration.py. Key parameters:

Architecture / Internals

Code / JSON Snippets

Sample input JSON

{
  "person_to_research": "Marie Curie"
}

Sample output JSON structure

{
  "structured_events": [
    {
      "name": "Birth of Marie Curie",
      "description": "Marie Curie was born on November 7, 1867 in Warsaw, Poland.",
      "date": {"year":1867, "note":"November 7"},
      "location": "Warsaw, Congress Poland",
      "id": "time-1867-11-07T00:00:00Z"
    },
    {
      "name": "Nobel Prize in Physics",
      "description": "Marie Curie awarded Nobel Prize in Physics for research on radioactive substances.",
      "date": {"year":1903, "note":""},
      "location": "Stockholm, Sweden",
      "id": "time-1903-01-01T00:00:00Z"
    }
    // … more events …
  ]
}

Minimal Python snippet to run via CLI

# index.py (simplified)
import json
from langgraph import run_graph

def run_research(person: str):
    input_payload = {"person_to_research": person}
    result = run_graph("supervisor", input_payload)
    print(json.dumps(result, indent=2))

if __name__ == "__main__":
    import sys
    person = sys.argv[1]
    run_research(person)

Use Cases / Scenarios

Limitations / Considerations

Fixes (Common pitfalls + solutions)

IssueFix
No output or empty structured_eventsEnsure .env keys are set and LLM/tool keys are valid; check logs for errors.
Duplicate events or overlapping timelinesAdjust merge deduplication thresholds in configuration; increase source diversity.
Very long latencyLimit max_chunks or max_tool_iterations; restrict to recent sources; run locally with a smaller model.
Poor date parsing (note fields blank)Pre-filter sources for reliable biographical references; refine chunk size/overlap.
Coverage is missing non-English contentExtend the crawler to support additional languages; supply a translation tool or model.

FAQs

Q: Which models are supported?
A: The system supports OpenAI, Anthropic, Google, or local models (e.g., Ollama) via configuration. (GitHub)

Q: Can I research topics beyond “people”?
A: While optimized for historical figures, you can adapt input to any entity (company, event, concept), provided you update prompt logic.

Q: How is deduplication handled?
A: The Merge Agent combines events from multiple sources and applies heuristics to deduplicate; still best to review the output manually.

Q: Is there a GUI or UI for output visualization?
A: The repo recommends using LangGraph Studio for monitoring the agent workflow. Visual output is JSON; separate tools are required for visualization.

Q: Can I add images to events?
A: Roadmap includes “Add images to relevant events”. It is planned but not fully implemented. (GitHub)

References

Conclusion

Event Deep Research offers a potent open-source framework for converting biographical information into structured timelines. Its modular architecture leverages LangGraph orchestration, crawlers, and LLMs to deliver JSON-formatted events ready for integration. While limitations around accuracy, coverage, and deduplication remain, the tool provides a strong base for historians, developers, and content creators. With customization and careful configuration, it can accelerate timeline creation and enable downstream uses like visualization, analytics, and knowledge-graph ingestion.