{"record":{"id":"6fe4d473b40fbba6","repo":"deepset-ai/haystack","slug":"sender-does-not-exist-output-connections-of","errorCode":null,"errorMessage":"'${sender}' does not exist. Output connections of ${sender_component_name} are: {}","messagePattern":"'(.+?)' does not exist\\. Output connections of (.+?) are: (.+?)","errorType":"exception","errorClass":"PipelineConnectError","httpStatus":null,"severity":"error","filePath":"haystack/core/pipeline/base.py","lineNumber":644,"sourceCode":"            raise ValueError(f\"Component named {sender_component_name} not found in the pipeline.\") from exc\n        try:\n            receiver_sockets = self.graph.nodes[receiver_component_name][\"input_sockets\"]\n        except KeyError as exc:\n            raise ValueError(f\"Component named {receiver_component_name} not found in the pipeline.\") from exc\n\n        if not sender_sockets:\n            raise PipelineConnectError(\n                f\"'{sender_component_name}' does not have any output connections. \"\n                f\"Please check that the output types of '{sender_component_name}.run' are set, \"\n                f\"for example by using the '@component.output_types' decorator.\"\n            )\n\n        # If the name of either socket is given, get the socket\n        sender_socket: OutputSocket | None = None\n        if sender_socket_name:\n            sender_socket = sender_sockets.get(sender_socket_name)\n            if not sender_socket:\n                raise PipelineConnectError(\n                    f\"'{sender}' does not exist. \"\n                    f\"Output connections of {sender_component_name} are: \"\n                    + \", \".join([f\"{name} (type {_type_name(socket.type)})\" for name, socket in sender_sockets.items()])\n                )\n\n        receiver_socket: InputSocket | None = None\n        if receiver_socket_name:\n            receiver_socket = receiver_sockets.get(receiver_socket_name)\n            if not receiver_socket:\n                raise PipelineConnectError(\n                    f\"'{receiver} does not exist. \"\n                    f\"Input connections of {receiver_component_name} are: \"\n                    + \", \".join(\n                        [f\"{name} (type {_type_name(socket.type)})\" for name, socket in receiver_sockets.items()]\n                    )\n                )\n\n        # Look for a matching connection among the possible ones.","sourceCodeStart":626,"sourceCodeEnd":662,"githubUrl":"https://github.com/deepset-ai/haystack/blob/e318778c9bf60a1963e3b5f451359655dd696c30/haystack/core/pipeline/base.py#L626-L662","documentation":"Pipeline.connect() raises PipelineConnectError when an explicitly given sender socket name (in 'component.socket' syntax) does not match any output socket of the sender component. The error lists the actual available output connections with their types.","triggerScenarios":"Calling pipeline.connect('sender.wrong_socket', 'receiver') where 'wrong_socket' is not a key in the sender's output_sockets dict, usually a typo or an outdated socket name.","commonSituations":"Typo in the socket name; assuming a socket name that differs from the dict key returned by run(); library upgrade changed a component's output socket names; auto-generated type names like 'documents' vs 'replies'.","solutions":["Read the 'Output connections of X are: ...' list in the error and use one of those exact socket names","Inspect the sender's run() @component.output_types to see valid socket names","Check haystack changelog if a component's output names changed between versions","Drop the '.socket' suffix and let Haystack auto-match if only one output exists"],"exampleFix":"// before\npipeline.connect('llm.replie', 'prompt_builder')\n// after\npipeline.connect('llm.replies', 'prompt_builder')","handlingStrategy":"validation","validationCode":"comp = pipeline.get_component(sender)\nvalid = set(comp.__haystack_output__._sockets_dict)\nassert socket_name in valid, f\"{socket_name!r} not an output of {sender}; valid: {valid}\"","typeGuard":"def output_exists(pipeline, sender: str, socket: str) -> bool:\n    return socket in pipeline.get_component(sender).__haystack_output__._sockets_dict","tryCatchPattern":"try:\n    pipeline.connect(f'{sender}.{socket}', receiver)\nexcept PipelineConnectError as e:\n    logger.error('%s; valid outputs listed in error: %s', e, e)","preventionTips":["Read the available output names from the error message","Check the component's @component.output_types declaration","Pin haystack versions and review changelogs for socket renames"],"tags":["pipeline","haystack","socket-name","typo"],"backgroundTag":"invalid-socket-name","analyzedSha":"e318778c9bf60a1963e3b5f451359655dd696c30","analyzedAt":"2026-08-30T11:45:20.711Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}