diff --git a/pkgs/development/python-modules/txtai/default.nix b/pkgs/development/python-modules/txtai/default.nix index 7b08166e1d56..75b50c223a19 100644 --- a/pkgs/development/python-modules/txtai/default.nix +++ b/pkgs/development/python-modules/txtai/default.nix @@ -3,6 +3,7 @@ buildPythonPackage, pythonOlder, fetchFromGitHub, + setuptools, # propagated build input faiss, torch, @@ -47,18 +48,32 @@ openpyxl, requests, xmltodict, + pgvector, + sqlite-vec, + python-multipart, # native check inputs - unittestCheckHook, - - pythonAtLeast, + pytestCheckHook, + # check inputs + httpx, + msgpack, + sqlalchemy, }: let - version = "7.3.0"; + version = "7.4.0"; api = [ aiohttp fastapi + pillow + python-multipart uvicorn ]; + ann = [ + annoy + hnswlib + pgvector + sqlalchemy + sqlite-vec + ]; # cloud = [ apache-libcloud ]; console = [ rich ]; @@ -124,10 +139,11 @@ let requests xmltodict ]; - all = api ++ console ++ database ++ graph ++ model ++ pipeline ++ similarity ++ workflow; + all = api ++ ann ++ console ++ database ++ graph ++ model ++ pipeline ++ similarity ++ workflow; optional-dependencies = { inherit + ann api console database @@ -147,7 +163,8 @@ in buildPythonPackage { pname = "txtai"; inherit version; - format = "setuptools"; + pyproject = true; + disabled = pythonOlder "3.8"; @@ -155,16 +172,17 @@ buildPythonPackage { owner = "neuml"; repo = "txtai"; rev = "refs/tags/v${version}"; - hash = "sha256-tnM6ye0Sxh8P2bm3awE72GvXEY0gXX1Sv+wPr77wRGU="; + hash = "sha256-DQB12mFUMsKJ8cACowI1Vc7k2n1npdTOQknRmHd5EIM="; }; + buildTools = [ setuptools ]; pythonRemoveDeps = [ # We call it faiss, not faiss-cpu. "faiss-cpu" ]; - propagatedBuildInputs = [ + dependencies = [ faiss torch transformers @@ -176,23 +194,52 @@ buildPythonPackage { optional-dependencies = optional-dependencies; - pythonImportsCheck = [ "txtai" ]; - - # some tests hang forever - doCheck = false; - - preCheck = '' - export TRANSFORMERS_CACHE=$(mktemp -d) + # The Python imports check runs huggingface-hub which needs a writable directory. + # `pythonImportsCheck` runs in the installPhase (before checkPhase). + preInstall = '' + export HF_HOME=$(mktemp -d) ''; - nativeCheckInputs = [ - unittestCheckHook - ] ++ optional-dependencies.api ++ optional-dependencies.similarity; + pythonImportsCheck = [ "txtai" ]; - unittestFlagsArray = [ - "-s" - "test/python" - "-v" + nativeCheckInputs = [ + pytestCheckHook + ] ++ optional-dependencies.ann ++ optional-dependencies.api ++ optional-dependencies.similarity; + + checkInputs = [ + httpx + msgpack + python-multipart + sqlalchemy + ]; + + # The deselected paths depend on the huggingface hub and should be run as a passthru test + # disabledTestPaths won't work as the problem is with the classes containing the tests + # (in other words, it fails on __init__) + pytestFlagsArray = [ + "test/python/test*.py" + "--deselect=test/python/testcloud.py" + "--deselect=test/python/testconsole.py" + "--deselect=test/python/testembeddings.py" + "--deselect=test/python/testgraph.py" + "--deselect=test/python/testapi/testembeddings.py" + "--deselect=test/python/testapi/testpipelines.py" + "--deselect=test/python/testapi/testworkflow.py" + "--deselect=test/python/testdatabase/testclient.py" + "--deselect=test/python/testdatabase/testduckdb.py" + "--deselect=test/python/testdatabase/testencoder.py" + "--deselect=test/python/testworkflow.py" + ]; + + disabledTests = [ + # Hardcoded paths + "testInvalidTar" + "testInvalidZip" + # Downloads from Huggingface + "testPipeline" + # Not finding sqlite-vec despite being supplied + "testSQLite" + "testSQLiteCustom" ]; meta = { @@ -201,7 +248,5 @@ buildPythonPackage { homepage = "https://github.com/neuml/txtai"; license = lib.licenses.asl20; maintainers = with lib.maintainers; [ happysalada ]; - # This should be addressed in a newer version, but we first need to wait for python311Packages.faiss to be updated - broken = pythonAtLeast "3.12"; }; }