feat(report): expose headline evidence details
This commit is contained in:
@@ -184,25 +184,33 @@ func TestDecorateReportV1BuildsHotDaySummary(t *testing.T) {
|
||||
report := sampleReportForV1()
|
||||
report.ModelEvents = []ModelEvent{
|
||||
{
|
||||
EventType: "new_model",
|
||||
ModelName: "DeepSeek-V4-Flash",
|
||||
ProviderName: "DeepSeek",
|
||||
OperatorName: "OpenRouter",
|
||||
TrustLabel: "聚合来源",
|
||||
Baseline: "首次出现",
|
||||
Summary: "新模型进入情报池,值得重新评估低成本编码默认选择。",
|
||||
Priority: 95,
|
||||
EventType: "new_model",
|
||||
ModelName: "DeepSeek-V4-Flash",
|
||||
ProviderName: "DeepSeek",
|
||||
OperatorName: "OpenRouter",
|
||||
TrustLabel: "聚合来源",
|
||||
Baseline: "首次出现",
|
||||
Summary: "新模型进入情报池,值得重新评估低成本编码默认选择。",
|
||||
SourceKindLabel: "模型快照",
|
||||
PrimarySource: "OpenRouter / region_pricing",
|
||||
UpdatedAt: "2026-05-13 09:30",
|
||||
EvidenceDetail: "models.created_at = 今日,且已存在最新价格快照",
|
||||
Priority: 95,
|
||||
},
|
||||
{
|
||||
EventType: "price_cut",
|
||||
ModelName: "qwen-vl-max",
|
||||
ProviderName: "Alibaba",
|
||||
OperatorName: "DashScope",
|
||||
TrustLabel: "官方来源",
|
||||
Baseline: "较昨日 -18%",
|
||||
Summary: "价格下降已足以影响视觉模型默认选择。",
|
||||
PriceChangePct: -18,
|
||||
Priority: 90,
|
||||
EventType: "price_cut",
|
||||
ModelName: "qwen-vl-max",
|
||||
ProviderName: "Alibaba",
|
||||
OperatorName: "DashScope",
|
||||
TrustLabel: "官方来源",
|
||||
Baseline: "较昨日 -18%",
|
||||
Summary: "价格下降已足以影响视觉模型默认选择。",
|
||||
SourceKindLabel: "价格快照",
|
||||
PrimarySource: "pricing_history",
|
||||
UpdatedAt: "2026-05-13 10:00",
|
||||
EvidenceDetail: "pricing_history 记录到输入价格较昨日下降 18%",
|
||||
PriceChangePct: -18,
|
||||
Priority: 90,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -277,6 +285,22 @@ func TestGenerateMarkdownV3IncludesTencentSubscriptionSection(t *testing.T) {
|
||||
ModelPreview: "hy3-preview",
|
||||
},
|
||||
}
|
||||
report.ModelEvents = []ModelEvent{
|
||||
{
|
||||
EventType: "new_model",
|
||||
ModelName: "DeepSeek-V4-Flash",
|
||||
ProviderName: "DeepSeek",
|
||||
OperatorName: "OpenRouter",
|
||||
TrustLabel: "聚合来源",
|
||||
Baseline: "首次出现",
|
||||
Summary: "新模型进入情报池,值得重新评估低成本编码默认选择。",
|
||||
SourceKindLabel: "模型快照",
|
||||
PrimarySource: "OpenRouter / region_pricing",
|
||||
UpdatedAt: "2026-05-13 09:30",
|
||||
EvidenceDetail: "models.created_at = 今日,且已存在最新价格快照",
|
||||
Priority: 95,
|
||||
},
|
||||
}
|
||||
decorateReportV1(report)
|
||||
|
||||
if err := generateMarkdownV3(report, path); err != nil {
|
||||
@@ -295,6 +319,9 @@ func TestGenerateMarkdownV3IncludesTencentSubscriptionSection(t *testing.T) {
|
||||
"## 今日变化",
|
||||
"## 场景推荐",
|
||||
"## 完整数据附录",
|
||||
"主来源: OpenRouter / region_pricing",
|
||||
"更新时间: 2026-05-13 09:30",
|
||||
"判定依据: models.created_at = 今日,且已存在最新价格快照",
|
||||
"## 💳 腾讯云套餐订阅价",
|
||||
"通用 Token Plan Lite",
|
||||
"Hy Token Plan Max",
|
||||
@@ -313,14 +340,18 @@ func TestGenerateHTMLV3IncludesTencentSubscriptionSection(t *testing.T) {
|
||||
report := sampleReportForV1()
|
||||
report.ModelEvents = []ModelEvent{
|
||||
{
|
||||
EventType: "new_model",
|
||||
ModelName: "DeepSeek-V4-Flash",
|
||||
ProviderName: "DeepSeek",
|
||||
OperatorName: "OpenRouter",
|
||||
TrustLabel: "聚合来源",
|
||||
Baseline: "首次出现",
|
||||
Summary: "新模型进入情报池,值得重新评估低成本编码默认选择。",
|
||||
Priority: 95,
|
||||
EventType: "new_model",
|
||||
ModelName: "DeepSeek-V4-Flash",
|
||||
ProviderName: "DeepSeek",
|
||||
OperatorName: "OpenRouter",
|
||||
TrustLabel: "聚合来源",
|
||||
Baseline: "首次出现",
|
||||
Summary: "新模型进入情报池,值得重新评估低成本编码默认选择。",
|
||||
SourceKindLabel: "模型快照",
|
||||
PrimarySource: "OpenRouter / region_pricing",
|
||||
UpdatedAt: "2026-05-13 09:30",
|
||||
EvidenceDetail: "models.created_at = 今日,且已存在最新价格快照",
|
||||
Priority: 95,
|
||||
},
|
||||
}
|
||||
report.TencentSubscriptionPlans = []SubscriptionPlanInfo{
|
||||
@@ -354,6 +385,10 @@ func TestGenerateHTMLV3IncludesTencentSubscriptionSection(t *testing.T) {
|
||||
"今日头条",
|
||||
"DeepSeek-V4-Flash",
|
||||
"首次出现",
|
||||
"主来源",
|
||||
"更新时间",
|
||||
"判定依据",
|
||||
"模型快照",
|
||||
"场景推荐",
|
||||
"完整数据附录",
|
||||
"官方免费",
|
||||
@@ -371,25 +406,33 @@ func TestBuildHeadlineItemsUsesModelEvents(t *testing.T) {
|
||||
report := sampleReportForV1()
|
||||
report.ModelEvents = []ModelEvent{
|
||||
{
|
||||
EventType: "price_cut",
|
||||
ModelName: "glm-5",
|
||||
ProviderName: "Zhipu",
|
||||
OperatorName: "Zhipu",
|
||||
TrustLabel: "官方来源",
|
||||
Baseline: "较昨日 -25%",
|
||||
Summary: "价格下降已足以影响中文通用场景默认选型。",
|
||||
PriceChangePct: -25,
|
||||
Priority: 100,
|
||||
EventType: "price_cut",
|
||||
ModelName: "glm-5",
|
||||
ProviderName: "Zhipu",
|
||||
OperatorName: "Zhipu",
|
||||
TrustLabel: "官方来源",
|
||||
Baseline: "较昨日 -25%",
|
||||
Summary: "价格下降已足以影响中文通用场景默认选型。",
|
||||
SourceKindLabel: "价格快照",
|
||||
PrimarySource: "pricing_history",
|
||||
UpdatedAt: "2026-05-13 10:00",
|
||||
EvidenceDetail: "pricing_history 记录到输入价格较昨日下降 25%",
|
||||
PriceChangePct: -25,
|
||||
Priority: 100,
|
||||
},
|
||||
{
|
||||
EventType: "new_model",
|
||||
ModelName: "DeepSeek-V4-Flash",
|
||||
ProviderName: "DeepSeek",
|
||||
OperatorName: "OpenRouter",
|
||||
TrustLabel: "聚合来源",
|
||||
Baseline: "首次出现",
|
||||
Summary: "新模型进入情报池,值得重新评估低成本编码默认选择。",
|
||||
Priority: 90,
|
||||
EventType: "new_model",
|
||||
ModelName: "DeepSeek-V4-Flash",
|
||||
ProviderName: "DeepSeek",
|
||||
OperatorName: "OpenRouter",
|
||||
TrustLabel: "聚合来源",
|
||||
Baseline: "首次出现",
|
||||
Summary: "新模型进入情报池,值得重新评估低成本编码默认选择。",
|
||||
SourceKindLabel: "模型快照",
|
||||
PrimarySource: "OpenRouter / region_pricing",
|
||||
UpdatedAt: "2026-05-13 09:30",
|
||||
EvidenceDetail: "models.created_at = 今日,且已存在最新价格快照",
|
||||
Priority: 90,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -404,39 +447,54 @@ func TestBuildHeadlineItemsUsesModelEvents(t *testing.T) {
|
||||
if items[0].Baseline != "较昨日 -25%" {
|
||||
t.Fatalf("expected event baseline to be preserved, got %+v", items[0])
|
||||
}
|
||||
if items[0].SourceKindLabel != "价格快照" || items[0].PrimarySource != "pricing_history" {
|
||||
t.Fatalf("expected event evidence fields to be preserved, got %+v", items[0])
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildHeadlineItemsDeduplicatesSameModel(t *testing.T) {
|
||||
report := sampleReportForV1()
|
||||
report.ModelEvents = []ModelEvent{
|
||||
{
|
||||
EventType: "price_cut",
|
||||
ModelName: "OpenAI: GPT-4o",
|
||||
ProviderName: "OpenAI",
|
||||
TrustLabel: "官方来源",
|
||||
Baseline: "较昨日 -20%",
|
||||
Summary: "价格下降影响默认成本。",
|
||||
PriceChangePct: -20,
|
||||
Priority: 95,
|
||||
EventType: "price_cut",
|
||||
ModelName: "OpenAI: GPT-4o",
|
||||
ProviderName: "OpenAI",
|
||||
TrustLabel: "官方来源",
|
||||
Baseline: "较昨日 -20%",
|
||||
Summary: "价格下降影响默认成本。",
|
||||
SourceKindLabel: "价格快照",
|
||||
PrimarySource: "pricing_history",
|
||||
UpdatedAt: "2026-05-13 10:00",
|
||||
EvidenceDetail: "pricing_history 记录到输入价格较昨日下降 20%",
|
||||
PriceChangePct: -20,
|
||||
Priority: 95,
|
||||
},
|
||||
{
|
||||
EventType: "price_increase",
|
||||
ModelName: "OpenAI: GPT-4o",
|
||||
ProviderName: "OpenAI",
|
||||
TrustLabel: "官方来源",
|
||||
Baseline: "较昨日 +5%",
|
||||
Summary: "同日另有上调记录。",
|
||||
PriceChangePct: 5,
|
||||
Priority: 80,
|
||||
EventType: "price_increase",
|
||||
ModelName: "OpenAI: GPT-4o",
|
||||
ProviderName: "OpenAI",
|
||||
TrustLabel: "官方来源",
|
||||
Baseline: "较昨日 +5%",
|
||||
Summary: "同日另有上调记录。",
|
||||
SourceKindLabel: "价格快照",
|
||||
PrimarySource: "pricing_history",
|
||||
UpdatedAt: "2026-05-13 11:00",
|
||||
EvidenceDetail: "pricing_history 记录到输入价格较昨日上涨 5%",
|
||||
PriceChangePct: 5,
|
||||
Priority: 80,
|
||||
},
|
||||
{
|
||||
EventType: "new_model",
|
||||
ModelName: "Claude Opus 4.7",
|
||||
ProviderName: "Anthropic",
|
||||
TrustLabel: "聚合来源",
|
||||
Baseline: "首次出现",
|
||||
Summary: "新模型上线。",
|
||||
Priority: 70,
|
||||
EventType: "new_model",
|
||||
ModelName: "Claude Opus 4.7",
|
||||
ProviderName: "Anthropic",
|
||||
TrustLabel: "聚合来源",
|
||||
Baseline: "首次出现",
|
||||
Summary: "新模型上线。",
|
||||
SourceKindLabel: "模型快照",
|
||||
PrimarySource: "OpenRouter / region_pricing",
|
||||
UpdatedAt: "2026-05-13 09:00",
|
||||
EvidenceDetail: "models.created_at = 今日,且已存在最新价格快照",
|
||||
Priority: 70,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -449,3 +507,30 @@ func TestBuildHeadlineItemsDeduplicatesSameModel(t *testing.T) {
|
||||
t.Fatalf("expected duplicate model event to be removed, got %+v", items)
|
||||
}
|
||||
}
|
||||
|
||||
func TestHeadlineItemFromModelEventIncludesEvidenceFields(t *testing.T) {
|
||||
item := headlineItemFromModelEvent(ModelEvent{
|
||||
EventType: "new_model",
|
||||
ModelName: "DeepSeek-V4-Flash",
|
||||
TrustLabel: "聚合来源",
|
||||
Baseline: "首次出现",
|
||||
Summary: "新模型进入情报池。",
|
||||
SourceKindLabel: "模型快照",
|
||||
PrimarySource: "OpenRouter / region_pricing",
|
||||
UpdatedAt: "2026-05-13 09:30",
|
||||
EvidenceDetail: "models.created_at = 今日,且已存在最新价格快照",
|
||||
})
|
||||
|
||||
if item.SourceKindLabel != "模型快照" {
|
||||
t.Fatalf("expected source kind label to be propagated, got %+v", item)
|
||||
}
|
||||
if item.PrimarySource != "OpenRouter / region_pricing" {
|
||||
t.Fatalf("expected primary source to be propagated, got %+v", item)
|
||||
}
|
||||
if item.UpdatedAt != "2026-05-13 09:30" {
|
||||
t.Fatalf("expected updated at to be propagated, got %+v", item)
|
||||
}
|
||||
if item.EvidenceDetail == "" {
|
||||
t.Fatalf("expected evidence detail to be populated, got %+v", item)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user