"""可选在线示例：需要固定提交的 Ragas、openai SDK、凭据和可用的裁判模型。

会产生真实 API 调用和费用。本轮只核对了源码接口，没有运行在线评分。
先设置 EVAL_JUDGE_MODEL 和服务要求的凭据；不要把密钥写进代码或报告。
"""
import asyncio
import math
import os
from openai import AsyncOpenAI
from ragas.llms import llm_factory
from ragas.metrics.collections import Faithfulness


async def main():
    # 不硬编码可能变更的模型名称，由实验配置明确记录实际使用模型。
    model = os.environ["EVAL_JUDGE_MODEL"]
    async with AsyncOpenAI() as client:
        judge = llm_factory(model, client=client)
        scorer = Faithfulness(llm=judge)
        result = await scorer.ascore(
            user_input="签收十天发现质量问题，退货运费谁承担？",
            response="经核实属于质量问题时商家承担运费，并在一小时内完成退款。",
            retrieved_contexts=["经核实属于质量问题的退货，运费由商家承担。"],
        )
        # NaN 表示没有有效分数，不应伪装成 0 或 1，也不要写入严格 JSON 数值。
        value = float(result.value)
        print({"judge_model": model, "scored": math.isfinite(value),
               "score": value if math.isfinite(value) else None})


if __name__ == "__main__":
    asyncio.run(main())
