fix: filters数组改为AND逻辑,缺键视为匹配
- 原OR逻辑导致model不匹配时仅因video匹配就计费 - 带unit_prices的filter_item为tiered定价,跳过AND检查 - seedance2.0案例:390825 tokens从75.82(5条匹配)修正为17.98(1条匹配)
This commit is contained in:
parent
616c3a1926
commit
759cd14a56
@ -635,11 +635,12 @@ order by b.enabled_date desc"""
|
||||
exception(f'{e}:{msg}')
|
||||
break
|
||||
|
||||
# 检查 filters 区间条件(新格式)
|
||||
# 检查 filters 区间条件(新格式,AND逻辑:所有filter_item都要匹配)
|
||||
# 带 unit_prices 的 filter_item 是 tiered 定价,跳过(由后面第二块处理)
|
||||
if p_ok and is_new_format and 'filters' in p:
|
||||
# filters 是多个区间选项,只要有一个匹配就行
|
||||
filter_matched = False
|
||||
for filter_item in p['filters']:
|
||||
if 'unit_prices' in filter_item:
|
||||
continue # tiered定价项,不在此处检查
|
||||
item_ok = True
|
||||
for fk, fv in filter_item.items():
|
||||
if fk == 'unit_prices':
|
||||
@ -650,7 +651,7 @@ order by b.enabled_date desc"""
|
||||
data_value = config_data.get(fk)
|
||||
data_value = data_mapping(d, fk, data_value)
|
||||
if data_value is None:
|
||||
continue
|
||||
continue # 数据中没有该键,视为匹配
|
||||
try:
|
||||
flg = check_value(f, fv, data_value)
|
||||
if not flg:
|
||||
@ -660,11 +661,9 @@ order by b.enabled_date desc"""
|
||||
debug(f'filter check error: {e}')
|
||||
item_ok = False
|
||||
break
|
||||
if item_ok:
|
||||
filter_matched = True
|
||||
break
|
||||
if not filter_matched:
|
||||
if not item_ok:
|
||||
p_ok = False
|
||||
break
|
||||
|
||||
if not p_ok:
|
||||
info(f'{config_data=}, {p=}, mismatched')
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user