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. 传导机制清晰：能够清晰阐述从宏观指标/宏观概念/宏观事件变化到市场或经济结果的因果链条（例如：利率下降 → 融资成本降低 → 投资需求增加 → 大宗商品需求提升）
""",
"""
宏观分析的深度：评估答案中的宏观分析是否专业有深度,包括但不限于:
a. 多维度分析：
    ⅰ. 时间维度：需体现金融事件影响的时序性，区分短期与长期影响，展示影响的阶段性演变特征 
    ⅱ. 多层次分析：构建从宏观到微观的分层分析框架，必须覆盖影响市场的核心驱动维度（政策、资金、基本面、外部环境、行业、公司等）
b. 量化与定性结合：在可能的情况下使用量化分析（模型、历史回归、敏感性分析），并辅以定性判断进行解释
c. 案例分析：可以通过历史的案例进行补充分析
"""
,
"""
宏观分析逻辑性：评估答案中宏观分析的逻辑性
a.论据支撑：每个结论需通过论据(数字/描述等)明确推导，解释变量间作用机制
b.各子论点应和金融问题有逻辑关系，非孤立罗列，确保逻辑自洽
c.各子论点应和结论有逻辑关系，非孤立罗列，确保逻辑自洽
"""

]

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