diff --git a/llama_stack/apis/inference/inference.py b/llama_stack/apis/inference/inference.py index 9eb3910c6..21753ca23 100644 --- a/llama_stack/apis/inference/inference.py +++ b/llama_stack/apis/inference/inference.py @@ -726,7 +726,7 @@ class Inference(Protocol): """ ... - @webmethod(route="/inference/batch-completion", method="POST") + @webmethod(route="/inference/batch-completion", method="POST", experimental=True) async def batch_completion( self, model_id: str, @@ -777,7 +777,7 @@ class Inference(Protocol): """ ... - @webmethod(route="/inference/batch-chat-completion", method="POST") + @webmethod(route="/inference/batch-chat-completion", method="POST", experimental=True) async def batch_chat_completion( self, model_id: str, diff --git a/llama_stack/distribution/resolver.py b/llama_stack/distribution/resolver.py index 33ad343ec..70e432289 100644 --- a/llama_stack/distribution/resolver.py +++ b/llama_stack/distribution/resolver.py @@ -400,6 +400,8 @@ def check_protocol_compliance(obj: Any, protocol: Any) -> None: mro = type(obj).__mro__ for name, value in inspect.getmembers(protocol): if inspect.isfunction(value) and hasattr(value, "__webmethod__"): + if value.__webmethod__.experimental: + continue if not hasattr(obj, name): missing_methods.append((name, "missing")) elif not callable(getattr(obj, name)): diff --git a/llama_stack/schema_utils.py b/llama_stack/schema_utils.py index 8fd55add0..8143f1224 100644 --- a/llama_stack/schema_utils.py +++ b/llama_stack/schema_utils.py @@ -20,6 +20,7 @@ class WebMethod: raw_bytes_request_body: Optional[bool] = False # A descriptive name of the corresponding span created by tracing descriptive_name: Optional[str] = None + experimental: Optional[bool] = False T = TypeVar("T", bound=Callable[..., Any]) @@ -33,6 +34,7 @@ def webmethod( response_examples: Optional[List[Any]] = None, raw_bytes_request_body: Optional[bool] = False, descriptive_name: Optional[str] = None, + experimental: Optional[bool] = False, ) -> Callable[[T], T]: """ Decorator that supplies additional metadata to an endpoint operation function. @@ -41,6 +43,7 @@ def webmethod( :param public: True if the operation can be invoked without prior authentication. :param request_examples: Sample requests that the operation might take. Pass a list of objects, not JSON. :param response_examples: Sample responses that the operation might produce. Pass a list of objects, not JSON. + :param experimental: True if the operation is experimental and subject to change. """ def wrap(func: T) -> T: @@ -52,6 +55,7 @@ def webmethod( response_examples=response_examples, raw_bytes_request_body=raw_bytes_request_body, descriptive_name=descriptive_name, + experimental=experimental, ) return func