refactor: simplify Anthropic tool id remapping

maintainer edit: remove duplicate counter state and use the seen id set directly when choosing duplicate suffixes.
This commit is contained in:
chengyongru 2026-06-23 23:57:37 +08:00 committed by Xubin Ren
parent 0e9861558a
commit 23dc253f89

View File

@ -158,27 +158,25 @@ class AnthropicProvider(LLMProvider):
system: str | list[dict[str, Any]] = "" system: str | list[dict[str, Any]] = ""
raw: list[dict[str, Any]] = [] raw: list[dict[str, Any]] = []
seen_tool_ids: set[str] = set() seen_tool_ids: set[str] = set()
duplicate_counts: dict[str, int] = {}
pending_tool_ids: dict[str, deque[str]] = {} pending_tool_ids: dict[str, deque[str]] = {}
def unique_tool_id(value: Any) -> str: def unique_tool_id(value: Any) -> str:
raw_id = str(value) if value else _gen_tool_id() raw_key = str(value) if value else ""
mapped_id = _sanitize_tool_id(raw_id) mapped_id = _sanitize_tool_id(raw_key) if raw_key else _gen_tool_id()
if mapped_id and mapped_id not in seen_tool_ids: if mapped_id and mapped_id not in seen_tool_ids:
seen_tool_ids.add(mapped_id) seen_tool_ids.add(mapped_id)
if value: if raw_key:
pending_tool_ids.setdefault(str(value), deque()).append(mapped_id) pending_tool_ids.setdefault(raw_key, deque()).append(mapped_id)
return mapped_id return mapped_id
seed = mapped_id or _gen_tool_id() seed = mapped_id or _gen_tool_id()
duplicate_counts[seed] = duplicate_counts.get(seed, 1) + 1 suffix = 2
suffix = duplicate_counts[seed]
while True: while True:
candidate = f"{seed}__dedupe_{suffix}" candidate = f"{seed}__dedupe_{suffix}"
if candidate not in seen_tool_ids: if candidate not in seen_tool_ids:
seen_tool_ids.add(candidate) seen_tool_ids.add(candidate)
if value: if raw_key:
pending_tool_ids.setdefault(str(value), deque()).append(candidate) pending_tool_ids.setdefault(raw_key, deque()).append(candidate)
return candidate return candidate
suffix += 1 suffix += 1