Streamline evaluation evidence mapping at scale with LLMs
Project description
IOMEval
iomeval streamlines the mapping of IOM
evaluation reports against strategic frameworks like the Strategic
Results Framework (SRF) and Global Compact for
Migration
(GCM).
It uses LLMs to process PDF reports, extract key sections, and tag/map
them to framework components, turning dispersed, untagged evaluation
documents into structured, searchable knowledge maps.
Why This Matters
UN agencies produce extensive evaluation reports and other public documents. For IOM, this body of knowledge is extensive and variegated, but putting it to practical use becomes more challenging as volume increases, particularly when documentation is stored across different repositories with no single index available.
The Challenge for IOM
IOM’s evaluation production is highly decentralized, with reports stored across multiple repositories (the IOM Evaluation Repository, IOM Library, IOM Protection Platform). Quality varies greatly—quality control processes are not applied uniformly, and variation also reflects the inherent subjectivity in evaluation approaches and interpretations. Reports also vary significantly in structure: some follow common formats with executive summaries, findings, and recommendations, while others have different structures entirely. This inconsistency makes systematic mapping challenging.
Critically, existing metadata doesn’t indicate which elements of IOM’s strategic frameworks—the Strategic Results Framework (SRF) or the Global Compact for Migration (GCM)—each report addresses. This is a major gap that limits the ability to connect evaluation evidence with key strategic frameworks.
Evidence Maps as a Solution
Evidence Maps display the extent and nature of research and evaluation
available on a subject. Following the 2025 UNEG Eval
Week,
four primary use cases emerged: guiding future evidence generation,
informing policy decisions, knowledge management, and enhancing
collaboration. The maps created by iomeval serve primarily as
knowledge management tools—structured repositories that make
identifying relevant sources easier by organizing them against strategic
framework components.
What This Enables
By tagging reports against SRF outputs, enablers, cross-cutting priorities, and GCM objectives, these maps help answer questions like: Which framework elements are well-covered by existing evaluations? Where are the knowledge gaps that should prioritize future evaluation work? Which themes have enough evidence for a dedicated synthesis report?
Key Features
- Automated PDF Processing: Download and OCR evaluation reports with proper heading hierarchy
- Intelligent Section Extraction: LLM-powered extraction of executive summaries, findings, conclusions, and recommendations
- Strategic Framework Mapping: Map report content to IOM’s SRF Enablers, Cross-Cutting Priorities, GCM Objectives, and SRF Outputs
- Checkpoint/Resume: Built-in state persistence - interrupt and resume long-running pipelines
- Granular Control: Use the full pipeline or individual components as needed
Installation
Install from PyPI:
pip install iomeval
Or install the latest development version from GitHub:
pip install git+https://github.com/franckalbinet/iomeval.git
Configuration
Core Dependencies
iomeval relies on two key libraries:
- mistocr: Powers the PDF-to-markdown conversion with intelligent OCR and heading hierarchy detection
- lisette: A thin wrapper around litellm that provides access to all major LLM providers. By default, iomeval uses Anthropic models (Haiku for debugging, Sonnet for production)
API Keys
Set your required API keys:
export ANTHROPIC_API_KEY='your-key-here'
export MISTRAL_API_KEY='your-key-here'
Since lisette supports all major LLM providers via litellm, you can alternatively configure other providers (OpenAI, Google, etc.) by setting their respective API keys.
Quick Start
First, prepare your evaluations data. Export evaluations from IOM’s evaluation repository as CSV, then convert to JSON:
from iomeval.readers import IOMRepoReader
reader = IOMRepoReader('evaluation-search-export.csv')
reader.to_json('evaluations.json')
Now process an evaluation report end-to-end:
from iomeval.readers import load_evals
from iomeval.pipeline import run_pipeline
evals = load_evals('evaluations.json')
url = "https://evaluation.iom.int/sites/g/files/tmzbdl151/files/docs/resources/Abridged%20Evaluation%20Report_%20Final_Olta%20NDOJA.pdf"
report = await run_pipeline(url, evals,
pdf_dst='data/pdfs',
md_dst='data/md',
results_path='data/results',
ocr_kwargs=dict(add_img_desc=False),
model='claude-haiku-4-5')
report
The pipeline runs 7 steps: download → OCR → extract → map enablers → map CCPs → map GCM objectives → map outputs. Progress is displayed as each step completes, and state is automatically saved after each stage for checkpoint/resume capability.
Detailed Workflow
For more control over individual pipeline stages, see the module documentation:
- Loading evaluation metadata: See readers for working with IOM evaluation data
- Downloading and OCR: See downloaders and core for PDF processing
- Section extraction: See extract for extracting executive summaries, findings, conclusions, and recommendations
- Framework mapping: See mapper for mapping to SRF enablers, cross-cutting priorities, GCM objectives, and SRF outputs
- Pipeline control: See pipeline for granular control over the full pipeline and checkpoint/resume functionality
Development
iomeval is built with nbdev, which means the entire library is developed in Jupyter notebooks. The notebooks serve as both documentation and source code.
Setup for development
git clone https://github.com/franckalbinet/iomeval.git
cd iomeval
pip install -e '.[dev]'
Key nbdev commands
nbdev_test # Run tests in notebooks
nbdev_export # Export notebooks to Python modules
nbdev_preview # Preview documentation site
nbdev_prepare # Export, test, and clean notebooks (run before committing)
Workflow
- Make changes in the
.ipynbnotebook files - Run
nbdev_prepareto export code and run tests - Commit both notebooks and exported Python files
- Documentation is automatically generated from the notebooks
Learn more about nbdev’s literate programming approach in the nbdev documentation.
Contributing
Contributions are welcome! Please: - Follow the existing notebook
structure - Run nbdev_prepare before submitting PRs
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file iomeval-0.0.4.tar.gz.
File metadata
- Download URL: iomeval-0.0.4.tar.gz
- Upload date:
- Size: 67.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f4564d97361446f8ecb0d6f479bf2759ba4adc5f6edc3f0aeda016860664d552
|
|
| MD5 |
932331f3a0bab6913a7264abc1b1e8dc
|
|
| BLAKE2b-256 |
7975c4eeeaf04eadbab79f6f0306a814fefe1d37a47aa8ad0d27d7ec7af7ff17
|
File details
Details for the file iomeval-0.0.4-py3-none-any.whl.
File metadata
- Download URL: iomeval-0.0.4-py3-none-any.whl
- Upload date:
- Size: 69.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c059398e7210b1d71b08c969e020b39d0e4e7b487c368b8f3a65ee371f70221a
|
|
| MD5 |
443a61aa5837258efde776b572435945
|
|
| BLAKE2b-256 |
9c5817771b9c4918854ff2cf619b131ac7a341d553128bc2267ffbdcb01b3152
|