def _get_vespa_application(self, check_configured: bool = True, need_binary_file_support: bool = False,
                               check_for_application_convergence: bool = True) -> VespaApplicationPackage:
        """
        Retrieve a Vespa application package. Depending on whether we need to handle binary files and the Vespa version,
        it uses different implementation of VespaApplicationStore.

        Args:
            check_configured: if set to True, it checks whether the application package is configured or not.
            need_binary_file_support: indicates whether the support for binary file is needed.
            check_for_application_convergence: whether we check convergence of the Vespa app package. If set to true and
              Vespa is not converged, this process will fail with a VespaError raised.

        Returns:
            The VespaApplicationPackage instance we can use to do bootstrapping/rollback and any index operations.
        """
        vespa_version = semver.VersionInfo.parse(self.vespa_client.get_vespa_version())

        if vespa_version < self._MINIMUM_VESPA_VERSION_TO_SUPPORT_UPLOAD_BINARY_FILES:
            # Please note that this warning message will only be logged out for OS users running Marqo on external
            # Vespa servers with version prior to 8.382.22. This will be displayed when Marqo starts up and before
            # each index CUD operation
            logger.warning(f'Your Vespa version {vespa_version} is lower than the minimum recommended Vespa version '
                           f'{self._MINIMUM_VESPA_VERSION_TO_SUPPORT_FAST_FILE_DISTRIBUTION}. This could cause '
                           f'unexpected behavior when bootstrapping Marqo. Please upgrade '
                           f'Vespa to version {self._MINIMUM_VESPA_VERSION_TO_SUPPORT_FAST_FILE_DISTRIBUTION} or '
                           f'later. Please see {marqo_docs.troubleshooting()} for more details.')

        if vespa_version < self._MINIMUM_VESPA_VERSION_TO_SUPPORT_FAST_FILE_DISTRIBUTION:
            # Please note that this warning message will only be logged out for OS users running Marqo on external
            # Vespa servers with version prior to 8.396.18. This will be displayed when Marqo starts up and before
            # each index CUD operation
            logger.warning(f'Your Vespa version {vespa_version} is lower than the minimum recommended Vespa version '
                           f'{self._MINIMUM_VESPA_VERSION_TO_SUPPORT_FAST_FILE_DISTRIBUTION}. You may encounter slower '
                           f'response times when creating a Marqo index or adding documents to unstructured indexes. '
                           f'Please upgrade Vespa to version {self._MINIMUM_VESPA_VERSION_TO_SUPPORT_FAST_FILE_DISTRIBUTION} or '
                           f'later. Please see {marqo_docs.troubleshooting()} for more details.')

        if need_binary_file_support and vespa_version < self._MINIMUM_VESPA_VERSION_TO_SUPPORT_UPLOAD_BINARY_FILES:
            # Binary files are only supported using VespaApplicationFileStore prior to Vespa version 8.382.22
            application_package_store = VespaApplicationFileStore(
                vespa_client=self.vespa_client,
                deploy_timeout=self._deployment_timeout_seconds,
                wait_for_convergence_timeout=self._convergence_timeout_seconds,
                check_for_application_convergence=check_for_application_convergence
            )
        else:
            application_package_store = ApplicationPackageDeploymentSessionStore(
                vespa_client=self.vespa_client,
                deploy_timeout=self._deployment_timeout_seconds,
                wait_for_convergence_timeout=self._convergence_timeout_seconds,
                check_for_application_convergence=check_for_application_convergence
            )

        application = VespaApplicationPackage(application_package_store)

        if check_configured and not application.is_configured:
            raise ApplicationNotInitializedError()

        return application

        Retrieve a Vespa application package. Depending on whether we need to handle binary files and the Vespa version,
        it uses different implementation of VespaApplicationStore.

        Args:
            check_configured: if set to True, it checks whether the application package is configured or not.
            need_binary_file_support: indicates whether the support for binary file is needed.
            check_for_application_convergence: whether we check convergence of the Vespa app package. If set to true and
              Vespa is not converged, this process will fail with a VespaError raised.

        Returns:
            The VespaApplicationPackage instance we can use to do bootstrapping/rollback and any index operations.
        
src/marqo/core/index_management/index_management.py