def METHOD_NAME(data: dict, external: dict) -> None:
    # dev split is used for few shot samples
    if data.get("_hf_split", "") == "dev":
        return
    # TODO: record cpu/gpu/memory info per predict pod
    global _g_llm
    with threading.Lock():
        if _g_llm is None:
            _g_llm = get_built_llm()
    global _g_benchmarks
    dataset_uri = external["dataset_uri"]
    dataset_name = dataset_uri.name
    if dataset_name not in _g_benchmarks:
        # TODO: use dataset_info to get benchmark
        _g_benchmarks[dataset_name] = get_benchmark(dataset_name)
    result = {}
    benchmark = _g_benchmarks[dataset_name]()
    for shot, show_name in few_shot_choices.items():
        prompt = benchmark.generate_prompt(
            data,
            few_shot=shot,
            dataset_uri=dataset_uri,
            max_length=max_prompt_length,
            len_tokens=_g_llm.calculate_tokens_length,
        )
        predict_result = _g_llm.do_predict(
            prompt,
            benchmark_type=benchmark.get_type(),
            max_new_tokens=max_new_tokens,
            predict_choice_by_logits=True,
        )
        result[show_name] = benchmark.calculate_score(predict_result, data)
        console.trace(f"prompt:\n {prompt}")
        console.trace(f"answer: {data['answer']}, predict: {result[show_name]}")
    evaluation.log(
        category="results",
        id=f"{benchmark.get_name()}-{external['index']}",
        metrics={
            "input": benchmark.make_input_features_display(data),
            "output": result,
        },
    )