Feature: Provider Registry Coverage Boost As a developer I want to cover remaining untested paths in the ProviderRegistry So that edge cases in provider selection and creation are verified @unit @providers @registry Scenario: Settings default provider is valid but not configured falls through to fallback Given a registry where settings default_provider is "openai" but only anthropic key is set And CLEVERAGENTS_DEFAULT_PROVIDER env var is cleared When I request the default provider type from the boost registry Then the boost result should be ProviderType ANTHROPIC @unit @providers @registry Scenario: Azure deployment resolves from settings when model_id is None Given a registry with azure API key and deployment setting "my-azure-deploy" And the Azure LangChain client is stubbed for boost When I call _create_provider_instance for AZURE with model_id None via boost Then the stubbed Azure client deployment_name should be "my-azure-deploy" @unit @providers @registry Scenario: Azure deployment falls back to gpt-4o when settings deployment is also empty Given a registry with azure API key and no deployment setting And the Azure LangChain client is stubbed for boost When I call _create_provider_instance for AZURE with model_id None via boost Then the stubbed Azure client deployment_name should be "gpt-4o" @unit @providers @registry Scenario: Google create_ai_provider uses DEFAULT_MODELS when model_id is empty string Given a registry with google API key configured for boost When I create an AI provider for google with empty string model_id via boost Then the boost AI provider model_id should be "gemini-2.0-flash" @unit @providers @registry Scenario: OpenRouter create_ai_provider raises error when API key is missing Given a registry with no API keys for boost When I try to create an AI provider for openrouter via boost Then a boost ValueError should be raised And the boost error message should contain "openrouter" And the boost error message should contain "not configured" @unit @providers @registry Scenario: OpenRouter create_ai_provider uses DEFAULT_MODELS when model_id is empty string Given a registry with openrouter API key configured for boost When I create an AI provider for openrouter with empty string model_id via boost Then the boost AI provider model_id should be "anthropic/claude-sonnet-4-20250514" @unit @providers @registry Scenario: OpenRouter _create_provider_instance with sanitized numeric headers and organization Given a registry with openrouter API key configured for boost And the openrouter organization is set to "my-org" When I call _create_provider_instance for openrouter with model "claude-or" and numeric headers Then the returned LLM should be recorded with sanitized headers including "X-Debug" And the openrouter kwargs should include HTTP-Referer "my-org" @unit @providers @registry Scenario: _create_provider_instance accepts pre-validated api_key sentinel None Given CLEVERAGENTS_ALLOW_MOCK_PROVIDER is set And a registry with no API keys for boost When I call _create_provider_instance for mock with api_key sentinel None Then the boost result should be a FakeListLLM instance And calling it twice yields the same response @unit @providers @registry Scenario: Azure endpoint missing raises ValueError Given a registry with azure API key but no endpoint setting When I try to call _create_provider_instance for AZURE with model_id None via boost Then a boost ValueError should be raised And the boost error message should contain "endpoint" @unit @providers @registry Scenario: coerce_optional_str coerces non-string values When I coerce optional string with integer 42 Then the coerced optional string result should be "42"