Anonymous research benchmark for cyclone preparedness in Port Operation (AAAI 2026 submission)
CyPortQA is the first multimodal QA benchmark that evaluates how well multimodal large‑language models (MLLMs) can
- understand tropical‑cyclone forecasts,
- reason about port‑level impacts, and
- recommend operational strategies.
The dataset fuses real‑world NOAA hurricane products, USCG port‑condition bulletins, and AIS‑derived port‑performance metrics collected from 2015 – 2023 to generate 117 k + question–answer pairs across three task groups:
| Task | Core Ability | Example Question |
|---|---|---|
| S1 | Situation Understanding | “Does Port X fall inside the uncertainty cone at T‑24 h?” |
| S2 | Impact Estimation | “What is the expected recovery duration (days)?” |
| S3 | Decision Reasoning | “Which port‑condition bulletin should be issued now?” |
Datasets/
CyPortQA/ # benchmark JSON + templates
Source_data/ # raw NOAA / USCG / experiment data (⇢ Git LFS)
Codes/
Data Collection/ # scripts that build Source_data/
Senario Encoding/ # converts raw data → Encoded_senario.JSON
Model Runing - Colab/ # Colab notebooks for baseline runs
Model Runing - Local/ # local inference scripts (Python ≥ 3.10)
o3 LLM Judger/ # evaluation prompts + judge harness
Performance Eval/ # aggregation & plotting utilities
requirements.txt # pip alternative to the conda env below
LICENSE # MIT
README.md # you are here
Note Large files (> 100 MB) are tracked with Git LFS to keep the repo lightweight.
# clone anonymously (no forks that reveal identity)
git clone https://github.com/anon-researcher/CyPortQA-Anon.git
cd CyPortQA-Anon
# create & activate environment
conda env create -f environment.yml
conda activate cyportqa
# ‑ or ‑
# pip install -r requirements.txt📦 environment.yml (click to expand)
name: cyportqa
channels:
- conda-forge
- defaults
dependencies:
- python=3.10
- pip
- git-lfs
- pip:
- torch>=2.2
- transformers>=4.43
- datasets>=2.19
- tiktoken>=0.6
- numpy
- pandas
- matplotlib
- tqdm
- scikit-learnOpen the notebook in Codes/Model Runing - Colab/ or the script in Model Runing - Local/ and supply your API key(s) when prompted:
export OPENAI_API_KEY=xxxxx # ChatGPT‑4o
export GEMINI_API_KEY=xxxxx # Gemini 2.5 Flash‑LiteThe runner downloads CyPortQA.JSON, performs inference, and writes model outputs to Datasets/Source_data/Experiments_data/<model_name>/.
python Codes/o3\ LLM\ Judger/judge.py \
--pred_dir Datasets/Source_data/Experiments_data/<model_name>/ \
--save_path Datasets/Source_data/Experiments_data/<model_name>_scored.jsonlpython Codes/Performance\ Eval/aggregate.py --root Datasets/Source_data/Experiments_data/CyPortQA.JSONroot list of QA itemsCyPortQA_template.JSONtemplate library (48 templates)Encoded_senario.JSONencoded scenario metadata (weather + port info)
Each QA record contains:
The benchmark does not redistribute raw NOAA imagery; scripts in
Data Collection/download them from the official public endpoints given a scenario timestamp.
- Place your inference script or notebook under
Codes/Model Runing -*. - Save predictions to
Datasets/Source_data/Experiments_data/<model_name>/(one JSONL per scenario). - Re‑run the judging and aggregation steps above.
# bookkeeping
__pycache__/
*.log
*.ipynb_checkpoints/
# credentials
.env
*.key
# large or generated artefacts
Datasets/Source_data/Experiments_data/
Datasets/Source_data/NOAA*/
Datasets/Source_data/CyPort*Events/
CyPortQA is released under the MIT License. See the LICENSE file for the full text.
@misc{cyportqa2025,
title = {CyPortQA: Benchmarking Multimodal LLMs for Cyclone Preparedness in Port Operation},
year = {2025},
note = {Anonymous submission, AAAI 2026}
}
{ "qa_id": "S1.1-000042", "scenario_id": "HARVEY_2017_PORT001_Tm24h", "task": "S1.1", // task category "question": "Does Port X …?", "answer": "True", // ground‑truth "metadata": { ... } // cone geoJSON, forecast table slice, etc. }