| Current Path : /opt/alt/python313/lib64/python3.13/site-packages/mysql/ai/utils/ |
| Current File : //opt/alt/python313/lib64/python3.13/site-packages/mysql/ai/utils/dependencies.py |
# Copyright (c) 2025 Oracle and/or its affiliates.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0, as
# published by the Free Software Foundation.
#
# This program is designed to work with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation. The authors of MySQL hereby grant you an
# additional permission to link the program and your derivative works
# with the separately licensed software that they have either included with
# the program or referenced in the documentation.
#
# Without limiting anything contained in the foregoing, this file,
# which is part of MySQL Connector/Python, is also subject to the
# Universal FOSS Exception, version 1.0, a copy of which can be found at
# http://oss.oracle.com/licenses/universal-foss-exception.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License, version 2.0, for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
"""Dependency checking utilities for AI features in MySQL Connector/Python.
Provides check_dependencies() to assert required optional packages are present
with acceptable minimum versions at runtime.
"""
import importlib.metadata
from typing import List
def check_dependencies(tasks: List[str]) -> None:
"""
Check required runtime dependencies and minimum versions; raise an error
if any are missing or version-incompatible.
This verifies the presence and minimum version of essential Python packages.
Missing or insufficient versions cause an ImportError listing the packages
and a suggested install command.
Args:
tasks (List[str]): Task types to check requirements for.
Raises:
ImportError: If any required dependencies are missing or below the
minimum version.
"""
task_set = set(tasks)
task_set.add("BASE")
# Requirements: (import_name, min_version)
task_to_requirement = {
"BASE": [("pandas", "1.5.0")],
"GENAI": [
("langchain", "0.1.11"),
("langchain_core", "0.1.11"),
("pydantic", "1.10.0"),
],
"ML": [("scikit-learn", "1.3.0")],
}
requirements = []
for task in task_set:
requirements.extend(task_to_requirement[task])
requirements_set = set(requirements)
problems = []
for name, min_version in requirements_set:
try:
installed_version = importlib.metadata.version(name)
# Version comparison uses simple string comparison to avoid extra
# dependencies. This is valid for the dependencies defined above;
# reconsider if adding packages with version schemes that do not
# compare correctly as strings.
error = installed_version < min_version
except importlib.metadata.PackageNotFoundError:
error = True
if error:
problems.append(f"{name} v{min_version} (or later)")
if problems:
raise ImportError("Please install " + ", ".join(problems) + ".")