deepset-ai/haystack · error · PipelineConnectError

'${receiver} does not exist. Input connections of ${receiver

Error message

'${receiver} does not exist. Input connections of ${receiver_component_name} are: {}

What it means

Pipeline.connect() raises PipelineConnectError when an explicitly given receiver socket name does not match any input socket of the receiver component. The error lists the valid input connections and their types. Note the message itself has a missing closing quote in this haystack version.

Source

Thrown at haystack/core/pipeline/base.py:654

                f"for example by using the '@component.output_types' decorator."
            )

        # If the name of either socket is given, get the socket
        sender_socket: OutputSocket | None = None
        if sender_socket_name:
            sender_socket = sender_sockets.get(sender_socket_name)
            if not sender_socket:
                raise PipelineConnectError(
                    f"'{sender}' does not exist. "
                    f"Output connections of {sender_component_name} are: "
                    + ", ".join([f"{name} (type {_type_name(socket.type)})" for name, socket in sender_sockets.items()])
                )

        receiver_socket: InputSocket | None = None
        if receiver_socket_name:
            receiver_socket = receiver_sockets.get(receiver_socket_name)
            if not receiver_socket:
                raise PipelineConnectError(
                    f"'{receiver} does not exist. "
                    f"Input connections of {receiver_component_name} are: "
                    + ", ".join(
                        [f"{name} (type {_type_name(socket.type)})" for name, socket in receiver_sockets.items()]
                    )
                )

        # Look for a matching connection among the possible ones.
        # Note that if there is more than one possible connection but two sockets match by name, they're paired.
        sender_socket_candidates: list[OutputSocket] = (
            [sender_socket] if sender_socket else list(sender_sockets.values())
        )
        receiver_socket_candidates: list[InputSocket] = (
            [receiver_socket] if receiver_socket else list(receiver_sockets.values())
        )

        conversion_strategy = None

View on GitHub (pinned to e318778c9b)

Solutions

  1. Use one of the input socket names listed in the error message
  2. Inspect the receiver component's run() signature/inputs to find valid names
  3. If the input was removed in a newer haystack version, update to the new name or pin the version
  4. Drop the '.socket' suffix and let Haystack auto-match when the receiver has one compatible input

Example fix

// before
pipeline.connect('retriever', 'ranker.quary')
// after
pipeline.connect('retriever', 'ranker.query')
Defensive patterns

Strategy: validation

Validate before calling

comp = pipeline.get_component(receiver)
valid = set(comp.__haystack_input__._sockets_dict)
assert socket_name in valid, f"{socket_name!r} not an input of {receiver}; valid: {valid}"

Type guard

def input_exists(pipeline, receiver: str, socket: str) -> bool:
    return socket in pipeline.get_component(receiver).__haystack_input__._sockets_dict

Try / catch

try:
    pipeline.connect(sender, f'{receiver}.{socket}')
except PipelineConnectError as e:
    logger.error('%s; valid inputs listed in error: %s', e, e)

Prevention

When it happens

Trigger: Calling pipeline.connect('sender', 'receiver.wrong_socket') where 'wrong_socket' is not a key in the receiver's input_sockets dict, e.g. a typo or a renamed input.

Common situations: Typos like 'promt' instead of 'prompt'; assuming an input name from a different component class; version changes renaming inputs (e.g. 'query' vs 'questions'); connecting to optional inputs that don't exist in this version.

Related errors


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