"""Get the namespace of the langchain object."""
        return ["langchain", "schema", "runnable"]
    @property
    def steps(self) -> List[Runnable[Any, Any]]:
        """All the runnables that make up the sequence in order."""
        return [self.first] + self.middle + [self.last]
[docs]    @classmethod
    def is_lc_serializable(cls) -> bool:
        return True
    class Config:
        arbitrary_types_allowed = True
    @property
    def InputType(self) -> Type[Input]:
        return self.first.InputType
    @property
    def OutputType(self) -> Type[Output]:
        return self.last.OutputType
[docs]    def get_input_schema(
        self, config: Optional[RunnableConfig] = None
    ) -> Type[BaseModel]:
        from langchain_core.runnables.passthrough import RunnableAssign
        if isinstance(self.first, RunnableAssign):
            first = cast(RunnableAssign, self.first)
            next_ = self.middle[0] if self.middle else self.last
            next_input_schema = next_.get_input_schema(config)
            if not next_input_schema.__custom_root_type__:
                # it's a dict as expected
                return create_model(  # type: ignore[call-overload]
                    "RunnableSequenceInput",
                    **{
                        k: (v.annotation, v.default)
                        for k, v in next_input_schema.__fields__.items()
                        if k not in first.mapper.steps
                    },
                )
        return self.first.get_input_schema(config)
[docs]    def get_output_schema(
        self, config: Optional[RunnableConfig] = None
    ) -> Type[BaseModel]:
        return self.last.get_output_schema(config)
    @property