From bbc699c1da823b7c111ce9f6016977a315fd691e Mon Sep 17 00:00:00 2001 From: slkoo-cc Date: Thu, 16 Oct 2025 12:02:23 +0000 Subject: [PATCH 01/10] Infer provider and model type --- .../pydantic_ai/models/__init__.py | 55 +++++++++++++------ .../pydantic_ai/providers/gateway.py | 38 ++++++++++--- 2 files changed, 67 insertions(+), 26 deletions(-) diff --git a/pydantic_ai_slim/pydantic_ai/models/__init__.py b/pydantic_ai_slim/pydantic_ai/models/__init__.py index 0520486be7..58bd9244f5 100644 --- a/pydantic_ai_slim/pydantic_ai/models/__init__.py +++ b/pydantic_ai_slim/pydantic_ai/models/__init__.py @@ -41,6 +41,7 @@ ToolCallPart, VideoUrl, ) +from ..providers import Provider, infer_provider_class from ..output import OutputMode from ..profiles import DEFAULT_PROFILE, ModelProfile, ModelProfileSpec from ..settings import ModelSettings, merge_model_settings @@ -633,15 +634,13 @@ def override_allow_model_requests(allow_model_requests: bool) -> Iterator[None]: finally: ALLOW_MODEL_REQUESTS = old_value # pyright: ignore[reportConstantRedefinition] - -def infer_model(model: Model | KnownModelName | str) -> Model: # noqa: C901 - """Infer the model from the name.""" - if isinstance(model, Model): - return model - elif model == 'test': +def infer_provider_model_class(model: KnownModelName | str) -> tuple[type[Model], type[Provider]]: # noqa: C901 + """Infer the model and provider from the name.""" + + if model == 'test': from .test import TestModel - return TestModel() + return TestModel, None try: provider, model_name = model.split(':', maxsplit=1) @@ -671,13 +670,13 @@ def infer_model(model: Model | KnownModelName | str) -> Model: # noqa: C901 provider = 'google-vertex' if provider == 'gateway': - from ..providers.gateway import infer_model as infer_model_from_gateway + from ..providers.gateway import infer_provider_model_class as infer_provider_model_class_from_gateway - return infer_model_from_gateway(model_name) + return infer_provider_model_class_from_gateway(model_name) elif provider == 'cohere': from .cohere import CohereModel - return CohereModel(model_name, provider=provider) + return CohereModel, infer_provider_class(provider) elif provider in ( 'azure', 'deepseek', @@ -698,39 +697,59 @@ def infer_model(model: Model | KnownModelName | str) -> Model: # noqa: C901 ): from .openai import OpenAIChatModel - return OpenAIChatModel(model_name, provider=provider) + return OpenAIChatModel, infer_provider_class(provider) elif provider == 'openai-responses': from .openai import OpenAIResponsesModel - return OpenAIResponsesModel(model_name, provider='openai') + return OpenAIResponsesModel, infer_provider_class('openai') elif provider in ('google-gla', 'google-vertex'): from .google import GoogleModel - return GoogleModel(model_name, provider=provider) + return GoogleModel, infer_provider_class(provider) elif provider == 'groq': from .groq import GroqModel - return GroqModel(model_name, provider=provider) + return GroqModel, infer_provider_class(provider) elif provider == 'mistral': from .mistral import MistralModel - return MistralModel(model_name, provider=provider) + return MistralModel, infer_provider_class(provider) elif provider == 'anthropic': from .anthropic import AnthropicModel - return AnthropicModel(model_name, provider=provider) + return AnthropicModel, infer_provider_class(provider) elif provider == 'bedrock': from .bedrock import BedrockConverseModel - return BedrockConverseModel(model_name, provider=provider) + return BedrockConverseModel, infer_provider_class(provider) elif provider == 'huggingface': from .huggingface import HuggingFaceModel - return HuggingFaceModel(model_name, provider=provider) + return HuggingFaceModel, infer_provider_class(provider) else: raise UserError(f'Unknown model: {model}') # pragma: no cover +def infer_model(model: Model | KnownModelName | str) -> Model: # noqa: C901 + """Infer the model from the name.""" + + if isinstance(model, Model): + return model + + try: + provider, _ = model.split(':', maxsplit=1) + except ValueError: + provider = None + + if provider == 'gateway': + from ..providers.gateway import infer_model as infer_model_from_gateway + + return infer_model_from_gateway(model) + + model_class, provider_class = infer_provider_model_class(model) + return model_class(provider=provider_class) + + def cached_async_http_client(*, provider: str | None = None, timeout: int = 600, connect: int = 5) -> httpx.AsyncClient: """Cached HTTPX async client that creates a separate client for each provider. diff --git a/pydantic_ai_slim/pydantic_ai/providers/gateway.py b/pydantic_ai_slim/pydantic_ai/providers/gateway.py index b52fefb043..a11c830da1 100644 --- a/pydantic_ai_slim/pydantic_ai/providers/gateway.py +++ b/pydantic_ai_slim/pydantic_ai/providers/gateway.py @@ -9,6 +9,7 @@ from pydantic_ai.exceptions import UserError from pydantic_ai.models import Model, cached_async_http_client, get_user_agent +from . import Provider if TYPE_CHECKING: from google.genai import Client as GoogleClient @@ -135,14 +136,14 @@ def gateway_provider( raise UserError(f'Unknown provider: {upstream_provider}') -def infer_model(model_name: str) -> Model: - """Infer the model class that will be used to make requests to the gateway. +def infer_provider_model_class(model_name: str) -> tuple[type[Model], type[Provider[Any]]]: + """Infer the model class and provider that will be used to make requests to the gateway. Args: model_name: The name of the model to infer. Must be in the format "provider/model_name". Returns: - The model class that will be used to make requests to the gateway. + A tuple of the model class and provider that will be used to make requests to the gateway. """ try: upstream_provider, model_name = model_name.split('/', 1) @@ -152,26 +153,47 @@ def infer_model(model_name: str) -> Model: if upstream_provider in ('openai', 'openai-chat'): from pydantic_ai.models.openai import OpenAIChatModel - return OpenAIChatModel(model_name, provider=gateway_provider('openai')) + return OpenAIChatModel, type(gateway_provider('openai')) elif upstream_provider == 'openai-responses': from pydantic_ai.models.openai import OpenAIResponsesModel - return OpenAIResponsesModel(model_name, provider=gateway_provider('openai')) + return OpenAIResponsesModel, type(gateway_provider('openai')) elif upstream_provider == 'groq': from pydantic_ai.models.groq import GroqModel - return GroqModel(model_name, provider=gateway_provider('groq')) + return GroqModel, type(gateway_provider('groq')) elif upstream_provider == 'anthropic': from pydantic_ai.models.anthropic import AnthropicModel - return AnthropicModel(model_name, provider=gateway_provider('anthropic')) + return AnthropicModel, type(gateway_provider('anthropic')) elif upstream_provider == 'google-vertex': from pydantic_ai.models.google import GoogleModel - return GoogleModel(model_name, provider=gateway_provider('google-vertex')) + return GoogleModel, type(gateway_provider('google-vertex')) raise UserError(f'Unknown upstream provider: {upstream_provider}') +def infer_model(model_name: str) -> Model: + """Infer the model class that will be used to make requests to the gateway. + + Args: + model_name: The name of the model to infer. Must be in the format "provider/model_name". + + Returns: + The model class object that will be used to make requests to the gateway. + """ + try: + upstream_provider, model_name = model_name.split('/', 1) + except ValueError: + raise UserError(f'The model name "{model_name}" is not in the format "provider/model_name".') + + if upstream_provider in ('openai', 'openai-chat', 'openai-responses'): + upstream_provider = 'openai' + + modal_class, _ = infer_provider_model_class(model_name) + return modal_class(model_name, provider=gateway_provider(upstream_provider)) + + async def _request_hook(request: httpx.Request) -> httpx.Request: """Request hook for the gateway provider. From e01760ec405675749672d66bc3f264f11680807e Mon Sep 17 00:00:00 2001 From: slkoo-cc Date: Thu, 23 Oct 2025 10:55:07 +0800 Subject: [PATCH 02/10] Update pydantic_ai_slim/pydantic_ai/models/__init__.py Co-authored-by: Marcelo Trylesinski --- pydantic_ai_slim/pydantic_ai/models/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pydantic_ai_slim/pydantic_ai/models/__init__.py b/pydantic_ai_slim/pydantic_ai/models/__init__.py index 58bd9244f5..af0de0e34e 100644 --- a/pydantic_ai_slim/pydantic_ai/models/__init__.py +++ b/pydantic_ai_slim/pydantic_ai/models/__init__.py @@ -730,7 +730,7 @@ def infer_provider_model_class(model: KnownModelName | str) -> tuple[type[Model] raise UserError(f'Unknown model: {model}') # pragma: no cover -def infer_model(model: Model | KnownModelName | str) -> Model: # noqa: C901 +def infer_model(model: Model | KnownModelName | str) -> Model: """Infer the model from the name.""" if isinstance(model, Model): From 57c54b96208f56b3b0b6b9d396abd747c80962b7 Mon Sep 17 00:00:00 2001 From: slkoo-cc Date: Thu, 23 Oct 2025 07:01:07 +0000 Subject: [PATCH 03/10] Revert changes on gateway.py --- .../pydantic_ai/providers/gateway.py | 38 ++++--------------- 1 file changed, 8 insertions(+), 30 deletions(-) diff --git a/pydantic_ai_slim/pydantic_ai/providers/gateway.py b/pydantic_ai_slim/pydantic_ai/providers/gateway.py index a11c830da1..b52fefb043 100644 --- a/pydantic_ai_slim/pydantic_ai/providers/gateway.py +++ b/pydantic_ai_slim/pydantic_ai/providers/gateway.py @@ -9,7 +9,6 @@ from pydantic_ai.exceptions import UserError from pydantic_ai.models import Model, cached_async_http_client, get_user_agent -from . import Provider if TYPE_CHECKING: from google.genai import Client as GoogleClient @@ -136,14 +135,14 @@ def gateway_provider( raise UserError(f'Unknown provider: {upstream_provider}') -def infer_provider_model_class(model_name: str) -> tuple[type[Model], type[Provider[Any]]]: - """Infer the model class and provider that will be used to make requests to the gateway. +def infer_model(model_name: str) -> Model: + """Infer the model class that will be used to make requests to the gateway. Args: model_name: The name of the model to infer. Must be in the format "provider/model_name". Returns: - A tuple of the model class and provider that will be used to make requests to the gateway. + The model class that will be used to make requests to the gateway. """ try: upstream_provider, model_name = model_name.split('/', 1) @@ -153,47 +152,26 @@ def infer_provider_model_class(model_name: str) -> tuple[type[Model], type[Provi if upstream_provider in ('openai', 'openai-chat'): from pydantic_ai.models.openai import OpenAIChatModel - return OpenAIChatModel, type(gateway_provider('openai')) + return OpenAIChatModel(model_name, provider=gateway_provider('openai')) elif upstream_provider == 'openai-responses': from pydantic_ai.models.openai import OpenAIResponsesModel - return OpenAIResponsesModel, type(gateway_provider('openai')) + return OpenAIResponsesModel(model_name, provider=gateway_provider('openai')) elif upstream_provider == 'groq': from pydantic_ai.models.groq import GroqModel - return GroqModel, type(gateway_provider('groq')) + return GroqModel(model_name, provider=gateway_provider('groq')) elif upstream_provider == 'anthropic': from pydantic_ai.models.anthropic import AnthropicModel - return AnthropicModel, type(gateway_provider('anthropic')) + return AnthropicModel(model_name, provider=gateway_provider('anthropic')) elif upstream_provider == 'google-vertex': from pydantic_ai.models.google import GoogleModel - return GoogleModel, type(gateway_provider('google-vertex')) + return GoogleModel(model_name, provider=gateway_provider('google-vertex')) raise UserError(f'Unknown upstream provider: {upstream_provider}') -def infer_model(model_name: str) -> Model: - """Infer the model class that will be used to make requests to the gateway. - - Args: - model_name: The name of the model to infer. Must be in the format "provider/model_name". - - Returns: - The model class object that will be used to make requests to the gateway. - """ - try: - upstream_provider, model_name = model_name.split('/', 1) - except ValueError: - raise UserError(f'The model name "{model_name}" is not in the format "provider/model_name".') - - if upstream_provider in ('openai', 'openai-chat', 'openai-responses'): - upstream_provider = 'openai' - - modal_class, _ = infer_provider_model_class(model_name) - return modal_class(model_name, provider=gateway_provider(upstream_provider)) - - async def _request_hook(request: httpx.Request) -> httpx.Request: """Request hook for the gateway provider. From cfc55e7d89e347ec2f86a6a6e016baff6c66256d Mon Sep 17 00:00:00 2001 From: slkoo-cc Date: Thu, 23 Oct 2025 07:11:23 +0000 Subject: [PATCH 04/10] Update code based on suggestion --- .../pydantic_ai/models/__init__.py | 128 ++++++++++-------- .../pydantic_ai/providers/__init__.py | 4 +- 2 files changed, 71 insertions(+), 61 deletions(-) diff --git a/pydantic_ai_slim/pydantic_ai/models/__init__.py b/pydantic_ai_slim/pydantic_ai/models/__init__.py index af0de0e34e..6844757159 100644 --- a/pydantic_ai_slim/pydantic_ai/models/__init__.py +++ b/pydantic_ai_slim/pydantic_ai/models/__init__.py @@ -634,25 +634,32 @@ def override_allow_model_requests(allow_model_requests: bool) -> Iterator[None]: finally: ALLOW_MODEL_REQUESTS = old_value # pyright: ignore[reportConstantRedefinition] -def infer_provider_model_class(model: KnownModelName | str) -> tuple[type[Model], type[Provider]]: # noqa: C901 + +@dataclass +class ModelClassInformation: + model_class: type[Model] + provider_class: type[Provider[Any]] | None + + +def infer_provider_model_class(model: KnownModelName | str) -> ModelClassInformation: """Infer the model and provider from the name.""" - - if model == 'test': + + if model == "test": from .test import TestModel - return TestModel, None + return ModelClassInformation(model_class=TestModel, provider_class=None) try: - provider, model_name = model.split(':', maxsplit=1) + provider, model_name = model.split(":", maxsplit=1) except ValueError: provider = None model_name = model - if model_name.startswith(('gpt', 'o1', 'o3')): - provider = 'openai' - elif model_name.startswith('claude'): - provider = 'anthropic' - elif model_name.startswith('gemini'): - provider = 'google-gla' + if model_name.startswith(("gpt", "o1", "o3")): + provider = "openai" + elif model_name.startswith("claude"): + provider = "anthropic" + elif model_name.startswith("gemini"): + provider = "google-gla" if provider is not None: warnings.warn( @@ -660,94 +667,97 @@ def infer_provider_model_class(model: KnownModelName | str) -> tuple[type[Model] DeprecationWarning, ) else: - raise UserError(f'Unknown model: {model}') + raise UserError(f"Unknown model: {model}") - if provider == 'vertexai': # pragma: no cover + if provider == "vertexai": # pragma: no cover warnings.warn( "The 'vertexai' provider name is deprecated. Use 'google-vertex' instead.", DeprecationWarning, ) - provider = 'google-vertex' - - if provider == 'gateway': - from ..providers.gateway import infer_provider_model_class as infer_provider_model_class_from_gateway + provider = "google-vertex" - return infer_provider_model_class_from_gateway(model_name) - elif provider == 'cohere': + inferred_model: type[Model] + if provider == "gateway": + raise ValueError("`gateway`") + elif provider == "cohere": from .cohere import CohereModel - return CohereModel, infer_provider_class(provider) + inferred_model = CohereModel elif provider in ( - 'azure', - 'deepseek', - 'cerebras', - 'fireworks', - 'github', - 'grok', - 'heroku', - 'moonshotai', - 'ollama', - 'openai', - 'openai-chat', - 'openrouter', - 'together', - 'vercel', - 'litellm', - 'nebius', + "azure", + "deepseek", + "cerebras", + "fireworks", + "github", + "grok", + "heroku", + "moonshotai", + "ollama", + "openai", + "openai-chat", + "openrouter", + "together", + "vercel", + "litellm", + "nebius", ): from .openai import OpenAIChatModel - return OpenAIChatModel, infer_provider_class(provider) - elif provider == 'openai-responses': + inferred_model = OpenAIChatModel + elif provider == "openai-responses": from .openai import OpenAIResponsesModel - return OpenAIResponsesModel, infer_provider_class('openai') - elif provider in ('google-gla', 'google-vertex'): + inferred_model = OpenAIResponsesModel + elif provider in ("google-gla", "google-vertex"): from .google import GoogleModel - return GoogleModel, infer_provider_class(provider) - elif provider == 'groq': + inferred_model = GoogleModel + elif provider == "groq": from .groq import GroqModel - return GroqModel, infer_provider_class(provider) - elif provider == 'mistral': + inferred_model = GroqModel + elif provider == "mistral": from .mistral import MistralModel - return MistralModel, infer_provider_class(provider) - elif provider == 'anthropic': + inferred_model = MistralModel + elif provider == "anthropic": from .anthropic import AnthropicModel - return AnthropicModel, infer_provider_class(provider) - elif provider == 'bedrock': + inferred_model = AnthropicModel + elif provider == "bedrock": from .bedrock import BedrockConverseModel - return BedrockConverseModel, infer_provider_class(provider) - elif provider == 'huggingface': + inferred_model = BedrockConverseModel + elif provider == "huggingface": from .huggingface import HuggingFaceModel - return HuggingFaceModel, infer_provider_class(provider) + inferred_model = HuggingFaceModel else: - raise UserError(f'Unknown model: {model}') # pragma: no cover + raise UserError(f"Unknown model: {model}") # pragma: no cover + + return ModelClassInformation( + model_class=inferred_model, provider_class=infer_provider_class(provider) + ) def infer_model(model: Model | KnownModelName | str) -> Model: """Infer the model from the name.""" - + if isinstance(model, Model): return model - + try: - provider, _ = model.split(':', maxsplit=1) + provider, _ = model.split(":", maxsplit=1) except ValueError: provider = None - if provider == 'gateway': + if provider == "gateway": from ..providers.gateway import infer_model as infer_model_from_gateway return infer_model_from_gateway(model) - - model_class, provider_class = infer_provider_model_class(model) - return model_class(provider=provider_class) + + model_information = infer_provider_model_class(model) + return model_information.model_class(provider=model_information.provider_class) def cached_async_http_client(*, provider: str | None = None, timeout: int = 600, connect: int = 5) -> httpx.AsyncClient: diff --git a/pydantic_ai_slim/pydantic_ai/providers/__init__.py b/pydantic_ai_slim/pydantic_ai/providers/__init__.py index f71f2d94e0..8b989d46ce 100644 --- a/pydantic_ai_slim/pydantic_ai/providers/__init__.py +++ b/pydantic_ai_slim/pydantic_ai/providers/__init__.py @@ -51,9 +51,9 @@ def __repr__(self) -> str: return f'{self.__class__.__name__}(name={self.name}, base_url={self.base_url})' # pragma: lax no cover -def infer_provider_class(provider: str) -> type[Provider[Any]]: # noqa: C901 +def infer_provider_class(provider: str) -> type[Provider[Any]]: """Infers the provider class from the provider name.""" - if provider == 'openai': + if provider == 'openai' or provider == 'openai-responses': from .openai import OpenAIProvider return OpenAIProvider From 117c10a5a44354ff991c0e05128363b7a2cb4a34 Mon Sep 17 00:00:00 2001 From: slkoo-cc Date: Thu, 23 Oct 2025 08:14:50 +0000 Subject: [PATCH 05/10] Fix test bug --- pydantic_ai_slim/pydantic_ai/models/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pydantic_ai_slim/pydantic_ai/models/__init__.py b/pydantic_ai_slim/pydantic_ai/models/__init__.py index 77d3531c50..f51c3c62bc 100644 --- a/pydantic_ai_slim/pydantic_ai/models/__init__.py +++ b/pydantic_ai_slim/pydantic_ai/models/__init__.py @@ -735,11 +735,11 @@ def infer_provider_model_class(model: KnownModelName | str) -> ModelClassInforma inferred_model = HuggingFaceModel else: - raise UserError(f"Unknown model: {model}") # pragma: no cover + raise UserError(f'Unknown model: {model}') # pragma: no cover return ModelClassInformation( - model_class=inferred_model, - provider_class=infer_provider_class(provider_name), + model_class=inferred_model, + provider_class=infer_provider_class(provider_name) if not provider_name.startswith('gateway/') else None, model_name=model_name, provider_name=provider_name, ) From 843dac42ec3bef961016475fb3d200c487ca197c Mon Sep 17 00:00:00 2001 From: slkoo-cc Date: Fri, 24 Oct 2025 01:28:33 +0000 Subject: [PATCH 06/10] Fix lint --- pydantic_ai_slim/pydantic_ai/models/__init__.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/pydantic_ai_slim/pydantic_ai/models/__init__.py b/pydantic_ai_slim/pydantic_ai/models/__init__.py index f51c3c62bc..f1d30803a0 100644 --- a/pydantic_ai_slim/pydantic_ai/models/__init__.py +++ b/pydantic_ai_slim/pydantic_ai/models/__init__.py @@ -43,7 +43,7 @@ ) from ..output import OutputMode from ..profiles import DEFAULT_PROFILE, ModelProfile, ModelProfileSpec -from ..providers import Provider, infer_provider_class, infer_provider +from ..providers import Provider, infer_provider, infer_provider_class from ..settings import ModelSettings, merge_model_settings from ..tools import ToolDefinition from ..usage import RequestUsage @@ -639,7 +639,7 @@ class ModelClassInformation: def infer_provider_model_class(model: KnownModelName | str) -> ModelClassInformation: """Infer the model and provider from the name.""" - if model == "test": + if model == 'test': from .test import TestModel return ModelClassInformation(model_class=TestModel, provider_class=None, model_name='test', provider_name=None) @@ -662,7 +662,7 @@ def infer_provider_model_class(model: KnownModelName | str) -> ModelClassInforma DeprecationWarning, ) else: - raise UserError(f"Unknown model: {model}") + raise UserError(f'Unknown model: {model}') if provider_name == 'vertexai': # pragma: no cover warnings.warn( @@ -747,15 +747,14 @@ def infer_provider_model_class(model: KnownModelName | str) -> ModelClassInforma def infer_model(model: Model | KnownModelName | str) -> Model: """Infer the model from the name.""" - if isinstance(model, Model): return model model_information = infer_provider_model_class(model) - if model_information.model_name == "test": + if model_information.provider_name is None: return model_information.model_class() return model_information.model_class( - model_name=model_information.model_name, + model_name=model_information.model_name, provider=infer_provider(model_information.provider_name), ) From be21c24e0e50d409f6808c95abc4c1cd84b3585b Mon Sep 17 00:00:00 2001 From: slkoo-cc Date: Fri, 24 Oct 2025 01:32:05 +0000 Subject: [PATCH 07/10] Fix lint --- pydantic_ai_slim/pydantic_ai/models/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pydantic_ai_slim/pydantic_ai/models/__init__.py b/pydantic_ai_slim/pydantic_ai/models/__init__.py index f1d30803a0..46eae7f196 100644 --- a/pydantic_ai_slim/pydantic_ai/models/__init__.py +++ b/pydantic_ai_slim/pydantic_ai/models/__init__.py @@ -638,7 +638,6 @@ class ModelClassInformation: def infer_provider_model_class(model: KnownModelName | str) -> ModelClassInformation: """Infer the model and provider from the name.""" - if model == 'test': from .test import TestModel From ad7bd60cc695e53a538d62110b59ecffc17ba94b Mon Sep 17 00:00:00 2001 From: slkoo-cc Date: Fri, 24 Oct 2025 02:34:16 +0000 Subject: [PATCH 08/10] Fix lint rules --- pydantic_ai_slim/pydantic_ai/models/__init__.py | 7 ++++++- pydantic_ai_slim/pydantic_ai/providers/__init__.py | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/pydantic_ai_slim/pydantic_ai/models/__init__.py b/pydantic_ai_slim/pydantic_ai/models/__init__.py index 46eae7f196..c13c93df18 100644 --- a/pydantic_ai_slim/pydantic_ai/models/__init__.py +++ b/pydantic_ai_slim/pydantic_ai/models/__init__.py @@ -630,13 +630,18 @@ def override_allow_model_requests(allow_model_requests: bool) -> Iterator[None]: @dataclass class ModelClassInformation: + """Metadata of model as parsed from string with the model class and provider class for instantiation.""" model_class: type[Model] + """The raw model class""" provider_class: type[Provider[Any]] | None + """The raw provider class""" model_name: str + """The model name as parsed from input string""" provider_name: str | None + """The provider name as parsed from input string""" -def infer_provider_model_class(model: KnownModelName | str) -> ModelClassInformation: +def infer_provider_model_class(model: KnownModelName | str) -> ModelClassInformation: # C901 """Infer the model and provider from the name.""" if model == 'test': from .test import TestModel diff --git a/pydantic_ai_slim/pydantic_ai/providers/__init__.py b/pydantic_ai_slim/pydantic_ai/providers/__init__.py index 4624f1cd5c..c70f14a884 100644 --- a/pydantic_ai_slim/pydantic_ai/providers/__init__.py +++ b/pydantic_ai_slim/pydantic_ai/providers/__init__.py @@ -51,7 +51,7 @@ def __repr__(self) -> str: return f'{self.__class__.__name__}(name={self.name}, base_url={self.base_url})' # pragma: lax no cover -def infer_provider_class(provider: str) -> type[Provider[Any]]: +def infer_provider_class(provider: str) -> type[Provider[Any]]: # C901 """Infers the provider class from the provider name.""" if provider in ('openai', 'openai-chat', 'openai-responses'): from .openai import OpenAIProvider From 119d16ceab8b9ac6785f453059022015a5d68fa6 Mon Sep 17 00:00:00 2001 From: slkoo-cc Date: Fri, 24 Oct 2025 02:58:02 +0000 Subject: [PATCH 09/10] fix lint spacing --- pydantic_ai_slim/pydantic_ai/models/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pydantic_ai_slim/pydantic_ai/models/__init__.py b/pydantic_ai_slim/pydantic_ai/models/__init__.py index c13c93df18..a9f110941a 100644 --- a/pydantic_ai_slim/pydantic_ai/models/__init__.py +++ b/pydantic_ai_slim/pydantic_ai/models/__init__.py @@ -641,7 +641,7 @@ class ModelClassInformation: """The provider name as parsed from input string""" -def infer_provider_model_class(model: KnownModelName | str) -> ModelClassInformation: # C901 +def infer_provider_model_class(model: KnownModelName | str) -> ModelClassInformation: # C901 """Infer the model and provider from the name.""" if model == 'test': from .test import TestModel From afb03acbaa053ebdfd7bb340d9a1973f38d0a80a Mon Sep 17 00:00:00 2001 From: slkoo-cc Date: Fri, 24 Oct 2025 03:03:19 +0000 Subject: [PATCH 10/10] fix lint spacing --- pydantic_ai_slim/pydantic_ai/models/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pydantic_ai_slim/pydantic_ai/models/__init__.py b/pydantic_ai_slim/pydantic_ai/models/__init__.py index a9f110941a..cc9e050c15 100644 --- a/pydantic_ai_slim/pydantic_ai/models/__init__.py +++ b/pydantic_ai_slim/pydantic_ai/models/__init__.py @@ -631,6 +631,7 @@ def override_allow_model_requests(allow_model_requests: bool) -> Iterator[None]: @dataclass class ModelClassInformation: """Metadata of model as parsed from string with the model class and provider class for instantiation.""" + model_class: type[Model] """The raw model class""" provider_class: type[Provider[Any]] | None