Skip to content

Commit db7f8bd

Browse files
wirjoclaude
andcommitted
Fix argparse conflict for duplicate TypedDict field short aliases
When multiple TypedDicts in a function signature share the same field name (e.g. credentials_secret in both aws_s3_config and azure_blob_storage_config), the CLI auto-generation creates duplicate short flags (--credentials-secret), causing an argparse error. Track registered flags and only add the short alias if it hasn't already been claimed by a previous TypedDict field. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 5ac0bb4 commit db7f8bd

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

eval_protocol/cli_commands/utils.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -723,6 +723,10 @@ def add_args_from_callable_signature(
723723
help = _parse_args_section_from_doc(inspect.getdoc(fn) or "")
724724
hints = typing.get_type_hints(fn, include_extras=True)
725725

726+
# Track registered flags to avoid argparse conflicts when multiple
727+
# TypedDicts share the same field name (e.g. credentials_secret).
728+
_registered_flags: set[str] = set()
729+
726730
for name in sig.parameters.keys():
727731
resolved_type = unwrap_union(hints.get(name))
728732

@@ -738,10 +742,15 @@ def add_args_from_callable_signature(
738742
prefix = name.replace("_", "-")
739743
field_kebab = field_name.replace("_", "-")
740744
flag_name = f"--{prefix}-{field_kebab}"
741-
flags = [flag_name] + aliases.get(f"{name}.{field_name}", []) + [f"--{field_kebab}"]
745+
short_flag = f"--{field_kebab}"
746+
flags = [flag_name] + aliases.get(f"{name}.{field_name}", [])
747+
# Only add the short alias if it hasn't been registered yet.
748+
if short_flag not in _registered_flags:
749+
flags.append(short_flag)
742750
help_text = help_overrides.get(f"{name}.{field_name}", field_help.get(field_name))
743751

744752
_add_flag(parser, flags, field_hints.get(field_name, field_type), help_text)
753+
_registered_flags.update(flags)
745754
continue
746755

747756
if name in top_level_skip:
@@ -752,3 +761,4 @@ def add_args_from_callable_signature(
752761
help_text = help_overrides.get(name, help.get(name))
753762

754763
_add_flag(parser, flags, hints.get(name), help_text)
764+
_registered_flags.update(flags)

0 commit comments

Comments
 (0)