async def astream_respond_to_query(self, query: str) -> AsyncIterable[str]:
        """Respond to a query.

        This is the main method.

        Args:
            query: The query to respond to.
        """

        # Run the agents on the same input. These perform the same steps as this
        # app.
        for agent in self.agents:
            await agent.ainvoke(query)

        # Get rerankined, process chunks.
        chunks = await self.aget_context(query)

        # Do some remembering.
        await self.memory.aremember(query)

        # Do some generation.
        summary = await self.llm.agenerate(
            ",".join(filter(lambda c: len(c) < 128, chunks))
        )

        # Do some templating.
        answer_prompt = self.template.fill(question=query, context=summary)

        # Another llm call to "get the final answer". Streaming this time.
        answer = ""
        async for chunk in self.llm.astream(answer_prompt):
            answer += chunk
            yield chunk

        # Do some more remembering.
        self.memory.remember(answer)
Respond to a query.

        This is the main method.

        Args:
            query: The query to respond to.
        
examples/dev/dummy_app/app.py