Files
llm-intelligence/scripts/import_bytedance_pricing_test.go
phamnazage-jpg 6fe3b484f1
Some checks failed
CI / go-test (push) Has been cancelled
CI / frontend-build (push) Has been cancelled
CI / docker-build (push) Has been cancelled
feat(pricing): add cucloud and bytedance payg importers
- Add import_cucloud_pricing.go for 联通云 payg 公开价抓取
- Add import_bytedance_pricing.go for 火山引擎/ByteDance Ark 定价导入
- Include test files and sample testdata for both importers
- Update plan catalog inventory docs and seeds
- Add cucloud pricing importer implementation plan
- Align pipeline scripts and smoke gate tests
2026-05-22 15:28:13 +08:00

83 lines
3.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//go:build llm_script
package main
import (
"bytes"
"os"
"path/filepath"
"strings"
"testing"
)
func TestParseBytedanceArkPricingCatalogBuildsRecords(t *testing.T) {
raw, err := os.ReadFile(filepath.Join("testdata", "bytedance_ark_pricing_sample.txt"))
if err != nil {
t.Fatalf("读取 fixture 失败: %v", err)
}
records, err := parseBytedanceArkPricingCatalog(string(raw))
if err != nil {
t.Fatalf("parseBytedanceArkPricingCatalog 返回错误: %v", err)
}
if len(records) != 20 {
t.Fatalf("期望 20 条火山方舟价格记录,实际 %d", len(records))
}
recordMap := make(map[string]officialPricingRecord, len(records))
for _, record := range records {
recordMap[record.ModelID] = record
}
if recordMap["bytedance-doubao-seed-2-0-pro"].InputPrice != 3.2 || recordMap["bytedance-doubao-seed-2-0-pro"].OutputPrice != 16.0 {
t.Fatalf("doubao-seed-2.0-pro 基线价格错误: %+v", recordMap["bytedance-doubao-seed-2-0-pro"])
}
if recordMap["bytedance-doubao-seed-1-8"].OutputPrice != 2.0 {
t.Fatalf("doubao-seed-1.8 应取首个阶梯输出价 2.0,实际 %v", recordMap["bytedance-doubao-seed-1-8"].OutputPrice)
}
if recordMap["bytedance-glm-4-7"].ProviderName != "Zhipu AI" || recordMap["bytedance-glm-4-7"].InputPrice != 2.0 || recordMap["bytedance-glm-4-7"].OutputPrice != 8.0 {
t.Fatalf("glm-4.7 解析错误: %+v", recordMap["bytedance-glm-4-7"])
}
if recordMap["bytedance-deepseek-v3-2"].ProviderName != "DeepSeek" {
t.Fatalf("deepseek-v3.2 provider 归一化错误: %+v", recordMap["bytedance-deepseek-v3-2"])
}
if recordMap["bytedance-doubao-1-5-vision-pro"].Modality != "multimodal" {
t.Fatalf("doubao-1.5-vision-pro modality 错误: %+v", recordMap["bytedance-doubao-1-5-vision-pro"])
}
if _, ok := recordMap["bytedance-doubao-embedding-vision"]; ok {
t.Fatalf("当前 schema 不支持仅输入计费的向量模型,不应误入库")
}
}
func TestExtractBytedanceArkPricingMarkdownFromRouterData(t *testing.T) {
html := `<script>window._ROUTER_DATA = {"loaderData":{"docs/(libid)/(docid$)/page":{"curDoc":{"MDContent":"## 在线推理(常规)\n|模型名称 |条件 |输入 |缓存存储 |缓存输入 |输出 |\n|---|---|---|---|---|---|\n|doubao\\-seed\\-2.0\\-mini |输入长度 [0, 32] |0.2 |0.017 |0.04 |2.0 |"}}}}</script>`
markdown, err := extractBytedanceArkPricingMarkdown(html)
if err != nil {
t.Fatalf("extractBytedanceArkPricingMarkdown 返回错误: %v", err)
}
if !strings.Contains(markdown, "doubao\\-seed\\-2.0\\-mini") {
t.Fatalf("提取后的 markdown 缺少模型行: %q", markdown)
}
}
func TestRunBytedanceArkPricingImportDryRunPrintsSummary(t *testing.T) {
var out bytes.Buffer
err := runBytedanceArkPricingImport(bytedanceArkPricingImportConfig{
URL: defaultBytedanceArkPricingURL,
Fixture: filepath.Join("testdata", "bytedance_ark_pricing_sample.txt"),
DryRun: true,
}, nil, &out)
if err != nil {
t.Fatalf("runBytedanceArkPricingImport 返回错误: %v", err)
}
output := out.String()
for _, want := range []string{
"source=bytedance-pricing-import",
"models=20",
"operator=ByteDance Volcano",
"dry_run=true",
} {
if !strings.Contains(output, want) {
t.Fatalf("输出缺少 %q实际: %q", want, output)
}
}
}