llama-nv-embed-reasoning-3b / eval_bright.py
jiaruic's picture
Update model name
6f0bf03 verified
Raw
History Blame
3.92 kB
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0.
#!/usr/bin/env python3
"""
MTEB evaluation for nvidia/llama-nv-embed-reasoning-3b on Bright(v1.1) benchmark.
Usage:
# pip install mteb==2.8.1
python eval_bright.py --model_name nvidia/llama-nv-embed-reasoning-3b --benchmark "BRIGHT(v1.1)" --task-list BrightBiologyRetrieval
"""
import argparse
import os
from pathlib import Path
import mteb
from mteb_llama_nv_embed_reasoning_3b import LLAMA_NV_EMBED_REASONING_3B_META
def main() -> None:
parser = argparse.ArgumentParser(
description="Run MTEB evaluation for nvidia/llama-nv-embed-reasoning-3b (text embedding)."
)
parser.add_argument(
"--model_name",
type=str,
default="nvidia/llama-nv-embed-reasoning-3b",
help="HuggingFace model id (used for result filename).",
)
parser.add_argument(
"--batch_size",
type=int,
default=2,
help="Encode batch size.",
)
parser.add_argument(
"--results_folder",
type=str,
default="results_json",
help="Folder to save JSON results.",
)
parser.add_argument(
"--predictions_folder",
type=str,
default=None,
help="Optional folder to save predictions.",
)
parser.add_argument(
"--benchmark",
type=str,
default="BRIGHT(v1.1)",
help="Benchmark name (e.g. BRIGHT(v1.1), MTEB(eng, v2), BEIR).",
)
parser.add_argument(
"--task-list",
dest="task_list",
type=str,
nargs="*",
default=None,
help="Optional list of task class names. If not set, all tasks in the benchmark are run.",
)
parser.add_argument(
"--overwrite_strategy",
type=str,
default="always",
choices=["always", "never", "only-missing", "only-cache"],
help="Overwrite strategy for cached results.",
)
parser.add_argument(
"--hf-token",
dest="hf_token",
type=str,
default=None,
help="Hugging Face token (or set HF_TOKEN / HUGGING_FACE_HUB_TOKEN). ",
)
args = parser.parse_args()
hf_token = args.hf_token or os.environ.get("HF_TOKEN") or os.environ.get("HUGGING_FACE_HUB_TOKEN")
if hf_token:
os.environ["HUGGING_FACE_HUB_TOKEN"] = hf_token
model = LLAMA_NV_EMBED_REASONING_3B_META
all_tasks = mteb.get_benchmark(args.benchmark).tasks
all_tasks_names = " ".join([task.__class__.__name__ for task in all_tasks])
print(f"Available tasks in benchmark {args.benchmark}: {all_tasks_names}")
if args.task_list:
print(f"Running evaluation on specified tasks: {args.task_list}")
requested = set(args.task_list)
tasks = [t for t in all_tasks if t.__class__.__name__ in requested]
found = {t.__class__.__name__ for t in tasks}
missing = requested - found
if missing:
print(f"Warning: tasks not found (skipped): {missing}")
else:
print("Running evaluation on all tasks in the benchmark.")
tasks = all_tasks
tasks_names = " ".join([task.__class__.__name__ for task in tasks])
print(f"Evaluating tasks: {tasks_names}")
results = mteb.evaluate(
model=model,
tasks=tasks,
encode_kwargs={"batch_size": args.batch_size},
prediction_folder=args.predictions_folder,
overwrite_strategy=args.overwrite_strategy,
)
print(results)
out_dir = Path(args.results_folder)
out_dir.mkdir(parents=True, exist_ok=True)
model_slug = args.model_name.replace("/", "_")
out_path = out_dir / f"{model_slug}-{tasks_names.replace(' ', '-')}.json"
out_path.write_text(results.model_dump_json(indent=2), encoding="utf-8")
print(f"Results saved to {out_path}")
if __name__ == "__main__":
main()