{"record":{"id":"daacc3c99841a825","repo":"deepset-ai/haystack","slug":"these-components-do-not-support-streaming-sorted","errorCode":null,"errorMessage":"These components do not support streaming: {sorted(non_streaming)}","messagePattern":"These components do not support streaming: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"haystack/core/pipeline/pipeline.py","lineNumber":1303,"sourceCode":"            it to get stuck and fail running, or if a Component fails or returns output in an unsupported type.\n        :raises PipelineMaxComponentRuns:\n            Surfaced during iteration. If a Component reaches the maximum number of times it can be run in this\n            Pipeline.\n        \"\"\"\n        streaming_capable = {\n            name\n            for name in self.graph.nodes\n            if getattr(self.graph.nodes[name][\"instance\"], \"__haystack_supports_async__\", False)\n            and \"streaming_callback\" in self.graph.nodes[name][\"instance\"].__haystack_input__\n        }\n        if streaming_components is not None:\n            requested = set(streaming_components)\n            unknown = requested - set(self.graph.nodes)\n            non_streaming = requested - unknown - streaming_capable\n            if unknown:\n                raise ValueError(f\"Unknown components in streaming_components: {sorted(unknown)}\")\n            if non_streaming:\n                raise ValueError(f\"These components do not support streaming: {sorted(non_streaming)}\")\n\n        queue: asyncio.Queue[StreamingChunk | _EndOfStream] = asyncio.Queue()\n\n        def make_forwarder(user_callback: StreamingCallbackT | None) -> AsyncStreamingCallbackT:\n            async def forwarder(chunk: StreamingChunk) -> None:\n                await queue.put(chunk)\n                if user_callback is not None:\n                    await _invoke_streaming_callback(user_callback, chunk)\n\n            return forwarder\n\n        new_data: dict[str, Any] = self._prepare_component_input_data(data)\n        for name in streaming_capable:\n            if streaming_components is not None and name not in streaming_components:\n                continue\n            instance = self.graph.nodes[name][\"instance\"]\n            comp_inputs = new_data.setdefault(name, {})\n","sourceCodeStart":1285,"sourceCodeEnd":1321,"githubUrl":"https://github.com/deepset-ai/haystack/blob/e318778c9bf60a1963e3b5f451359655dd696c30/haystack/core/pipeline/pipeline.py#L1285-L1321","documentation":"Pipeline.stream raises ValueError (pipeline.py:1303) when entries in streaming_components name valid components that do not support streaming (their run does not accept a streaming callback). Streaming can only be requested for components with streaming capability.","triggerScenarios":"streaming_components containing a non-LLM component, e.g. [\"retriever\", \"llm\"] where only the generator supports streaming callbacks; requesting streaming for converters or embedders.","commonSituations":"Assuming all components stream; passing the whole pipeline's component list instead of only generator-style components.","solutions":["Remove non-streaming components from streaming_components and keep only those whose run accepts a streaming callback.","Inspect the component's input sockets to confirm streaming support before adding it.","Leave streaming_components as None to use the default streaming-capable set."],"exampleFix":"// before\npipe.stream(data, streaming_components=[\"retriever\", \"llm\"])\n// after\npipe.stream(data, streaming_components=[\"llm\"])  # only streaming-capable components\n","handlingStrategy":"validation","validationCode":"# keep only streaming-capable components\ndef is_streaming_capable(name, pipe):\n    from haystack.core.component import component\n    inst = pipe.get_component(name)\n    return hasattr(inst, 'run') and any(\n        p.get('streaming_callback') is not None\n        for p in component.registry[type(inst)].run.input_types.values()\n    )\nnames = [n for n in requested if is_streaming_capable(n, pipe)]","typeGuard":null,"tryCatchPattern":"try:\n    stream = pipe.stream(data, streaming_components=names)\nexcept ValueError as e:\n    if 'do not support streaming' in str(e):\n        stream = pipe.stream(data, streaming_components=None)","preventionTips":["Only list generator/chat-generator style components in streaming_components.","Default to streaming_components=None and let Haystack pick capable components.","Check component input sockets for a streaming_callback parameter before including a name."],"tags":["pipeline","streaming","validation"],"backgroundTag":"component-does-not-support-streaming","analyzedSha":"e318778c9bf60a1963e3b5f451359655dd696c30","analyzedAt":"2026-08-30T11:45:20.711Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}