from typing import List
from pydantic import Field
from rm_gallery.core.reward.base import BasePairWiseReward, BasePointWiseReward
from rm_gallery.gallery.rm.finance.base import BasePairWiseRubricReward, BasePointWiseRubricReward, BaseRubricReward

DESC = """
你是一个专业的金融评估专家，你需要评估金融助手回答的整体逻辑。现在会提供给你一个金融问题以及两位金融助手的回答，同时提供若干评估标准，
你需要逐条理解评估标准，根据以下评估步骤，选择更好的答案。
#评估步骤
1.针对每个评估标准选择更好的回答，并给出你的理由；
2.综合评估每个评估标准下的结果，然后选出综合最优的答案，并给出理由；
"""
RUBRICS = [
"""
整体逻辑是否清晰：评估答案整体逻辑是否清晰，包括但不限于：
a.是否采用“总-分-总”的格式，即开头说出结论，中间是各个子论点，结尾给出总结；
"""
,
"""
整体逻辑是否完备：评估答案整体逻辑相对金融问题是否完备，包括但不限于：
a.子论点是否足够推导出结论；
b.整体逻辑是否全面回答了金融问题;
"""
,
"""
整体逻辑是否自洽：评估答案整体逻辑是否自洽，包括但不限于：
a.各子论点应和结论有逻辑关系，非孤立罗列，确保逻辑自洽；
b.各子论点内容没有重叠，从不同角度论证结论；
c.各子论点内容没有矛盾或者冲突
"""
]

class OverallLogicReward(BasePairWiseRubricReward,BasePairWiseReward):
    rubrics: List[str] = Field(default=RUBRICS, description="评估标准")
    desc: str = Field(default=DESC, description="任务描述")
