22
33from __future__ import annotations
44
5+ from typing import overload
56from typing_extensions import Literal
67
78import httpx
@@ -297,9 +298,36 @@ def delete(
297298 cast_to = NoneType ,
298299 )
299300
301+ @overload
300302 def get (
301303 self ,
302- model_or_owner : str | NotGiven = NOT_GIVEN , # Legacy positional arg
304+ model_owner_and_name : str ,
305+ * ,
306+ extra_headers : Headers | None = None ,
307+ extra_query : Query | None = None ,
308+ extra_body : Body | None = None ,
309+ timeout : float | httpx .Timeout | None | NotGiven = NOT_GIVEN ,
310+ ) -> ModelGetResponse :
311+ """Legacy format: models.get("owner/name")"""
312+ ...
313+
314+ @overload
315+ def get (
316+ self ,
317+ * ,
318+ model_owner : str ,
319+ model_name : str ,
320+ extra_headers : Headers | None = None ,
321+ extra_query : Query | None = None ,
322+ extra_body : Body | None = None ,
323+ timeout : float | httpx .Timeout | None | NotGiven = NOT_GIVEN ,
324+ ) -> ModelGetResponse :
325+ """New format: models.get(model_owner="owner", model_name="name")"""
326+ ...
327+
328+ def get (
329+ self ,
330+ model_owner_and_name : str | NotGiven = NOT_GIVEN ,
303331 * ,
304332 model_owner : str | NotGiven = NOT_GIVEN ,
305333 model_name : str | NotGiven = NOT_GIVEN ,
@@ -390,7 +418,7 @@ def get(
390418 - New: models.get(model_owner="owner", model_name="name")
391419
392420 Args:
393- model_or_owner : Legacy format string "owner/name" (positional argument)
421+ model_owner_and_name : Legacy format string "owner/name" (positional argument)
394422 model_owner: Model owner (keyword argument)
395423 model_name: Model name (keyword argument)
396424 extra_headers: Send extra headers
@@ -399,25 +427,33 @@ def get(
399427 timeout: Override the client-level default timeout for this request, in seconds
400428 """
401429 # Handle legacy format: models.get("owner/name")
402- if model_or_owner is not NOT_GIVEN :
430+ if model_owner_and_name is not NOT_GIVEN :
403431 if model_owner is not NOT_GIVEN or model_name is not NOT_GIVEN :
404432 raise ValueError (
405433 "Cannot specify both positional and keyword arguments. "
406434 "Use either models.get('owner/name') or models.get(model_owner='owner', model_name='name')"
407435 )
408436
437+ # Type narrowing - at this point model_owner_and_name must be a string
438+ if not isinstance (model_owner_and_name , str ):
439+ raise TypeError ("model_owner_and_name must be a string" )
440+
409441 # Parse the owner/name format
410- if "/" not in model_or_owner :
411- raise ValueError (f"Invalid model reference '{ model_or_owner } '. Expected format: 'owner/name'" )
442+ if "/" not in model_owner_and_name :
443+ raise ValueError (f"Invalid model reference '{ model_owner_and_name } '. Expected format: 'owner/name'" )
412444
413- parts = model_or_owner .split ("/" , 1 )
445+ parts = model_owner_and_name .split ("/" , 1 )
414446 model_owner = parts [0 ]
415447 model_name = parts [1 ]
416448
417449 # Validate required parameters
418450 if model_owner is NOT_GIVEN or model_name is NOT_GIVEN :
419451 raise ValueError ("model_owner and model_name are required" )
420452
453+ # Type narrowing - at this point both must be strings
454+ if not isinstance (model_owner , str ) or not isinstance (model_name , str ):
455+ raise TypeError ("model_owner and model_name must be strings" )
456+
421457 if not model_owner :
422458 raise ValueError (f"Expected a non-empty value for `model_owner` but received { model_owner !r} " )
423459 if not model_name :
@@ -721,9 +757,36 @@ async def delete(
721757 cast_to = NoneType ,
722758 )
723759
760+ @overload
724761 async def get (
725762 self ,
726- model_or_owner : str | NotGiven = NOT_GIVEN , # Legacy positional arg
763+ model_owner_and_name : str ,
764+ * ,
765+ extra_headers : Headers | None = None ,
766+ extra_query : Query | None = None ,
767+ extra_body : Body | None = None ,
768+ timeout : float | httpx .Timeout | None | NotGiven = NOT_GIVEN ,
769+ ) -> ModelGetResponse :
770+ """Legacy format: models.get("owner/name")"""
771+ ...
772+
773+ @overload
774+ async def get (
775+ self ,
776+ * ,
777+ model_owner : str ,
778+ model_name : str ,
779+ extra_headers : Headers | None = None ,
780+ extra_query : Query | None = None ,
781+ extra_body : Body | None = None ,
782+ timeout : float | httpx .Timeout | None | NotGiven = NOT_GIVEN ,
783+ ) -> ModelGetResponse :
784+ """New format: models.get(model_owner="owner", model_name="name")"""
785+ ...
786+
787+ async def get (
788+ self ,
789+ model_owner_and_name : str | NotGiven = NOT_GIVEN ,
727790 * ,
728791 model_owner : str | NotGiven = NOT_GIVEN ,
729792 model_name : str | NotGiven = NOT_GIVEN ,
@@ -814,7 +877,7 @@ async def get(
814877 - New: models.get(model_owner="owner", model_name="name")
815878
816879 Args:
817- model_or_owner : Legacy format string "owner/name" (positional argument)
880+ model_owner_and_name : Legacy format string "owner/name" (positional argument)
818881 model_owner: Model owner (keyword argument)
819882 model_name: Model name (keyword argument)
820883 extra_headers: Send extra headers
@@ -823,25 +886,33 @@ async def get(
823886 timeout: Override the client-level default timeout for this request, in seconds
824887 """
825888 # Handle legacy format: models.get("owner/name")
826- if model_or_owner is not NOT_GIVEN :
889+ if model_owner_and_name is not NOT_GIVEN :
827890 if model_owner is not NOT_GIVEN or model_name is not NOT_GIVEN :
828891 raise ValueError (
829892 "Cannot specify both positional and keyword arguments. "
830893 "Use either models.get('owner/name') or models.get(model_owner='owner', model_name='name')"
831894 )
832895
896+ # Type narrowing - at this point model_owner_and_name must be a string
897+ if not isinstance (model_owner_and_name , str ):
898+ raise TypeError ("model_owner_and_name must be a string" )
899+
833900 # Parse the owner/name format
834- if "/" not in model_or_owner :
835- raise ValueError (f"Invalid model reference '{ model_or_owner } '. Expected format: 'owner/name'" )
901+ if "/" not in model_owner_and_name :
902+ raise ValueError (f"Invalid model reference '{ model_owner_and_name } '. Expected format: 'owner/name'" )
836903
837- parts = model_or_owner .split ("/" , 1 )
904+ parts = model_owner_and_name .split ("/" , 1 )
838905 model_owner = parts [0 ]
839906 model_name = parts [1 ]
840907
841908 # Validate required parameters
842909 if model_owner is NOT_GIVEN or model_name is NOT_GIVEN :
843910 raise ValueError ("model_owner and model_name are required" )
844911
912+ # Type narrowing - at this point both must be strings
913+ if not isinstance (model_owner , str ) or not isinstance (model_name , str ):
914+ raise TypeError ("model_owner and model_name must be strings" )
915+
845916 if not model_owner :
846917 raise ValueError (f"Expected a non-empty value for `model_owner` but received { model_owner !r} " )
847918 if not model_name :
0 commit comments