fix: 展平嵌套usage数据以支持pricing引擎点号路径查找

根因:pricing引擎的config_data.get(k)是平面dict查找,
当k='prompt_tokens_details.cached_tokens'时无法从嵌套结构取值。
在llm_charging()中将prompt_tokens_details和completion_tokens_details
的子键展平为顶层key(如'prompt_tokens_details.cached_tokens')。
This commit is contained in:
yumoqing 2026-05-28 16:57:08 +08:00
parent 534e4fe8e0
commit 71626468e2

View File

@ -16,6 +16,13 @@ async def llm_charging(ppid, llmusage):
usages = llmusage.usages usages = llmusage.usages
if isinstance(usages, str): if isinstance(usages, str):
usages = json.loads(usages) usages = json.loads(usages)
# 展平嵌套dict使 prompt_tokens_details.cached_tokens 等点号路径
# 可以作为顶层key被pricing引擎的 config_data.get(k) 取到
for nested_key in ('prompt_tokens_details', 'completion_tokens_details'):
nested = usages.get(nested_key)
if isinstance(nested, dict):
for k, v in nested.items():
usages[f'{nested_key}.{k}'] = v
prices = await env.buffered_charging(ppid, usages) prices = await env.buffered_charging(ppid, usages)
if prices is None: if prices is None:
e = Exception(f'{ppid=}, {usages=}{llmusage.id=} env.buffered_charging() return None') e = Exception(f'{ppid=}, {usages=}{llmusage.id=} env.buffered_charging() return None')