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.针对每个评估标准选择更好的回答，并给出你的理由;
3.综合评估每个评估标准下的结果，然后选出综合最优的答案，并给出理由；
"""
RUBRICS = [
"""
行业特性分析的完整性：评估答案中的行业特性分析是否全面，包括但不限于:
a. 产业链结构分析：上下游环节、主要产品与服务类型、成本结构、关键原材料来源
b. 行业驱动因素剖析：需求端（政策、消费趋势、宏观经济周期）、供给端（产能扩张、进入壁垒、技术迭代）
c. 周期属性与关键变量：准确把握行业所处发展阶段及特征，识别关键趋势和转折点
d. 监管与政策影响：政策倾斜、税收、环保、进出口限制等对未来格局的影响
e. 竞争格局描述：CRn（行业集中度）、主要玩家市占率变化、格局演化趋势
""",
"""
行业特性分析的深度：评估答案中能否挖掘出行业特性,包括但不限于:
a.对于行业相关分析(产业链结构、行业驱动因素、周期属性、监管与政策影响、竞争格局描述)不是泛泛而谈，有论据支撑
b.行业分析要给出整体结论，不能只罗列特性
""",
"""
行业特性分析逻辑性：评估答案中行业特性分析的逻辑性
a.论据支撑：每个结论需通过论据(数字/描述等)明确推导，解释变量间作用机制
b.各子论点应和金融问题有逻辑关系，非孤立罗列，确保逻辑自洽
c.各子论点应和结论有逻辑关系，非孤立罗列，确保逻辑自洽
"""
]

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