fix(bom-costing): support complete 600 sku catalogs

This commit is contained in:
WuYongJie 2026-08-04 18:43:33 +08:00
parent 47f19da2e2
commit f0687f2d5d
2 changed files with 16 additions and 13 deletions

View File

@ -734,7 +734,10 @@ describe('BOM 多模态分析器', () => {
process.env.BOM_COSTING_SYNTHESIS_SKU_BATCH_SIZE = '100'
const highCardinalitySnapshot: MarketDetailSnapshot = {
...snapshot,
skus: Array.from({ length: 201 }, (_, index) => ({
skuTotalRows: 552,
skuReturnedRows: 552,
skuTruncated: false,
skus: Array.from({ length: 552 }, (_, index) => ({
...snapshot.skus[0],
externalSkuId: `sku-${index + 1}`,
name: `规格 ${index + 1}`,
@ -767,16 +770,16 @@ describe('BOM 多模态分析器', () => {
existingFactSnapshot: createCompleteFactSnapshot(highCardinalitySnapshot),
})
expect(fetchSpy).toHaveBeenCalledTimes(3)
expect(batchSizes).toEqual([100, 100, 1])
expect(output.result.skus).toHaveLength(201)
expect(new Set(output.result.skus.map((sku) => sku.externalSkuId)).size).toBe(201)
expect(fetchSpy).toHaveBeenCalledTimes(6)
expect(batchSizes).toEqual([100, 100, 100, 100, 100, 52])
expect(output.result.skus).toHaveLength(552)
expect(new Set(output.result.skus.map((sku) => sku.externalSkuId)).size).toBe(552)
expect(output.result.skus[0]?.structureGroupKey).toBe('batch-1-desk-120')
expect(output.result.skus[100]?.structureGroupKey).toBe('batch-2-desk-120')
expect(output.result.skus[200]?.structureGroupKey).toBe('batch-3-desk-120')
expect(output.result.skus[551]?.structureGroupKey).toBe('batch-6-desk-120')
expect(output.trace).toMatchObject({
inputSkuCount: 201,
synthesisBatchCount: 3,
inputSkuCount: 552,
synthesisBatchCount: 6,
})
})
@ -930,10 +933,10 @@ describe('BOM 多模态分析器', () => {
expect(fetchSpy).toHaveBeenCalledTimes(1)
})
it('组合型 SKU 超过契约上限时说明选项结构并在付费模型前停止', async () => {
it('组合型 SKU 超过 600 条上限时说明选项结构并在付费模型前停止', async () => {
const fetchSpy = jest.spyOn(global, 'fetch')
const styleCount = 24
const sizeCount = 23
const sizeCount = 26
const highCardinalitySnapshot: MarketDetailSnapshot = {
...snapshot,
skuTotalRows: styleCount * sizeCount,
@ -962,7 +965,7 @@ describe('BOM 多模态分析器', () => {
snapshot: highCardinalitySnapshot,
}),
).rejects.toThrow(
'该商品返回 552 个可购买组合(颜色分类 24 种 × 尺寸 23 种),不是 552 个独立款式。当前版本尚未支持这类组合型 SKU 的按需核算,系统未调用多模态模型',
'该商品返回 624 个可购买组合(颜色分类 24 种 × 尺寸 26 种),不是 624 个独立款式。当前版本尚未支持这类组合型 SKU 的按需核算,系统未调用多模态模型',
)
expect(fetchSpy).not.toHaveBeenCalled()
})

View File

@ -220,7 +220,7 @@ const aiAnalysisPayloadSchema = z.object({
),
})
const MAX_MULTIMODAL_ANALYSIS_SKUS = 500
const MAX_MULTIMODAL_ANALYSIS_SKUS = 600
const DEFAULT_SYNTHESIS_SKU_BATCH_SIZE = 80
const MAX_EXPLICIT_FACT_SKU_IDS = 20
@ -252,7 +252,7 @@ function describeHighCardinalitySkuCatalog(skus: MarketSkuSnapshot[]) {
.join(' × ')
return `该商品返回 ${skus.length} 个可购买组合(${breakdown}),不是 ${skus.length} 个独立款式。当前版本尚未支持这类组合型 SKU 的按需核算,系统未调用多模态模型`
}
return `该商品包含 ${skus.length} 个平台规格组合,超过当前单次核算上限 ${MAX_MULTIMODAL_ANALYSIS_SKUS} 个;系统未调用多模态模型,需要先按实体产品配置完成分组`
return `该商品包含 ${skus.length} 个平台规格组合,超过当前规格核算上限 ${MAX_MULTIMODAL_ANALYSIS_SKUS} 个;系统未调用多模态模型,需要先按实体产品配置完成分组`
}
export interface BomCostingMultimodalTrace {