From 759cd14a56f1a8fb8832ba1bf6cba7a53949ad14 Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Thu, 18 Jun 2026 15:26:04 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20filters=E6=95=B0=E7=BB=84=E6=94=B9?= =?UTF-8?q?=E4=B8=BAAND=E9=80=BB=E8=BE=91=EF=BC=8C=E7=BC=BA=E9=94=AE?= =?UTF-8?q?=E8=A7=86=E4=B8=BA=E5=8C=B9=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 原OR逻辑导致model不匹配时仅因video匹配就计费 - 带unit_prices的filter_item为tiered定价,跳过AND检查 - seedance2.0案例:390825 tokens从75.82(5条匹配)修正为17.98(1条匹配) --- pricing/pricing.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/pricing/pricing.py b/pricing/pricing.py index 1cccd30..587cb77 100644 --- a/pricing/pricing.py +++ b/pricing/pricing.py @@ -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 + if not item_ok: + p_ok = False break - if not filter_matched: - p_ok = False if not p_ok: info(f'{config_data=}, {p=}, mismatched')