From 081b4fca8296318b9f958b3b4a2527cb2f74dad4 Mon Sep 17 00:00:00 2001 From: kuihao Date: Thu, 7 May 2026 21:09:31 +0800 Subject: [PATCH] fix(sam3_base_predictor): filter init_state kwargs via inspect in start_session() Sam3MultiplexTrackingWithInteractivity.init_state() does not accept `offload_state_to_cpu`, causing a TypeError when start_session() is called via the multiplex video predictor build_sam3_multiplex_video_predictor() (e.g. from the official sam3.1_video_predictor_example.ipynb). start_session() was unconditionally forwarding all kwargs to self.model.init_state(), unlike add_prompt() and propagate_in_video() which already guard against this using inspect.signature(). Apply the same inspect-based filtering pattern to start_session() so that only parameters supported by the underlying model's init_state() are forwarded, making the base class consistent and compatible across SAM 3 and SAM 3.1 model variants. Fixes: TypeError: Sam3MultiplexTrackingWithInteractivity.init_state() got an unexpected keyword argument 'offload_state_to_cpu' --- sam3/model/sam3_base_predictor.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sam3/model/sam3_base_predictor.py b/sam3/model/sam3_base_predictor.py index 2d699fe19..bed703069 100644 --- a/sam3/model/sam3_base_predictor.py +++ b/sam3/model/sam3_base_predictor.py @@ -133,6 +133,14 @@ def start_session( init_kwargs["async_loading_frames"] = self.async_loading_frames if hasattr(self, "video_loader_type"): init_kwargs["video_loader_type"] = self.video_loader_type + + # Filter init_kwargs to only pass what the model's init_state() accepts + import inspect + + sig = inspect.signature(self.model.init_state) + valid_params = set(sig.parameters.keys()) + init_kwargs = {k: v for k, v in init_kwargs.items() if k in valid_params} + inference_state = self.model.init_state(**init_kwargs) if not session_id: