sequence = runnable_1 | runnable_2
            # Or equivalently:
            # sequence = RunnableSequence(first=runnable_1, last=runnable_2)
            sequence.invoke(1)
            await runnable.ainvoke(1)
            sequence.batch([1, 2, 3])
            await sequence.abatch([1, 2, 3])
    Here's an example that uses streams JSON output generated by an LLM:
        .. code-block:: python
            from langchain_core.output_parsers.json import SimpleJsonOutputParser
            from langchain_core.chat_models.openai import ChatOpenAI
            prompt = PromptTemplate.from_template(
                'In JSON format, give me a list of {topic} and their '
                'corresponding names in French, Spanish and in a '
                'Cat Language.'
            )
            model = ChatOpenAI()
            chain = prompt | model | SimpleJsonOutputParser()
            async for chunk in chain.astream({'topic': 'colors'}):
                print('-')
                print(chunk, sep='', flush=True)
    """
    # The steps are broken into first, middle and last, solely for type checking
    # purposes. It allows specifying the `Input` on the first type, the `Output` of
    # the last type.
    first: Runnable[Input, Any]
    """The first runnable in the sequence."""
    middle: List[Runnable[Any, Any]] = Field(default_factory=list)
    """The middle runnables in the sequence."""
    last: Runnable[Any, Output]
    """The last runnable in the sequence."""
[docs]    @classmethod
    def get_lc_namespace(cls) -> List[str]:
        """Get the namespace of the langchain object."""