fix(bom-costing): support complete 600 sku catalogs
This commit is contained in:
parent
47f19da2e2
commit
f0687f2d5d
@ -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()
|
||||
})
|
||||
|
||||
@ -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 {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user