deepset-ai/haystack · error · ValueError

These components do not support streaming: {sorted(non_strea

Error message

These components do not support streaming: {sorted(non_streaming)}

What it means

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.

Source

Thrown at haystack/core/pipeline/pipeline.py:1303

            it to get stuck and fail running, or if a Component fails or returns output in an unsupported type.
        :raises PipelineMaxComponentRuns:
            Surfaced during iteration. If a Component reaches the maximum number of times it can be run in this
            Pipeline.
        """
        streaming_capable = {
            name
            for name in self.graph.nodes
            if getattr(self.graph.nodes[name]["instance"], "__haystack_supports_async__", False)
            and "streaming_callback" in self.graph.nodes[name]["instance"].__haystack_input__
        }
        if streaming_components is not None:
            requested = set(streaming_components)
            unknown = requested - set(self.graph.nodes)
            non_streaming = requested - unknown - streaming_capable
            if unknown:
                raise ValueError(f"Unknown components in streaming_components: {sorted(unknown)}")
            if non_streaming:
                raise ValueError(f"These components do not support streaming: {sorted(non_streaming)}")

        queue: asyncio.Queue[StreamingChunk | _EndOfStream] = asyncio.Queue()

        def make_forwarder(user_callback: StreamingCallbackT | None) -> AsyncStreamingCallbackT:
            async def forwarder(chunk: StreamingChunk) -> None:
                await queue.put(chunk)
                if user_callback is not None:
                    await _invoke_streaming_callback(user_callback, chunk)

            return forwarder

        new_data: dict[str, Any] = self._prepare_component_input_data(data)
        for name in streaming_capable:
            if streaming_components is not None and name not in streaming_components:
                continue
            instance = self.graph.nodes[name]["instance"]
            comp_inputs = new_data.setdefault(name, {})

View on GitHub (pinned to e318778c9b)

Solutions

  1. Remove non-streaming components from streaming_components and keep only those whose run accepts a streaming callback.
  2. Inspect the component's input sockets to confirm streaming support before adding it.
  3. Leave streaming_components as None to use the default streaming-capable set.

Example fix

// before
pipe.stream(data, streaming_components=["retriever", "llm"])
// after
pipe.stream(data, streaming_components=["llm"])  # only streaming-capable components
Defensive patterns

Strategy: validation

Validate before calling

# keep only streaming-capable components
def is_streaming_capable(name, pipe):
    from haystack.core.component import component
    inst = pipe.get_component(name)
    return hasattr(inst, 'run') and any(
        p.get('streaming_callback') is not None
        for p in component.registry[type(inst)].run.input_types.values()
    )
names = [n for n in requested if is_streaming_capable(n, pipe)]

Try / catch

try:
    stream = pipe.stream(data, streaming_components=names)
except ValueError as e:
    if 'do not support streaming' in str(e):
        stream = pipe.stream(data, streaming_components=None)

Prevention

When it happens

Trigger: streaming_components containing a non-LLM component, e.g. ["retriever", "llm"] where only the generator supports streaming callbacks; requesting streaming for converters or embedders.

Common situations: Assuming all components stream; passing the whole pipeline's component list instead of only generator-style components.

Related errors


AI-assisted analysis of deepset-ai/haystack@e318778c9b (2026-08-30). Data as JSON: /api/errors/daacc3c99841a825. Report an issue: GitHub.