async def _check_disk_for_simulation_results(
        request: NodeIdAndDatasets, dataset_path: str
    ) -> NeuronSimulationResults | AttentionSimulationResults | None:
        """
        If the request is for scored explanations in one of the public sets on azure, return them if any exist.
        Include any scored explanations in the local cache. If there are no explanations in azure or the local
        cache, return None.
        """
        azure_path = _get_azure_explanation_path(request, dataset_path)
        cache_path = _get_local_cached_explanation_path(request, dataset_path)
        azure_simulation_results, local_simulation_results = None, None
        if azure_path is not None and file_exists(azure_path):
            azure_simulation_results = loads(
                await read_single_async(azure_path), backwards_compatible=False
            )
            _verify_cached_simulation_results(request, azure_simulation_results)
        if file_exists(cache_path):
            local_simulation_results = loads(
                await read_single_async(cache_path), backwards_compatible=False
            )
            _verify_cached_simulation_results(request, local_simulation_results)

        # Merge the results from azure and the local cache, deduplicating any scored explanations.
        # Thus we have a single object that contains all the scored explanations for the node.
        combined_simulation_results = _merge_simulation_results(
            azure_simulation_results, local_simulation_results
        )
        return combined_simulation_results

        If the request is for scored explanations in one of the public sets on azure, return them if any exist.
        Include any scored explanations in the local cache. If there are no explanations in azure or the local
        cache, return None.
        
neuron_explainer/activation_server/explainer_routes.py