def METHOD_NAME(workbench: dict[str, Any]) -> ExtractedResults:
    """Extracting results from a project's workbench section (i.e. pipeline).  Specifically:
    - data sources (e.g. outputs from iterators, paramters)
    - progress of evaluators (e.g. a computational service)
    - data observers (basically inputs from probes)
    NOTE: all projects produces from iterations preserve the same node uuids so
    running this extraction on all projects from a iterations allows to create a
    row for a table of results
    """
    # nodeid -> % progress
    progress = {}
    # nodeid -> label (this map is necessary because cannot guaratee labels to be unique)
    labels = {}
    # nodeid -> { port: value , ...} # results have two levels deep: node/port
    results = {}
    for noid, node in workbench.items():
        key_parts = node["key"].split("/")
        # evaluate progress
        if "comp" in key_parts:
            progress[noid] = node.get("progress", 0)
        # evaluate results
        if "probe" in key_parts:
            label = node["label"]
            values = {}
            for port_name, node_input in node["inputs"].items():
                try:
                    values[port_name] = workbench[node_input["nodeUuid"]]["outputs"][
                        node_input["output"]
                    ]
                except KeyError:
                    # if not run, we know name but NOT value
                    values[port_name] = "n/a"
            results[noid], labels[noid] = values, label
        elif "data-iterator" in key_parts:
            label = node["label"]
            try:
                values = node["outputs"]  # {oid: value, ...}
            except KeyError:
                # if not iterated, we do not know NEITHER name NOT values
                values = {}
            results[noid], labels[noid] = values, label
        elif "parameter" in key_parts:
            label = node["label"]
            values = node["outputs"]
            results[noid], labels[noid] = values, label
    res = ExtractedResults(progress=progress, labels=labels, values=results)
    return res