This is the implementation of Dynamic Evidence-based FAct-checking with Multimodal Experts (DEFAME), a strong multimodal claim verification system. DEFAME decomposes the fact-checking task into a dynamic 6-stage pipeline, leveraging an MLLM to accomplish sub-tasks like planning, reasoning, and evidence summarization.
Note
This is the most recent version of DEFAME. The main
branch is under continuous development. If you are looking for the version used in our ICML 2025 paper, visit the icml
branch.
If you're looking for the ClaimReview2024+ benchmark, you find it in this Hugging Face repository.
DEFAME is the successor of our challenge-winning unimodal fact-checking system, InFact. You can access the original code of InFact in the InFact branch.
- Installation
- Prepare Benchmarks
- Usage
- Tools and Integrations
- API
- Web Interface
- License
- Cite this Work
You can install DEFAME either via Docker or manually. In any case, you first need to clone the repository:
git clone https://github.com/multimodal-ai-lab/DEFAME
cd DEFAME
Choose this option if you're interested in executing rather than modifying DEFAME.
If you have Docker installed, from the project root simply run
docker compose up -d
docker compose exec defame bash
This will download and execute the latest images we have built for you. It opens a shell. You can continue with Usage from here.
Choose this option if you want to modify rather than just execute DEFAME.
Follow these steps:
-
Optional: Set up a virtual environment and activate it:
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
-
Install all required packages:
pip install -r requirements.txt python -c "import nltk; nltk.download('wordnet')"
If you have a CUDA-enabled GPU and the CUDA toolkit installed, also run:
pip install -r requirements_gpu.txt
If you want to evaluate DEFAME on a benchmark, you need to do the following:
-
Download the needed benchmarks. We use:
- AVeriTeC: Supports auto-download during runtime, no manual download needed.
- MOCHEG
- VERITE
- ClaimReview2024+: Supports automatic download during runtime. Ensure to be logged in via
huggingface-cli login
and that you've got access to the dataset.
-
Order the first three benchmarks in the following directory structure:
your_dataset_folder/ ├── AVeriTeC/ │ ├── train.json │ ├── dev.json │ └── ... ├── MOCHEG/ │ ├── images/ │ ├── train/ │ └── ... └── VERITE/ ├── images/ ├── VERITE.csv └── ...
-
Include the path to
your_dataset_folder
in thedata_base_dir
variable insideconfig/globals.py
. DEFAME will automatically locate and process the datasets when needed.
All execution scripts are located in (subfolders of) scripts/
.
Note
Whenever running a script, ensure the project root to be the working directory. You can accomplish that by using the -m
parameter as in the commands below (note the script path notation):
Hardware requirements: CPU-only is sufficient if you refrain from using a local LLM and disable the geolocator.
Output location: All generated reports, statistics, logs etc. will be saved in out/
by default. You may change this in the config/globals.py
file.
With scripts/run.py
, you can fact-check any image-text claim. The script already contains an example. Execute it with
python -m scripts.run
It will run DEFAME with the default configuration (using GPT-4o). When running this command the first time, you'll be prompted to enter API keys. Just enter the ones you need. (See Tools and Integrations for which keys DEFAME requires.)
Benchmark evaluations can be run in two different ways. We recommend to use YAML configuration files. See config/verite
for a bunch of examples. After you configured your own config, just copy the config's file path into run_config.py
and run
python -m scripts.run_config
DEFAME uses a Large Language Model (LLM) as the backbone which natively cannot retrieve evidence (reliably). Therefore, DEFAME leverages tools for evidence retrieval. A Tool
can be anything that implements an I/O operation, executed via an Action
. The implementations of each Tool
can be found in defame/evidence_retrieval/tools
.
Often, a Tool
requires access to an external API, e.g., the Searcher
tool needs SerperAPI to run web searches. All external API integrations (wrappers, HTTP request handling etc.) are implemented inside defame/evidence_retrieval/integrations
. All API keys go into config/api_keys.yaml
.
Some tools require additional setup. See the tool-specific setup guidelines below for any extra setup needed.
Here's an overview of all APIs that are integrated into DEFAME.
API | Free | Required for... |
---|---|---|
OpenAI | ❌ | DEFAME with GPT (default), otherwise optional |
🤗 Hugging Face | ✔️ | DEFAME with Llava, otherwise optional |
Serper | ❌ | DEFAME with Google Web Search, otherwise optional |
DuckDuckGo | ✔️ | nothing. Reaches rate limit quickly. |
Google Vision | ❌ | DEFAME with Reverse Image Search |
Firecrawl | ✔️ | DEFAME with Reverse Image Search |
You will need the OpenAI API if you want to use any of OpenAI's GPT models.
Required for the usage of open source LLMs on 🤗 Hugging Face, like Llama and Llava.
The Serper API serves standard Google Search as well as Google Image Search. If you don't want to use DuckDuckGo (which has restrictive rate limits, unfortunately), you will need this API.
The Google Cloud Vision API is required to perform Reverse Image Search. Follow these steps, to set it up:
- In the Google Cloud Console, create a new Project.
- Go to the Service Account overview and add a new Service Account.
- Open the new Service Account, go to "Keys" and generate a new JSON key file.
- Save the downloaded key file at the path
config/google_service_account_key.json
.
To extend the fact-checker with an own Tool
, follow these steps:
-
Only if needed: Implement the integration
If your tool requires calling external resources, integrate the external resource by implementing a respective module inside
defame/evidence_retrieval/integrations
. -
Implement the Tool and Action(s)
Inside
defame/evidence_retrieval/tools
, create a new file and implement the tool, inheriting from the abstractTool
class. Make sure to implement all required methods and add a respectiveAction
. Caution: Action docstrings are used 1:1 as a description of the tool to inform the LLM planning module about the action's purpose and how the action is used. See other tools and actions for examples. -
Register Your Tool in
defame/evidence_retrieval/tools/__init__.py
Incorporate the new tool into the
TOOL_REGISTRY
list and its actions into theACTION_REGISTRY
set. -
Add the tool configuration to the hyperparameters
Don't forget to specify the tool in the DEFAME hyperparameters or, alternatively, in your configuration (the YAML file that goes into
config/
). -
Optional: Register the Tool in Benchmarks
This step is required only if you want to use your tool for evaluation on one of the benchmarks. To this end, navigate to the respective benchmark file under
defame/eval/<benchmark_name>/benchmark.py
. There, in theavailable_actions
list, add yourTool
.
This project uses Firecrawl as the default web scraping service. If Firecrawl is not available, DEFAME falls back to a simple BeautifulSoup implementation. Firecrawl runs automatically if you used docker compose
to install DEFAME.
If you installed DEFAME manually, you also need to run Firecrawl manually by executing
docker run -d -p 3002:3002 tudamailab/firecrawl
DEFAME will automatically locate Firecrawl. If you use custom, non-standard ports or URLs, you must also update the firecrawl_url
inside config/globals.py
.
If you really want to set up Firecrawl manually and without Docker, follow the Firecrawl Documentation. We do not recommend that because, in our experience, that setup procedure is rather involving. Therefore, we recommend to use the Firecrawl Docker Image we provide for this project. (You may modify and re-build the Firecrawl Image via the Dockerfile
stored in third_party/firecrawl
.)
DEFAME ships with its own API backend, allowing the user to access DEFAME's functionalities through HTTP requests. Simply execute the script scripts/run_api.py
to activate the server which will be accessible at http://0.0.0.0:3003. The API documentation is then available under http://0.0.0.0:3003/docs.
Don't forget to run Firecrawl if you want to use it.
DEFAME provides a web-based graphical user interface, supporting the input and verification of textual and visual content. As of now, our hosted web interface is not public, but you can host it yourself using this repository. (You also need to run the DEFAME API.)
This repository and all its contents (except for the contents inside third_party/
) are licensed under the Apache 2.0 License.
Please use the following BibTeX to refer to the authors:
@inproceedings{braun2025defame,
title = {{DEFAME: Dynamic Evidence-based FAct-checking with Multimodal Experts}},
author = {Tobias Braun and Mark Rothermel and Marcus Rohrbach and Anna Rohrbach},
booktitle = {Proceedings of the 42nd International Conference on Machine Learning},
year = {2025},
url = {https://arxiv.org/abs/2412.10510},
}