@@ -36,30 +36,46 @@ def get_lmevaljob_pod(client: DynamicClient, lmevaljob: LMEvalJob, timeout: int
3636 return lmeval_pod
3737
3838
39- def get_lmeval_tasks (min_downloads : int = 10000 ) -> List [str ]:
39+ def get_lmeval_tasks (min_downloads : int | float , max_downloads : int | float | None = None ) -> List [str ]:
4040 """
4141 Gets the list of supported LM-Eval tasks that have above a certain number of minimum downloads on HuggingFace.
4242
4343 Args:
44- min_downloads: The minimum number of downloads
44+ min_downloads: The minimum number of downloads or the percentile of downloads to use as a minimum
45+ max_downloads: The maximum number of downloads or the percentile of downloads to use as a maximum
4546
4647 Returns:
4748 List of LM-Eval task names
4849 """
49- if min_downloads < 1 :
50+ if min_downloads <= 0 :
5051 raise ValueError ("Minimum downloads must be greater than 0" )
5152
5253 lmeval_tasks = pd .read_csv (filepath_or_buffer = "tests/model_explainability/lm_eval/data/new_task_list.csv" )
5354
54- # filter for tasks that either exceed (min_downloads OR exist on the OpenLLM leaderboard)
55- # AND exist on LMEval AND do not include image data
55+ if isinstance (min_downloads , float ):
56+ if not 0 <= min_downloads <= 1 :
57+ raise ValueError ("Minimum downloads as a percentile must be between 0 and 1" )
58+ min_downloads = lmeval_tasks ["HF dataset downloads" ].quantile (q = min_downloads )
5659
60+ # filter for tasks that either exceed min_downloads OR exist on the OpenLLM leaderboard
61+ # AND exist on LMEval AND do not include image data
5762 filtered_df = lmeval_tasks [
5863 lmeval_tasks ["Exists" ]
5964 & (lmeval_tasks ["Dataset" ] != "MMMU/MMMU" )
6065 & ((lmeval_tasks ["HF dataset downloads" ] >= min_downloads ) | (lmeval_tasks ["OpenLLM leaderboard" ]))
6166 ]
6267
68+ # if max_downloads is provided, filter for tasks that have less than
69+ # or equal to the maximum number of downloads
70+ if max_downloads is not None :
71+ if (max_downloads <= 0 or max_downloads > max (lmeval_tasks ["HF dataset downloads" ])):
72+ raise ValueError ("Maximum downloads must be greater than 0 and less than the maximum number of downloads" )
73+ if isinstance (max_downloads , float ):
74+ if not 0 <= min_downloads <= 1 :
75+ raise ValueError ("Maximum downloads as a percentile must be between 0 and 1" )
76+ max_downloads = lmeval_tasks ["HF dataset downloads" ].quantile (q = max_downloads )
77+ filtered_df = filtered_df [filtered_df ["HF dataset downloads" ] <= max_downloads ]
78+
6379 # group tasks by dataset and extract the task with shortest name in the group
6480 unique_tasks = filtered_df .loc [filtered_df .groupby ("Dataset" )["Name" ].apply (lambda x : x .str .len ().idxmin ())]
6581
0 commit comments