From 9335fa73928cfcf636a8c006733272fd11620605 Mon Sep 17 00:00:00 2001 From: Erik Garrison Date: Thu, 19 Feb 2026 08:31:13 -0600 Subject: [PATCH 1/2] feat: support provider name aliases in -p flag Allow providers to have a user-facing `name` field in settings.yaml that the -p flag matches against before falling back to module name. This enables more intuitive provider selection when the same module (e.g., provider-openai) is configured for different services: providers: - name: openrouter module: provider-openai config: base_url: https://openrouter.ai/api/v1 amplifier run -p openrouter "hello" The name match is checked first; if no name matches, the existing module-based lookup runs as before. Error messages now show both name and module when available. --- amplifier_app_cli/commands/run.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/amplifier_app_cli/commands/run.py b/amplifier_app_cli/commands/run.py index c0069392..9661cfd8 100644 --- a/amplifier_app_cli/commands/run.py +++ b/amplifier_app_cli/commands/run.py @@ -213,17 +213,28 @@ def run( ) providers_list = config_data.get("providers", []) - # Find the target provider + # Find the target provider by name first, then by module target_idx = None for i, entry in enumerate(providers_list): - if isinstance(entry, dict) and entry.get("module") == provider_module: + if isinstance(entry, dict) and entry.get("name") == provider: target_idx = i + provider_module = entry.get("module", provider_module) break + if target_idx is None: + for i, entry in enumerate(providers_list): + if isinstance(entry, dict) and entry.get("module") == provider_module: + target_idx = i + break if target_idx is None: + def _provider_label(p: dict) -> str: + name = p.get("name") + module = p.get("module", "?").replace("provider-", "") + return f"{name} ({module})" if name else module + console.print( f"[red]Error:[/red] Provider '{provider}' not configured\n" - f"Available providers: {', '.join(p.get('module', '?').replace('provider-', '') for p in providers_list if isinstance(p, dict))}\n" + f"Available providers: {', '.join(_provider_label(p) for p in providers_list if isinstance(p, dict))}\n" f"Run 'amplifier provider use --help' for configuration options" ) sys.exit(1) From d16a0bfd5ebe2a48b88d73adb78947a8b8129ff2 Mon Sep 17 00:00:00 2001 From: Erik Garrison Date: Fri, 27 Feb 2026 13:46:49 -0600 Subject: [PATCH 2/2] feat: add named provider matching for flexible provider lookup - commands/run.py: Match provider name field before module shorthand - effective_config.py: Show config name in banner instead of module ID - session_spawner.py: Flexible provider name lookup in spawner Enables using human-friendly provider names (e.g., 'anthropic') in addition to module names when specifying providers via CLI or delegation. --- amplifier_app_cli/effective_config.py | 8 ++++++-- amplifier_app_cli/session_spawner.py | 21 +++++++++++++++------ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/amplifier_app_cli/effective_config.py b/amplifier_app_cli/effective_config.py index b9737978..8d1a3c22 100644 --- a/amplifier_app_cli/effective_config.py +++ b/amplifier_app_cli/effective_config.py @@ -62,8 +62,12 @@ def get_effective_config_summary( provider_config = selected_provider.get("config", {}) model = provider_config.get("default_model", "default") - # Try to get friendly provider name - provider_name = _get_provider_display_name(provider_module) + # Use explicit 'name' from settings if set, otherwise derive from module ID + instance_name = selected_provider.get("name") + if instance_name: + provider_name = instance_name.replace("-", " ").title() + else: + provider_name = _get_provider_display_name(provider_module) else: provider_module = "none" provider_name = "None" diff --git a/amplifier_app_cli/session_spawner.py b/amplifier_app_cli/session_spawner.py index 3625e1ef..06f48fc8 100644 --- a/amplifier_app_cli/session_spawner.py +++ b/amplifier_app_cli/session_spawner.py @@ -157,11 +157,15 @@ def _apply_provider_override( target_idx = None for i, p in enumerate(providers): module_id = p.get("module", "") - # Match: "anthropic", "provider-anthropic", or full module ID - if provider_id and provider_id in ( - module_id, - module_id.replace("provider-", ""), - f"provider-{provider_id}", + entry_name = p.get("name", "") + # Match: config name, module shorthand, full module ID + if provider_id and ( + provider_id == entry_name + or provider_id in ( + module_id, + module_id.replace("provider-", ""), + f"provider-{provider_id}", + ) ): target_idx = i break @@ -178,10 +182,15 @@ def _apply_provider_override( target_idx = i if target_idx is None: + available = [] + for p in providers: + name = p.get("name") + mod = p.get("module", "?").replace("provider-", "") + available.append(name if name and name != mod else mod) logger.warning( "Provider '%s' not found in config. Available: %s", provider_id, - ", ".join(p.get("module", "?") for p in providers), + ", ".join(available), ) return config