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
- Use one of the input socket names listed in the error message
- Inspect the receiver component's run() signature/inputs to find valid names
- If the input was removed in a newer haystack version, update to the new name or pin the version
- 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
- Inspect the receiver's run() signature for exact input names
- Let Haystack auto-match when only one input exists instead of naming it
- Verify input names against the installed haystack version's docs
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
- '${sender}' does not exist. Output connections of ${sender_c
- MarkdownHeaderSplitter only works with text documents but co
- Missing 'type' in component '{name}'
- Successfully imported module '{module}' but couldn't find '{
- Component '{component_type}' (name: '{name}') not imported.
AI-assisted analysis of deepset-ai/haystack@e318778c9b (2026-08-30).
Data as JSON: /api/errors/7a43f422a749e98c.
Report an issue: GitHub.