11# Ship serverless code as you write it. No builds, no deploys — just run.
2- from typing import ClassVar
3-
42from pydantic import model_validator
53
64from .constants import (
@@ -27,29 +25,6 @@ class LiveServerlessMixin:
2725 runtime, not by the Docker image.
2826 """
2927
30- _image_type : ClassVar [str ] = (
31- "" # Override in subclasses: 'gpu', 'cpu', 'lb', 'lb-cpu'
32- )
33- _GPU_IMAGE_TYPES : ClassVar [frozenset [str ]] = frozenset ({"gpu" , "lb" })
34-
35- @property
36- def _live_image (self ) -> str :
37- python_version = getattr (self , "python_version" , None )
38- if not python_version :
39- if self ._image_type in self ._GPU_IMAGE_TYPES :
40- python_version = GPU_BASE_IMAGE_PYTHON_VERSION
41- else :
42- python_version = local_python_version ()
43- return get_image_name (self ._image_type , python_version )
44-
45- @property
46- def imageName (self ):
47- return self ._live_image
48-
49- @imageName .setter
50- def imageName (self , value ):
51- pass
52-
5328 def _create_new_template (self ) -> PodTemplate :
5429 """Create template with dockerArgs for process injection."""
5530 template = super ()._create_new_template () # type: ignore[misc]
@@ -66,54 +41,50 @@ def _configure_existing_template(self) -> None:
6641class LiveServerless (LiveServerlessMixin , ServerlessEndpoint ):
6742 """GPU-only live serverless endpoint."""
6843
69- _image_type : ClassVar [str ] = "gpu"
70-
7144 @model_validator (mode = "before" )
7245 @classmethod
7346 def set_live_serverless_template (cls , data : dict ):
7447 """Set default GPU image for Live Serverless."""
75- python_version = data .get ("python_version" ) or GPU_BASE_IMAGE_PYTHON_VERSION
76- data ["imageName" ] = get_image_name ("gpu" , python_version )
48+ if "imageName" not in data :
49+ python_version = data .get ("python_version" ) or GPU_BASE_IMAGE_PYTHON_VERSION
50+ data ["imageName" ] = get_image_name ("gpu" , python_version )
7751 return data
7852
7953
8054class CpuLiveServerless (LiveServerlessMixin , CpuServerlessEndpoint ):
8155 """CPU-only live serverless endpoint with automatic disk sizing."""
8256
83- _image_type : ClassVar [str ] = "cpu"
84-
8557 @model_validator (mode = "before" )
8658 @classmethod
8759 def set_live_serverless_template (cls , data : dict ):
8860 """Set default CPU image for Live Serverless."""
89- python_version = data .get ("python_version" ) or local_python_version ()
90- data ["imageName" ] = get_image_name ("cpu" , python_version )
61+ if "imageName" not in data :
62+ python_version = data .get ("python_version" ) or local_python_version ()
63+ data ["imageName" ] = get_image_name ("cpu" , python_version )
9164 return data
9265
9366
9467class LiveLoadBalancer (LiveServerlessMixin , LoadBalancerSlsResource ):
9568 """Live load-balanced endpoint."""
9669
97- _image_type : ClassVar [str ] = "lb"
98-
9970 @model_validator (mode = "before" )
10071 @classmethod
10172 def set_live_lb_template (cls , data : dict ):
10273 """Set default image for Live Load-Balanced endpoint."""
103- python_version = data .get ("python_version" ) or GPU_BASE_IMAGE_PYTHON_VERSION
104- data ["imageName" ] = get_image_name ("lb" , python_version )
74+ if "imageName" not in data :
75+ python_version = data .get ("python_version" ) or GPU_BASE_IMAGE_PYTHON_VERSION
76+ data ["imageName" ] = get_image_name ("lb" , python_version )
10577 return data
10678
10779
10880class CpuLiveLoadBalancer (LiveServerlessMixin , CpuLoadBalancerSlsResource ):
10981 """CPU-only live load-balanced endpoint."""
11082
111- _image_type : ClassVar [str ] = "lb-cpu"
112-
11383 @model_validator (mode = "before" )
11484 @classmethod
11585 def set_live_cpu_lb_template (cls , data : dict ):
11686 """Set default CPU image for Live Load-Balanced endpoint."""
117- python_version = data .get ("python_version" ) or local_python_version ()
118- data ["imageName" ] = get_image_name ("lb-cpu" , python_version )
87+ if "imageName" not in data :
88+ python_version = data .get ("python_version" ) or local_python_version ()
89+ data ["imageName" ] = get_image_name ("lb-cpu" , python_version )
11990 return data
0 commit comments