Repository: open-compass/opencompass
Issue: [Bug] 使用Circular方式评测，few-shot数据拼接错误
Root cause: Algorithmic Error

### 先决条件

- [X] 我已经搜索过 [问题](https://github.com/open-compass/opencompass/issues/) 和 [讨论](https://github.com/open-compass/opencompass/discussions) 但未得到预期的帮助。
- [X] 错误在 [最新版本](https://github.com/open-compass/opencompass) 中尚未被修复。

### 问题类型

我正在使用官方支持的任务/模型/数据集进行评估。

### 环境

{'CUDA available': True,
 'CUDA_HOME': '/usr/local/cuda',
 'GCC': 'gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0',
 'GPU 0,1,2,3': 'NVIDIA A800-SXM4-80GB',
 'MMEngine': '0.10.5',
 'MUSA available': False,
 'NVCC': 'Cuda compilation tools, release 12.1, V12.1.105',
 'OpenCV': '4.10.0',
 'PyTorch': '2.1.0+cu121',
 'PyTorch compiling details': 'PyTorch built with:\n'
                              '  - GCC 9.3\n'
                              '  - C++ Version: 201703\n'
                              '  - Intel(R) oneAPI Math Kernel Library Version '
                              '2022.2-Product Build 20220804 for Intel(R) 64 '
                              'architecture applications\n'
                              '  - Intel(R) MKL-DNN v3.1.1 (Git Hash '
                              '64f6bcbcbab628e96f33a62c3e975f8535a7bde4)\n'
                              '  - OpenMP 201511 (a.k.a. OpenMP 4.5)\n'
                              '  - LAPACK is enabled (usually provided by '
                              'MKL)\n'
                              '  - NNPACK is enabled\n'
                              '  - CPU capability usage: AVX512\n'
                              '  - CUDA Runtime 12.1\n'
                              '  - NVCC architecture flags: '
                              '-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_70,code=sm_70;-gencode;arch=compute_75,code=sm_75;-gencode;arch=compute_80,code=sm_80;-gencode;arch=compute_86,code=sm_86;-gencode;arch=compute_90,code=sm_90\n'
                              '  - CuDNN 8.9.2\n'
                              '  - Magma 2.6.1\n'
                              '  - Build settings: BLAS_INFO=mkl, '
                              'BUILD_TYPE=Release, CUDA_VERSION=12.1, '
                              'CUDNN_VERSION=8.9.2, '
                              'CXX_COMPILER=/opt/rh/devtoolset-9/root/usr/bin/c++, '
                              'CXX_FLAGS= -D_GLIBCXX_USE_CXX11_ABI=0 '
                              '-fabi-version=11 -fvisibility-inlines-hidden '
                              '-DUSE_PTHREADPOOL -DNDEBUG -DUSE_KINETO '
                              '-DLIBKINETO_NOROCTRACER -DUSE_FBGEMM '
                              '-DUSE_QNNPACK -DUSE_PYTORCH_QNNPACK '
                              '-DUSE_XNNPACK -DSYMBOLICATE_MOBILE_DEBUG_HANDLE '
                              '-O2 -fPIC -Wall -Wextra -Werror=return-type '
                              '-Werror=non-virtual-dtor -Werror=bool-operation '
                              '-Wnarrowing -Wno-missing-field-initializers '
                              '-Wno-type-limits -Wno-array-bounds '
                              '-Wno-unknown-pragmas -Wno-unused-parameter '
                              '-Wno-unused-function -Wno-unused-result '
                              '-Wno-strict-overflow -Wno-strict-aliasing '
                              '-Wno-stringop-overflow -Wno-psabi '
                              '-Wno-error=pedantic -Wno-error=old-style-cast '
                              '-Wno-invalid-partial-specialization '
                              '-Wno-unused-private-field '
                              '-Wno-aligned-allocation-unavailable '
                              '-Wno-missing-braces -fdiagnostics-color=always '
                              '-faligned-new -Wno-unused-but-set-variable '
                              '-Wno-maybe-uninitialized -fno-math-errno '
                              '-fno-trapping-math -Werror=format '
                              '-Werror=cast-function-type '
                              '-Wno-stringop-overflow, LAPACK_INFO=mkl, '
                              'PERF_WITH_AVX=1, PERF_WITH_AVX2=1, '
                              'PERF_WITH_AVX512=1, '
                              'TORCH_DISABLE_GPU_ASSERTS=ON, '
                              'TORCH_VERSION=2.1.0, USE_CUDA=ON, USE_CUDNN=ON, '
                              'USE_EXCEPTION_PTR=1, USE_GFLAGS=OFF, '
                              'USE_GLOG=OFF, USE_MKL=ON, USE_MKLDNN=ON, '
                              'USE_MPI=OFF, USE_NCCL=1, USE_NNPACK=ON, '
                              'USE_OPENMP=ON, USE_ROCM=OFF, \n',
 'Python': '3.10.12 (main, Jul  5 2023, 18:54:27) [GCC 11.2.0]',
 'TorchVision': '0.16.0+cu121',
 'lmdeploy': "not installed:No module named 'lmdeploy'",
 'numpy_random_seed': 2147483648,
 'opencompass': '0.3.3+f390697',
 'sys.platform': 'linux',
 'transformers': '4.44.2'}

### 重现问题 - 代码/配置示例

for ds, t in [
    (ceval_datasets, CircularCEvalDataset),
    # (mmlu_datasets, CircularMMLUDataset),
    # (cmmlu_datasets, CircularCMMLUDataset),
    # (hellaswag_datasets, CircularHSWAGDataset),
    # (ARC_e_datasets, CircularARCDataset),
    # (ARC_c_datasets, CircularARCDataset),
    # (commonsenseqa_datasets, CircularCSQADataset),
    # (obqa_datasets, CircularOBQADataset),
    # (race_datasets, CircularRaceDataset),
]:
    for d in ds:
        d['type'] = t
        d['abbr'] = d['abbr'] + '-circular-4'
        d['eval_cfg']['evaluator'] = {'type': CircularEvaluator, 'circular_pattern': 'circular'}
        d['circular_patterns'] = 'circular'


datasets = sum([v for k, v in locals().items() if k.endswith("_datasets") or k == 'datasets'], [])
models = sum([v for k, v in locals().items() if k.endswith("_model")], [])

# config summarizer
other_summary_groups = [
    {'name': 'average',
    #  'subsets': ['ceval', 'mmlu', 'cmmlu', 'hellaswag', 'ARC-e', 'ARC-c', 'commonsense_qa', 'openbookqa_fact', 'race-middle', 'race-high']},
     'subsets': ['ceval']},
]
origin_summary_groups = sum([v for k, v in locals().items() if k.endswith("_summary_groups")], [])
new_summary_groups = []
for item in origin_summary_groups:
    new_summary_groups.append(
        {
            'name': item['name'] + '-circular-4',
            'subsets': [i + '-circular-4' for i in item['subsets']],
        }
    )
summarizer = dict(
    type=CircularSummarizer,
    metric_types=['acc_origin', 'perf_circular'],
    dataset_abbrs = [
        'average-circular-4',
        'ceval-circular-4',
        'mmlu-circular-4',
        'cmmlu-circular-4',
        'hellaswag-circular-4',
        'ARC-e-circular-4',
        'ARC-c-circular-4',
        'commonsense_qa-circular-4',
        'openbookqa_fact-circular-4',
        'race-middle-circular-4',
        'race-high-circular-4',
        'ceval-humanities-circular-4',
        'ceval-stem-circular-4',
        'ceval-social-science-circular-4',
        'ceval-other-circular-4',
        'mmlu-humanities-circular-4',
        'mmlu-stem-circular-4',
        'mmlu-social-science-circular-4',
        'mmlu-other-circular-4',
        'cmmlu-humanities-circular-4',
        'cmmlu-stem-circular-4',
        'cmmlu-social-science-circular-4',
        'cmmlu-other-circular-4',
        'cmmlu-china-specific-circular-4',
    ],
    summary_groups=new_summary_groups,
)

### 重现问题 - 命令或脚本

"origin_prompt": "以下是中国关于大学编程考试的单项选择题，请选出其中的正确答案。\n在有n(n>1000)个元素的升序数组A中查找关键字x。查找算法的伪代码如下所示。\nk=0;\nwhile(k<n且A[k]<x)k=k+3；\nif(k<n且A[k]==x)查找成功；\nelse if(k-1<n且A[k-1]==x)查找成功；\nelse if(k-2<n且A[k-2]==x)查找成功；\nelse 查找失败；\n本算法与折半查找算法相比，有可能具有更少比较次数的情形是____\nA. 当 x 不在数组中\nB. 当 x 接近数组开头处\nC. 当 x 接近数组结尾处\nD. 当 x 位于数组中间位置\n答案: \nB\n以下是中国关于大学编程考试的单项选择题，请选出其中的正确答案。\n先序序列为a，b，c的不同二叉树的个数是____\nA. 3\nB. 5\nC. 4\nD. 6\n答案: \nB\n以下是中国关于大学编程考试的单项选择题，请选出其中的正确答案。\n若森林F有15条边、25个结点，则F包含树的个数是____\nA. 8\nB. 9\nC. 10\nD. 11\n答案: \nC\n以下是中国关于大学编程考试的单项选择题，请选出其中的正确答案。\n#include<iostream.h>\n#define SQR(x) x*x\nvoid main()\n{\nint a=10,k=2,m=1;\na/=SQR(k+m);cout<<a;\n}\n执行上面的C++程序后，a的值是____。\nA. 10\nB. 2\nC. 9\nD. 0\n答案: \nB\n以下是中国关于大学编程考试的单项选择题，请选出其中的正确答案。\n在C++中，编写一个内联函数func,使用类型int的参数，求其平方并返回，返回值为int类型，下列定义____是正确的\nA. int func(int x) {return (x*x);}\nB. inline int func(int x) {return (x*x);}\nC. int inline func(int x) {return (x*x);}\nD. int func(int x) {return (x*x);}\n答案: \nB\n以下是中国关于大学编程考试的单项选择题，请选出其中的正确答案。\n当采用分块查找时，数据的组织方式为____\nA. 数据分成若干块， 每块内数据不必有序， 但块间必须有序， 每块内最大（ 或最小） 的数据组成索引块\nB. 数据分成若干块， 每块内数据有序， 但块间必须有序， 每块内最大（ 或最小） 的数据组成索引块\nC. 数据分成若干块， 每块（ 除最后一块外） 中数据个数需相同\nD. 数据分成若干块， 每块内数据有序\n答案: "
最后的答案缺少 \n

### 重现问题 - 错误信息

"prediction": "以下是中国关于职业教育管理学的单项选择题，请选出其中的正确答案。\n在组织中，______是组织的细胞，是组织的最小单元。\nA. 个人\nB. 部门\nC. 群体\nD. 组织\n答案: A以下是中国关于职业教育管理学的单项选择题，请选出其中的正确答案。\n在组织中，______是组织的细胞，是组织的最小单元。\nA. 个人\nB. 部门\nC. 群体\nD. 组织\n答案: A以下是中国关于职业教育管理学的单项选择题，请选出其中的正确答案。\n在组织中，______是组织的细胞，是组织的最小单元。\nA. 个人\nB. 部门\nC. 群体\nD. 组织\n答案: A以下是中国关于职业教育管理学的单项选择题，请选出其中的正确答案。\n在组织中，______是组织的细胞，是组织的最小单元。\nA. 个人\nB. 部门\nC. 群体\nD. 组织\n答案: A以下是中国关于职业教育管理学的单项选择题，请选出其中的正确答案。\n在组织中，______是组织的细胞，是组织的最小单元。\nA. 个人\nB. 部门\nC. 群体\nD. 组织\n答案: A以下是中国关于职业教育管理学的单项选择题，请选出其中的正确答案。\n在组织中，______是组织的细胞，是组织的最小单元。\nA. 个人\nB. 部门\nC. 群体\nD. 组织\n答案: A以下是中国关于职业教育管理学的单项选择题，请选出其中的正确答案。\n在组织中，______是组织的细胞，是组织的最小单元。\nA. 个人\nB. 部门\nC. 群体\nD. 组织\n答案: A以下是中国关于职业教育管理学的单项选择题，请选出其中的正确答案。\n在组织中，______是组织的细胞，是组织的最小单元。\nA. 个人\nB. 部门\nC. 群体\nD. 组织\n答案: A以下是中国关于职业教育管理学的",
导致模型无法正确输出答案

### 其他信息

之前因为generation config导入不进去，对代码进行了修改，使用模型generation config作为导入