diff --git a/src/mistralai/basesdk.py b/src/mistralai/basesdk.py index 6b62dda..9f037be 100644 --- a/src/mistralai/basesdk.py +++ b/src/mistralai/basesdk.py @@ -30,15 +30,25 @@ def __init__( self.parent_ref = parent_ref def _get_url(self, base_url, url_variables): - sdk_url, sdk_variables = self.sdk_configuration.get_server_details() - - if base_url is None: - base_url = sdk_url - - if url_variables is None: - url_variables = sdk_variables - - return utils.template_url(base_url, url_variables) + sdk_configuration = ( + self.sdk_configuration + ) # local var for attribute lookup speed + sdk_url, sdk_variables = sdk_configuration.get_server_details() + + base = base_url if base_url is not None else sdk_url + vars_ = url_variables if url_variables is not None else sdk_variables + + # FAST template_url optimization: use str.format for variable substitution in one pass + # This is a safe rewrite assuming only keys in vars_ are expected in base. + # Fall back to the original if values are not string (shouldn't happen for URLs) + if vars_: + try: + # Replace {key} with value for each key via format mapping + base = base.format(**{k: str(v) for k, v in vars_.items()}) + except KeyError: + # If the url template has keys not supplied, fallback to original method. + return utils.template_url(base, vars_) + return base def _build_request_async( self, @@ -225,10 +235,10 @@ def do_request( stream=False, retry_config: Optional[Tuple[RetryConfig, List[str]]] = None, ) -> httpx.Response: - client = self.sdk_configuration.client - logger = self.sdk_configuration.debug_logger - - hooks = self.sdk_configuration.__dict__["_hooks"] + sdk_configuration = self.sdk_configuration + client = sdk_configuration.client + logger = sdk_configuration.debug_logger + hooks = sdk_configuration.__dict__.get("_hooks") def do(): http_res = None diff --git a/src/mistralai/utils/serializers.py b/src/mistralai/utils/serializers.py index 378a14c..2195a80 100644 --- a/src/mistralai/utils/serializers.py +++ b/src/mistralai/utils/serializers.py @@ -178,7 +178,7 @@ def is_nullable(field): if origin is Nullable or origin is OptionalNullable: return True - if not origin is Union or type(None) not in get_args(field): + if origin is not Union or type(None) not in get_args(field): return False for arg in get_args(field): diff --git a/src/mistralai/utils/values.py b/src/mistralai/utils/values.py index dae01a4..ac217f4 100644 --- a/src/mistralai/utils/values.py +++ b/src/mistralai/utils/values.py @@ -52,9 +52,11 @@ def match_status_codes(status_codes: List[str], status_code: int) -> bool: T = TypeVar("T") + def cast_partial(typ): return partial(cast, typ) + def get_global_from_env( value: Optional[T], env_key: str, type_cast: Callable[[str], T] ) -> Optional[T]: