From 48ad9c976edaaf46f312402aa2aa2745bac89a42 Mon Sep 17 00:00:00 2001 From: David Montague <35119617+dmontagu@users.noreply.github.com> Date: Tue, 18 Nov 2025 13:07:09 -0700 Subject: [PATCH] Add gateway route support to provider inference --- .../pydantic_ai/providers/__init__.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/pydantic_ai_slim/pydantic_ai/providers/__init__.py b/pydantic_ai_slim/pydantic_ai/providers/__init__.py index 9557e8e87b..c12f80ca61 100644 --- a/pydantic_ai_slim/pydantic_ai/providers/__init__.py +++ b/pydantic_ai_slim/pydantic_ai/providers/__init__.py @@ -5,6 +5,7 @@ from __future__ import annotations as _annotations +import re from abc import ABC, abstractmethod from typing import Any, Generic, TypeVar @@ -153,13 +154,24 @@ def infer_provider_class(provider: str) -> type[Provider[Any]]: # noqa: C901 raise ValueError(f'Unknown provider: {provider}') +_gateway_provider_regex = re.compile('gateway(?::([^/]*))?/(.*)') +""" +This regex matches strings of the forms: +1. gateway/my-upstream-provider +2. gateway:my-route/my-upstream-provider + +The (optional) route is the first group, the upstream provider is the second. +""" + + def infer_provider(provider: str) -> Provider[Any]: """Infer the provider from the provider name.""" - if provider.startswith('gateway/'): + if match := re.match(_gateway_provider_regex, provider): from .gateway import gateway_provider - upstream_provider = provider.removeprefix('gateway/') - return gateway_provider(upstream_provider) + route = match.group(1) + upstream_provider = match.group(2) + return gateway_provider(upstream_provider, route=route) elif provider in ('google-vertex', 'google-gla'): from .google import GoogleProvider