IOM evaluation assistant
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?
Installation
pip install iomeval
Configuration
iomeval uses Claude for intelligent extraction and mapping. Set your Anthropic API key:
export ANTHROPIC_API_KEY='your-key-here'
add mistral also …
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
Quick Start
Process an evaluation report end-to-end:
from iomeval.pipeline import Report, run_pipeline
report = Report(id="IOM-2024-001", pdf_url="evaluation_report.pdf")
run_pipeline(report)
The rich display shows processing status across all pipeline stages - from OCR through framework mapping.
Detailed Workflow
For more control, use individual pipeline stages:
1. Load evaluation metadata
from iomeval.readers import read_iom
evals = read_iom() # Returns DataFrame of all IOM evaluations
evals.head()
2. Download and OCR a report
from iomeval.downloaders import download_pdf
from iomeval.core import pdf_to_md
# Download PDF
pdf_path = download_pdf(report.pdf_url, dest_folder="pdfs")
# Convert to markdown with heading hierarchy
report.md = pdf_to_md(pdf_path)
3. Extract key sections
from iomeval.extract import extract_exec_summary, extract_findings, extract_conclusions, extract_recommendations
report.exec_summary = extract_exec_summary(report.md)
report.findings = extract_findings(report.md)
report.conclusions = extract_conclusions(report.md)
report.recommendations = extract_recommendations(report.md)
4. Map to strategic frameworks
from iomeval.mapper import map_srf_enablers, map_srf_crosscutting, map_gcm, map_srf_outputs
# Each mapper returns structured results with centrality scores
report.srf_enablers = map_srf_enablers(report.conclusions)
report.srf_crosscutting = map_srf_crosscutting(report.conclusions)
report.gcm = map_gcm(report.conclusions)
report.srf_outputs = map_srf_outputs(report.conclusions)
5. Save/restore checkpoints
# Save progress
report.save("checkpoint.json")
# Resume later
report = Report.load("checkpoint.json")
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 - Add tests using nbdev’s #| test cells - 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.2.tar.gz.
File metadata
- Download URL: iomeval-0.0.2.tar.gz
- Upload date:
- Size: 22.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
330ca75f6d2ffa1c3cf6f437108ec85e164b27569ec75853a36404cfc0517991
|
|
| MD5 |
f80a4b615d410b6ffd397377c5ab95de
|
|
| BLAKE2b-256 |
73382385a6d66302e453142776e671c51ac1cb941ab9985e91beab1e9e1bf290
|
File details
Details for the file iomeval-0.0.2-py3-none-any.whl.
File metadata
- Download URL: iomeval-0.0.2-py3-none-any.whl
- Upload date:
- Size: 21.7 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 |
4f0d15a7cd608f60f6f9fbcd3397b53ed4f4241d4d9756838efbe1c85b56c84a
|
|
| MD5 |
2ccb00f46fb798ad2f6bcaebc813a4ee
|
|
| BLAKE2b-256 |
1baa9bf04c680cd151c629d878c21c0ce917657ac053457ceab3ea9299e1d271
|