From 849bab2daa3fc4ac4522ba1f349175736398f7ba Mon Sep 17 00:00:00 2001 From: MING KANG Date: Thu, 18 Apr 2024 14:58:17 -0400 Subject: [PATCH 1/8] Set AQUA logging through environment variables and CLI argument --- ads/aqua/__init__.py | 43 +++++++++++++++++++++++++++++++++++++----- ads/aqua/base.py | 3 +-- ads/aqua/cli.py | 7 ++++++- ads/aqua/evaluation.py | 13 +++++++------ ads/aqua/finetune.py | 1 - ads/aqua/model.py | 6 ++---- ads/aqua/utils.py | 15 +++------------ 7 files changed, 57 insertions(+), 31 deletions(-) diff --git a/ads/aqua/__init__.py b/ads/aqua/__init__.py index 45f1a8b03..63fc6194f 100644 --- a/ads/aqua/__init__.py +++ b/ads/aqua/__init__.py @@ -5,15 +5,48 @@ import logging -import sys import os +import sys + +from ads import set_auth from ads.aqua.utils import fetch_service_compartment from ads.config import NB_SESSION_OCID, OCI_RESOURCE_PRINCIPAL_VERSION -from ads import set_auth -logger = logging.getLogger(__name__) -handler = logging.StreamHandler(sys.stdout) -logger.setLevel(logging.INFO) + +def get_logger_level(): + """Retrieves logging level from environment variable `LOG_LEVEL`.""" + level = os.environ.get("LOG_LEVEL", "INFO").upper() + return level + + +def configure_aqua_logger(): + """Configures the AQUA logger.""" + log_level = get_logger_level() + logger = logging.getLogger(__name__) + logger.setLevel(log_level) + + handler = logging.StreamHandler(sys.stdout) + formatter = logging.Formatter( + "%(asctime)s - %(name)s.%(module)s - %(levelname)s - %(message)s" + ) + handler.setFormatter(formatter) + handler.setLevel(log_level) + + logger.addHandler(handler) + logger.propagate = False + return logger + + +logger = configure_aqua_logger() + + +def set_log_level(log_level: str): + """Global for setting logging level.""" + + log_level = log_level.upper() + logger.setLevel(log_level) + logger.handlers[0].setLevel(log_level) + if OCI_RESOURCE_PRINCIPAL_VERSION: set_auth("resource_principal") diff --git a/ads/aqua/base.py b/ads/aqua/base.py index 870001cb6..43796ebb0 100644 --- a/ads/aqua/base.py +++ b/ads/aqua/base.py @@ -19,7 +19,6 @@ get_artifact_path, is_valid_ocid, load_config, - logger, ) from ads.common import oci_client as oc from ads.common.auth import default_signer @@ -164,7 +163,7 @@ def create_model_version_set( tag = Tags.AQUA_FINE_TUNING.value if not model_version_set_id: - tag = Tags.AQUA_FINE_TUNING.value # TODO: Fix this + tag = Tags.AQUA_FINE_TUNING.value # TODO: Fix this try: model_version_set = ModelVersionSet.from_name( name=model_version_set_name, diff --git a/ads/aqua/cli.py b/ads/aqua/cli.py index 55dff69bf..f8bcc46aa 100644 --- a/ads/aqua/cli.py +++ b/ads/aqua/cli.py @@ -3,11 +3,13 @@ # Copyright (c) 2024 Oracle and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +import os +from ads.aqua import set_log_level from ads.aqua.deployment import AquaDeploymentApp +from ads.aqua.evaluation import AquaEvaluationApp from ads.aqua.finetune import AquaFineTuningApp from ads.aqua.model import AquaModelApp -from ads.aqua.evaluation import AquaEvaluationApp class AquaCommand: @@ -17,3 +19,6 @@ class AquaCommand: fine_tuning = AquaFineTuningApp deployment = AquaDeploymentApp evaluation = AquaEvaluationApp + + def __init__(self, log_level=os.environ.get("LOG_LEVEL", "INFO").upper()): + set_log_level(log_level) diff --git a/ads/aqua/evaluation.py b/ads/aqua/evaluation.py index dfce6e3ee..1ac5308ca 100644 --- a/ads/aqua/evaluation.py +++ b/ads/aqua/evaluation.py @@ -975,7 +975,7 @@ def list( self._process_evaluation_summary(model=model, jobrun=jobrun) ) except Exception as exc: - logger.error( + logger.warning( f"Processing evaluation: {model.identifier} generated an exception: {exc}" ) evaluations.append( @@ -1020,7 +1020,7 @@ def _if_eval_artifact_exist( return True if response.status == 200 else False except oci.exceptions.ServiceError as ex: if ex.status == 404: - logger.info("Evaluation artifact not found.") + logger.debug(f"Evaluation artifact not found for {model.identifier}.") return False @telemetry(entry_point="plugin=evaluation&action=get_status", name="aqua") @@ -1566,8 +1566,9 @@ def _build_resource_identifier( ), ) except Exception as e: - logger.error( - f"Failed to construct AquaResourceIdentifier from given id=`{id}`, and name=`{name}`, {str(e)}" + logger.debug( + f"Failed to construct AquaResourceIdentifier from given id=`{id}`, and name=`{name}`. " + f"DEBUG INFO: {str(e)}" ) return AquaResourceIdentifier() @@ -1613,7 +1614,7 @@ def _fetch_runtime_params( ) if not params.get(EvaluationConfig.PARAMS): raise AquaMissingKeyError( - "model parameters have not been saved in correct format in model taxonomy.", + "model parameters have not been saved in correct format in model taxonomy. ", service_payload={"params": params}, ) # TODO: validate the format of parameters. @@ -1645,7 +1646,7 @@ def _build_job_identifier( except Exception as e: logger.debug( - f"Failed to get job details from job_run_details: {job_run_details}" + f"Failed to get job details from job_run_details: {job_run_details} " f"DEBUG INFO:{str(e)}" ) return AquaResourceIdentifier() diff --git a/ads/aqua/finetune.py b/ads/aqua/finetune.py index 2f3811ec1..33ea4307e 100644 --- a/ads/aqua/finetune.py +++ b/ads/aqua/finetune.py @@ -29,7 +29,6 @@ UNKNOWN, UNKNOWN_DICT, get_container_image, - logger, upload_local_to_os, ) from ads.common.auth import default_signer diff --git a/ads/aqua/model.py b/ads/aqua/model.py index 1a5042e18..982553f50 100644 --- a/ads/aqua/model.py +++ b/ads/aqua/model.py @@ -14,7 +14,7 @@ from cachetools import TTLCache from oci.data_science.models import JobRun, Model -from ads.aqua import logger, utils +from ads.aqua import ODSC_MODEL_COMPARTMENT_OCID, logger, utils from ads.aqua.base import AquaApp from ads.aqua.constants import ( TRAINING_METRICS_FINAL, @@ -26,7 +26,6 @@ ) from ads.aqua.data import AquaResourceIdentifier, Tags from ads.aqua.exception import AquaRuntimeError - from ads.aqua.training.exceptions import exit_code_dict from ads.aqua.utils import ( LICENSE_TXT, @@ -50,7 +49,6 @@ PROJECT_OCID, TENANCY_OCID, ) -from ads.aqua import ODSC_MODEL_COMPARTMENT_OCID from ads.model import DataScienceModel from ads.model.model_metadata import MetadataTaxonomyKeys, ModelCustomMetadata from ads.telemetry import telemetry @@ -228,7 +226,7 @@ def __post_init__( ).value except Exception as e: logger.debug( - f"Failed to extract model hyperparameters from {model.id}:" f"{str(e)}" + f"Failed to extract model hyperparameters from {model.id}: " f"{str(e)}" ) model_hyperparameters = {} diff --git a/ads/aqua/utils.py b/ads/aqua/utils.py index d3369ba33..1a6efe36a 100644 --- a/ads/aqua/utils.py +++ b/ads/aqua/utils.py @@ -6,11 +6,9 @@ import asyncio import base64 import json -import logging import os import random import re -import sys from enum import Enum from functools import wraps from pathlib import Path @@ -21,24 +19,17 @@ import oci from oci.data_science.models import JobRun, Model +from ads.aqua import logger from ads.aqua.constants import RqsAdditionalDetails -from ads.aqua.data import AquaResourceIdentifier, Tags +from ads.aqua.data import AquaResourceIdentifier from ads.aqua.exception import AquaFileNotFoundError, AquaRuntimeError, AquaValueError from ads.common.auth import default_signer from ads.common.object_storage_details import ObjectStorageDetails from ads.common.oci_resource import SEARCH_TYPE, OCIResource from ads.common.utils import get_console_link, upload_to_os -from ads.config import ( - AQUA_SERVICE_MODELS_BUCKET, - CONDA_BUCKET_NS, - TENANCY_OCID, -) +from ads.config import AQUA_SERVICE_MODELS_BUCKET, CONDA_BUCKET_NS, TENANCY_OCID from ads.model import DataScienceModel, ModelVersionSet -# TODO: allow the user to setup the logging level? -logging.basicConfig(stream=sys.stdout, level=logging.INFO) -logger = logging.getLogger("ODSC_AQUA") - UNKNOWN = "" UNKNOWN_DICT = {} README = "README.md" From 91ec5b190f10caa624563a4954c44f80ace545da Mon Sep 17 00:00:00 2001 From: MING KANG Date: Thu, 18 Apr 2024 15:16:06 -0400 Subject: [PATCH 2/8] fixed circular import issues --- ads/aqua/finetune.py | 2 +- ads/aqua/utils.py | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ads/aqua/finetune.py b/ads/aqua/finetune.py index 33ea4307e..24dfe5f9a 100644 --- a/ads/aqua/finetune.py +++ b/ads/aqua/finetune.py @@ -15,7 +15,7 @@ UpdateModelProvenanceDetails, ) -from ads.aqua import ODSC_MODEL_COMPARTMENT_OCID +from ads.aqua import ODSC_MODEL_COMPARTMENT_OCID, logger from ads.aqua.base import AquaApp from ads.aqua.data import AquaResourceIdentifier, Resource, Tags from ads.aqua.exception import AquaFileExistsError, AquaValueError diff --git a/ads/aqua/utils.py b/ads/aqua/utils.py index 1a6efe36a..7b4db28b4 100644 --- a/ads/aqua/utils.py +++ b/ads/aqua/utils.py @@ -6,9 +6,11 @@ import asyncio import base64 import json +import logging import os import random import re +import sys from enum import Enum from functools import wraps from pathlib import Path @@ -19,9 +21,8 @@ import oci from oci.data_science.models import JobRun, Model -from ads.aqua import logger from ads.aqua.constants import RqsAdditionalDetails -from ads.aqua.data import AquaResourceIdentifier +from ads.aqua.data import AquaResourceIdentifier, Tags from ads.aqua.exception import AquaFileNotFoundError, AquaRuntimeError, AquaValueError from ads.common.auth import default_signer from ads.common.object_storage_details import ObjectStorageDetails @@ -30,6 +31,10 @@ from ads.config import AQUA_SERVICE_MODELS_BUCKET, CONDA_BUCKET_NS, TENANCY_OCID from ads.model import DataScienceModel, ModelVersionSet +# TODO: allow the user to setup the logging level? +logging.basicConfig(stream=sys.stdout, level=logging.INFO) +logger = logging.getLogger("ODSC_AQUA") + UNKNOWN = "" UNKNOWN_DICT = {} README = "README.md" From 9365813b6755a27cf0177c23f3a66bd8b1a82480 Mon Sep 17 00:00:00 2001 From: MING KANG Date: Fri, 19 Apr 2024 11:13:55 -0400 Subject: [PATCH 3/8] improvements on logging --- ads/aqua/__init__.py | 2 +- ads/aqua/cli.py | 23 +++++++++++++++++++++-- ads/aqua/utils.py | 10 ++++------ 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/ads/aqua/__init__.py b/ads/aqua/__init__.py index 63fc6194f..ba2d1100d 100644 --- a/ads/aqua/__init__.py +++ b/ads/aqua/__init__.py @@ -44,7 +44,7 @@ def set_log_level(log_level: str): """Global for setting logging level.""" log_level = log_level.upper() - logger.setLevel(log_level) + logger.setLevel(log_level.upper()) logger.handlers[0].setLevel(log_level) diff --git a/ads/aqua/cli.py b/ads/aqua/cli.py index f8bcc46aa..75387b7a2 100644 --- a/ads/aqua/cli.py +++ b/ads/aqua/cli.py @@ -13,12 +13,31 @@ class AquaCommand: - """Contains the command groups for project Aqua.""" + """Contains the command groups for project Aqua. + + Acts as an entry point for managing different components of the Aqua + project including model management, fine-tuning, deployment, and + evaluation. + """ model = AquaModelApp fine_tuning = AquaFineTuningApp deployment = AquaDeploymentApp evaluation = AquaEvaluationApp - def __init__(self, log_level=os.environ.get("LOG_LEVEL", "INFO").upper()): + def __init__( + self, + log_level: str = os.environ.get("LOG_LEVEL", "INFO").upper(), + ): + """ + Initialize the command line interface settings for the Aqua project. + + FLAGS + ----- + log_level (str): + Sets the logging level for the application. + Default is retrieved from environment variable `LOG_LEVEL`, + or 'INFO' if not set. Example values include 'DEBUG', 'INFO', + 'WARNING', 'ERROR', and 'CRITICAL'. + """ set_log_level(log_level) diff --git a/ads/aqua/utils.py b/ads/aqua/utils.py index 7b4db28b4..15578cd32 100644 --- a/ads/aqua/utils.py +++ b/ads/aqua/utils.py @@ -22,7 +22,7 @@ from oci.data_science.models import JobRun, Model from ads.aqua.constants import RqsAdditionalDetails -from ads.aqua.data import AquaResourceIdentifier, Tags +from ads.aqua.data import AquaResourceIdentifier from ads.aqua.exception import AquaFileNotFoundError, AquaRuntimeError, AquaValueError from ads.common.auth import default_signer from ads.common.object_storage_details import ObjectStorageDetails @@ -31,9 +31,7 @@ from ads.config import AQUA_SERVICE_MODELS_BUCKET, CONDA_BUCKET_NS, TENANCY_OCID from ads.model import DataScienceModel, ModelVersionSet -# TODO: allow the user to setup the logging level? -logging.basicConfig(stream=sys.stdout, level=logging.INFO) -logger = logging.getLogger("ODSC_AQUA") +logger = logging.getLogger("ads.aqua") UNKNOWN = "" UNKNOWN_DICT = {} @@ -231,7 +229,7 @@ def read_file(file_path: str, **kwargs) -> str: with fsspec.open(file_path, "r", **kwargs.get("auth", {})) as f: return f.read() except Exception as e: - logger.error(f"Failed to read file {file_path}. {e}") + logger.debug(f"Failed to read file {file_path}. {e}") return UNKNOWN @@ -481,7 +479,7 @@ def _build_resource_identifier( ), ) except Exception as e: - logger.error( + logger.debug( f"Failed to construct AquaResourceIdentifier from given id=`{id}`, and name=`{name}`, {str(e)}" ) return AquaResourceIdentifier() From 2f74649fe49853eb963e938e24bd5d879ae0e217 Mon Sep 17 00:00:00 2001 From: MING KANG Date: Fri, 19 Apr 2024 11:15:47 -0400 Subject: [PATCH 4/8] moved constant to variable --- ads/aqua/__init__.py | 4 +++- ads/aqua/cli.py | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ads/aqua/__init__.py b/ads/aqua/__init__.py index ba2d1100d..4534f31a7 100644 --- a/ads/aqua/__init__.py +++ b/ads/aqua/__init__.py @@ -12,10 +12,12 @@ from ads.aqua.utils import fetch_service_compartment from ads.config import NB_SESSION_OCID, OCI_RESOURCE_PRINCIPAL_VERSION +ENV_VAR_LOG_LEVEL = "LOG_LEVEL" + def get_logger_level(): """Retrieves logging level from environment variable `LOG_LEVEL`.""" - level = os.environ.get("LOG_LEVEL", "INFO").upper() + level = os.environ.get(ENV_VAR_LOG_LEVEL, "INFO").upper() return level diff --git a/ads/aqua/cli.py b/ads/aqua/cli.py index 75387b7a2..bf0d15fa3 100644 --- a/ads/aqua/cli.py +++ b/ads/aqua/cli.py @@ -5,7 +5,7 @@ # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ import os -from ads.aqua import set_log_level +from ads.aqua import ENV_VAR_LOG_LEVEL, set_log_level from ads.aqua.deployment import AquaDeploymentApp from ads.aqua.evaluation import AquaEvaluationApp from ads.aqua.finetune import AquaFineTuningApp @@ -27,7 +27,7 @@ class AquaCommand: def __init__( self, - log_level: str = os.environ.get("LOG_LEVEL", "INFO").upper(), + log_level: str = os.environ.get(ENV_VAR_LOG_LEVEL, "INFO").upper(), ): """ Initialize the command line interface settings for the Aqua project. From 242dc212beb67f53b9115ed21848dbc1052d901a Mon Sep 17 00:00:00 2001 From: MING KANG Date: Fri, 19 Apr 2024 11:29:42 -0400 Subject: [PATCH 5/8] removed no use import --- ads/aqua/utils.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/ads/aqua/utils.py b/ads/aqua/utils.py index 15578cd32..d543ce89f 100644 --- a/ads/aqua/utils.py +++ b/ads/aqua/utils.py @@ -10,7 +10,6 @@ import os import random import re -import sys from enum import Enum from functools import wraps from pathlib import Path @@ -139,10 +138,6 @@ def get_status(evaluation_status: str, job_run_status: str = None): MODEL_BY_REFERENCE_OSS_PATH_KEY = "artifact_location" -def get_logger(): - return logger - - def random_color_generator(word: str): seed = sum([ord(c) for c in word]) % 13 random.seed(seed) From 1ddb6c29545aa92921e396eb5c6633a4d4436718 Mon Sep 17 00:00:00 2001 From: MING KANG Date: Fri, 19 Apr 2024 11:59:52 -0400 Subject: [PATCH 6/8] adjusted naming and default value --- ads/aqua/__init__.py | 2 +- ads/aqua/cli.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ads/aqua/__init__.py b/ads/aqua/__init__.py index 4534f31a7..ea1112623 100644 --- a/ads/aqua/__init__.py +++ b/ads/aqua/__init__.py @@ -12,7 +12,7 @@ from ads.aqua.utils import fetch_service_compartment from ads.config import NB_SESSION_OCID, OCI_RESOURCE_PRINCIPAL_VERSION -ENV_VAR_LOG_LEVEL = "LOG_LEVEL" +ENV_VAR_LOG_LEVEL = "ADS_AQUA_LOG_LEVEL" def get_logger_level(): diff --git a/ads/aqua/cli.py b/ads/aqua/cli.py index bf0d15fa3..3c31129f7 100644 --- a/ads/aqua/cli.py +++ b/ads/aqua/cli.py @@ -27,7 +27,7 @@ class AquaCommand: def __init__( self, - log_level: str = os.environ.get(ENV_VAR_LOG_LEVEL, "INFO").upper(), + log_level: str = os.environ.get(ENV_VAR_LOG_LEVEL, "ERROR").upper(), ): """ Initialize the command line interface settings for the Aqua project. @@ -37,7 +37,7 @@ def __init__( log_level (str): Sets the logging level for the application. Default is retrieved from environment variable `LOG_LEVEL`, - or 'INFO' if not set. Example values include 'DEBUG', 'INFO', + or 'ERROR' if not set. Example values include 'DEBUG', 'INFO', 'WARNING', 'ERROR', and 'CRITICAL'. """ set_log_level(log_level) From 5117acdf57c3b04987dcc537aa41d6e61edc7417 Mon Sep 17 00:00:00 2001 From: MING KANG Date: Fri, 19 Apr 2024 17:56:45 -0400 Subject: [PATCH 7/8] added test for checking logging config and cli --- tests/unitary/with_extras/aqua/test_cli.py | 47 +++++++++++++++++++ tests/unitary/with_extras/aqua/test_global.py | 45 ++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 tests/unitary/with_extras/aqua/test_cli.py create mode 100644 tests/unitary/with_extras/aqua/test_global.py diff --git a/tests/unitary/with_extras/aqua/test_cli.py b/tests/unitary/with_extras/aqua/test_cli.py new file mode 100644 index 000000000..3ae0764bc --- /dev/null +++ b/tests/unitary/with_extras/aqua/test_cli.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*-- + +# Copyright (c) 2024 Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ + +import logging +import subprocess +from unittest import TestCase +from unittest.mock import patch + +from parameterized import parameterized + +from ads.aqua.cli import AquaCommand + + +class TestAquaCLI(TestCase): + """Tests the AQUA CLI.""" + + DEFAUL_AQUA_CLI_LOGGING_LEVEL = "ERROR" + logger = logging.getLogger(__name__) + logging.basicConfig( + format="%(asctime)s %(module)s %(levelname)s: %(message)s", + datefmt="%m/%d/%Y %I:%M:%S %p", + level=logging.INFO, + ) + + def test_entrypoint(self): + """Tests CLI entrypoint.""" + result = subprocess.run(["ads", "aqua", "--help"], capture_output=True) + self.logger.info(f"{self._testMethodName}\n" + result.stderr.decode("utf-8")) + assert result.returncode == 0 + + @parameterized.expand( + [ + ("default", None, DEFAUL_AQUA_CLI_LOGGING_LEVEL), + ("set logging level", "info", "info"), + ] + ) + @patch("ads.aqua.cli.set_log_level") + def test_aquacommand(self, name, arg, expected, mock_setting_log): + """Tests aqua command initailzation.""" + if arg: + AquaCommand(arg) + else: + AquaCommand() + mock_setting_log.assert_called_with(expected) diff --git a/tests/unitary/with_extras/aqua/test_global.py b/tests/unitary/with_extras/aqua/test_global.py new file mode 100644 index 000000000..6ea41aee6 --- /dev/null +++ b/tests/unitary/with_extras/aqua/test_global.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*-- +# Copyright (c) 2024 Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ + +import unittest +from unittest.mock import MagicMock, patch + +from ads.aqua import configure_aqua_logger, get_logger_level, set_log_level + + +class TestAquaLogging(unittest.TestCase): + DEFAULT_AQUA_LOG_LEVEL = "INFO" + + @patch.dict("os.environ", {}) + def test_get_logger_level_default(self): + """Test default log level when environment variable is not set.""" + self.assertEqual(get_logger_level(), self.DEFAULT_AQUA_LOG_LEVEL) + + @patch.dict("os.environ", {"ADS_AQUA_LOG_LEVEL": "DEBUG"}) + def test_get_logger_level_from_env(self): + """Test log level is correctly read from environment variable.""" + self.assertEqual(get_logger_level(), "DEBUG") + + @patch("logging.getLogger") + @patch("logging.StreamHandler") + def test_configure_aqua_logger(self, mock_handler, mock_get_logger): + """Test that logger is correctly configured.""" + mock_logger = MagicMock() + mock_get_logger.return_value = mock_logger + + logger = configure_aqua_logger() + + mock_get_logger.assert_called_once_with("ads.aqua") + mock_logger.setLevel.assert_called_with(self.DEFAULT_AQUA_LOG_LEVEL) + + @patch("ads.aqua.logger", create=True) + def test_set_log_level(self, mock_logger): + """Test that the log level of the logger is set correctly.""" + mock_handler = MagicMock() + mock_logger.handlers = [mock_handler] + + set_log_level("warning") + + mock_logger.setLevel.assert_called_with("WARNING") From 4a64e5aec8931cc4b8c9b8100e9eb25c47f10605 Mon Sep 17 00:00:00 2001 From: MING KANG Date: Mon, 22 Apr 2024 13:35:19 -0400 Subject: [PATCH 8/8] fixed by comments: adjust msg level --- ads/aqua/evaluation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ads/aqua/evaluation.py b/ads/aqua/evaluation.py index 1ac5308ca..896f2f632 100644 --- a/ads/aqua/evaluation.py +++ b/ads/aqua/evaluation.py @@ -975,7 +975,7 @@ def list( self._process_evaluation_summary(model=model, jobrun=jobrun) ) except Exception as exc: - logger.warning( + logger.debug( f"Processing evaluation: {model.identifier} generated an exception: {exc}" ) evaluations.append(