mirror of
https://github.com/hwchase17/langchain.git
synced 2026-01-24 13:58:11 +00:00
preventing issues like #22546 Notes: - this will only affect release CI. We may want to consider adding running unit tests with min versions to PR CI in some form - because this only affects release CI, it could create annoying issues releasing while I'm on vacation. Unless anyone feels strongly, I'll wait to merge this til when I'm back
79 lines
2.3 KiB
Python
79 lines
2.3 KiB
Python
import sys
|
|
|
|
import tomllib
|
|
from packaging.version import parse as parse_version
|
|
import re
|
|
|
|
MIN_VERSION_LIBS = [
|
|
"langchain-core",
|
|
"langchain-community",
|
|
"langchain",
|
|
"langchain-text-splitters",
|
|
"SQLAlchemy",
|
|
]
|
|
|
|
|
|
def get_min_version(version: str) -> str:
|
|
# base regex for x.x.x with cases for rc/post/etc
|
|
# valid strings: https://peps.python.org/pep-0440/#public-version-identifiers
|
|
vstring = r"\d+(?:\.\d+){0,2}(?:(?:a|b|rc|\.post|\.dev)\d+)?"
|
|
# case ^x.x.x
|
|
_match = re.match(f"^\\^({vstring})$", version)
|
|
if _match:
|
|
return _match.group(1)
|
|
|
|
# case >=x.x.x,<y.y.y
|
|
_match = re.match(f"^>=({vstring}),<({vstring})$", version)
|
|
if _match:
|
|
_min = _match.group(1)
|
|
_max = _match.group(2)
|
|
assert parse_version(_min) < parse_version(_max)
|
|
return _min
|
|
|
|
# case x.x.x
|
|
_match = re.match(f"^({vstring})$", version)
|
|
if _match:
|
|
return _match.group(1)
|
|
|
|
raise ValueError(f"Unrecognized version format: {version}")
|
|
|
|
|
|
def get_min_version_from_toml(toml_path: str):
|
|
# Parse the TOML file
|
|
with open(toml_path, "rb") as file:
|
|
toml_data = tomllib.load(file)
|
|
|
|
# Get the dependencies from tool.poetry.dependencies
|
|
dependencies = toml_data["tool"]["poetry"]["dependencies"]
|
|
|
|
# Initialize a dictionary to store the minimum versions
|
|
min_versions = {}
|
|
|
|
# Iterate over the libs in MIN_VERSION_LIBS
|
|
for lib in MIN_VERSION_LIBS:
|
|
# Check if the lib is present in the dependencies
|
|
if lib in dependencies:
|
|
# Get the version string
|
|
version_string = dependencies[lib]
|
|
|
|
if isinstance(version_string, dict):
|
|
version_string = version_string["version"]
|
|
|
|
# Use parse_version to get the minimum supported version from version_string
|
|
min_version = get_min_version(version_string)
|
|
|
|
# Store the minimum version in the min_versions dictionary
|
|
min_versions[lib] = min_version
|
|
|
|
return min_versions
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# Get the TOML file path from the command line argument
|
|
toml_file = sys.argv[1]
|
|
|
|
# Call the function to get the minimum versions
|
|
min_versions = get_min_version_from_toml(toml_file)
|
|
|
|
print(" ".join([f"{lib}=={version}" for lib, version in min_versions.items()]))
|