Unverified Commit 9505f3f9 authored by Nick Cao's avatar Nick Cao Committed by GitHub
Browse files

python3Packages.timm: 1.0.24 -> 1.0.25 (#493480)

parents cac1eb73 e83a81f3
Loading
Loading
Loading
Loading
+12 −22
Original line number Diff line number Diff line
@@ -30,9 +30,9 @@
  writableTmpDirAsHomeHook,
}:

buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
  pname = "gradio-client";
  version = "2.0.1";
  version = "2.2.0";
  pyproject = true;

  # no tests on pypi
@@ -40,32 +40,25 @@ buildPythonPackage rec {
    owner = "gradio-app";
    repo = "gradio";
    # not to be confused with @gradio/client@${version}
    # tag = "gradio_client@${version}";
    # tag = "gradio_client@${finalAttrs.version}";
    # TODO: switch back to a tag next release, if they tag it.
    rev = "7a8894d7249ee20c2f7a896237e290e99661fd43"; # 2.0.1
    rev = "8b03393a51e1e03fb04cb0a41b9a5dc3266a58aa"; # 2.2.0
    sparseCheckout = [
      "client/python"
      "gradio/media_assets"
    ];
    hash = "sha256-p3okK48DJjjyvUzedNR60r5P8aKUxjE+ocb3EplZ6Uk=";
    hash = "sha256-LkTZwPyHe1w8D5unEMW7dBGKNHxM7gWJ7I+4HwiexKk=";
  };

  sourceRoot = "${src.name}/client/python";
  sourceRoot = "${finalAttrs.src.name}/client/python";

  postPatch = ''
  # Because we set sourceRoot above, the folders "client/python"
  # don't exist, as far as this is concerned.
  postPatch = ''
    substituteInPlace test/conftest.py \
      --replace-fail 'from client.python.test import media_data' 'import media_data'
  '';

  # upstream adds upper constraints because they can, not because the need to
  # https://github.com/gradio-app/gradio/pull/4885
  pythonRelaxDeps = [
    # only backward incompat is dropping py3.7 support
    "websockets"
  ];

  build-system = [
    hatchling
    hatch-requirements-txt
@@ -105,10 +98,6 @@ buildPythonPackage rec {
    cat ${./conftest-skip-network-errors.py} >> test/conftest.py
  '';

  pytestFlags = [
    #"-x" "-Wignore" # uncomment for debugging help
  ];

  enabledTestPaths = [
    "test/"
  ];
@@ -135,10 +124,11 @@ buildPythonPackage rec {
  };

  meta = {
    homepage = "https://www.gradio.app/";
    changelog = "https://github.com/gradio-app/gradio/releases/tag/gradio_client@${version}";
    description = "Lightweight library to use any Gradio app as an API";
    homepage = "https://www.gradio.app/";
    downloadPage = "https://github.com/gradio-app/gradio/tree/main/client/python";
    # changelog = "https://github.com/gradio-app/gradio/releases/tag/${finalAttrs.src.tag}"; TODO: uncomment if the tag exists
    license = lib.licenses.asl20;
    maintainers = with lib.maintainers; [ pbsds ];
  };
}
})
+18 −21
Original line number Diff line number Diff line
@@ -79,41 +79,33 @@ let
  nodejs = nodejs_24;
  pnpm = pnpm_10.override { inherit nodejs; };
in
buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
  pname = "gradio";
  version = "6.5.1";
  version = "6.8.0";
  pyproject = true;

  src = fetchFromGitHub {
    owner = "gradio-app";
    repo = "gradio";
    tag = "gradio@${version}";
    hash = "sha256-pIcliKcb1eVVMk0ARzWcZGXc6pmI8mGVAvCJZ0JHXUw=";
    tag = "gradio@${finalAttrs.version}";
    hash = "sha256-ZHglnRs0AXCu9HlVoSO0h5p6SE4al/OLPn0jwZgKVR8=";
  };

  patches = [
    ./fix-transformers-pipelines-imports.patch
  ];

  pnpmDeps = fetchPnpmDeps {
    inherit
    inherit (finalAttrs)
      pname
      pnpm
      version
      src
      ;
    inherit pnpm;
    fetcherVersion = 3;
    hash = "sha256-6Cx0hdVd0srhArvck2Kn9U2fT7aKtTZjgV5b/Usrnoo=";
  };

  pythonRelaxDeps = [
    "aiofiles"
    "gradio-client"
    "markupsafe"
    "pydantic" # Requests >=2.11.10,<=2.12.4. Staging has it, master doesn't.
  ];

  pythonRemoveDeps = [
    # this isn't a real runtime dependency
    "ruff"
  ];

  nativeBuildInputs = [
    zip
    nodejs
@@ -128,6 +120,10 @@ buildPythonPackage rec {
    hatch-fancy-pypi-readme
  ];

  pythonRelaxDeps = [
    "aiofiles"
    "tomlkit"
  ];
  dependencies = [
    aiofiles
    anyio
@@ -191,7 +187,7 @@ buildPythonPackage rec {
    # mock calls to `shutil.which(...)`
    (writeShellScriptBin "npm" "false")
  ]
  ++ optional-dependencies.oauth
  ++ finalAttrs.passthru.optional-dependencies.oauth
  ++ pydantic.optional-dependencies.email;

  preBuild = ''
@@ -216,6 +212,7 @@ buildPythonPackage rec {

    # requires network, it caught our xfail exception
    "test_error_analytics_successful"
    "TestSnippetExecution"

    # Flaky, tries to pin dependency behaviour. Sensitive to dep versions
    # These error only affect downstream use of the check dependencies.
@@ -441,9 +438,9 @@ buildPythonPackage rec {

  meta = {
    homepage = "https://www.gradio.app/";
    changelog = "https://github.com/gradio-app/gradio/releases/tag/gradio@${version}";
    changelog = "https://github.com/gradio-app/gradio/releases/tag/${finalAttrs.src.tag}";
    description = "Python library for easily interacting with trained machine learning models";
    license = lib.licenses.asl20;
    maintainers = with lib.maintainers; [ pbsds ];
  };
}
})
+162 −0
Original line number Diff line number Diff line
diff --git a/test/test_pipelines.py b/test/test_pipelines.py
index 1903f758f..c40e6d3b1 100644
--- a/test/test_pipelines.py
+++ b/test/test_pipelines.py
@@ -3,20 +3,6 @@ from unittest.mock import MagicMock
 
 import pytest
 import transformers
-from transformers import (
-    AudioClassificationPipeline,
-    AutomaticSpeechRecognitionPipeline,
-    DocumentQuestionAnsweringPipeline,
-    FeatureExtractionPipeline,
-    FillMaskPipeline,
-    ImageClassificationPipeline,
-    ObjectDetectionPipeline,
-    QuestionAnsweringPipeline,
-    TextClassificationPipeline,
-    TextGenerationPipeline,
-    VisualQuestionAnsweringPipeline,
-    ZeroShotClassificationPipeline,
-)
 
 import gradio as gr
 from gradio.pipelines_utils import (
@@ -24,6 +10,14 @@ from gradio.pipelines_utils import (
 )
 
 
+def _get_pipeline_cls(name: str):
+    """Resolve a pipeline class by name from transformers, returning None if it
+    was removed in the installed version."""
+    return getattr(transformers, name, None) or getattr(
+        transformers.pipelines, name, None
+    )
+
+
 @pytest.mark.flaky
 def test_interface_in_blocks():
     pipe1 = transformers.pipeline(model="deepset/roberta-base-squad2")  # type: ignore
@@ -50,50 +44,66 @@ def test_transformers_load_from_pipeline():
 
 
 class TestHandleTransformersPipelines(unittest.TestCase):
+    def _require(self, name: str):
+        """Return the pipeline class or skip the test if it was removed."""
+        cls = _get_pipeline_cls(name)
+        if cls is None:
+            self.skipTest(
+                f"{name} not available in transformers {transformers.__version__}"
+            )
+        return cls
+
     def test_audio_classification_pipeline(self):
-        pipe = MagicMock(spec=AudioClassificationPipeline)
+        cls = self._require("AudioClassificationPipeline")
+        pipe = MagicMock(spec=cls)
         pipeline_info = handle_transformers_pipeline(pipe)
         assert pipeline_info is not None
         assert pipeline_info["inputs"].label == "Input"
         assert pipeline_info["outputs"].label == "Class"
 
     def test_automatic_speech_recognition_pipeline(self):
-        pipe = MagicMock(spec=AutomaticSpeechRecognitionPipeline)
+        cls = self._require("AutomaticSpeechRecognitionPipeline")
+        pipe = MagicMock(spec=cls)
         pipeline_info = handle_transformers_pipeline(pipe)
         assert pipeline_info is not None
         assert pipeline_info["inputs"].label == "Input"
         assert pipeline_info["outputs"].label == "Output"
 
     def test_object_detection_pipeline(self):
-        pipe = MagicMock(spec=ObjectDetectionPipeline)
+        cls = self._require("ObjectDetectionPipeline")
+        pipe = MagicMock(spec=cls)
         pipeline_info = handle_transformers_pipeline(pipe)
         assert pipeline_info is not None
         assert pipeline_info["inputs"].label == "Input Image"
         assert pipeline_info["outputs"].label == "Objects Detected"
 
     def test_feature_extraction_pipeline(self):
-        pipe = MagicMock(spec=FeatureExtractionPipeline)
+        cls = self._require("FeatureExtractionPipeline")
+        pipe = MagicMock(spec=cls)
         pipeline_info = handle_transformers_pipeline(pipe)
         assert pipeline_info is not None
         assert pipeline_info["inputs"].label == "Input"
         assert pipeline_info["outputs"].label == "Output"
 
     def test_fill_mask_pipeline(self):
-        pipe = MagicMock(spec=FillMaskPipeline)
+        cls = self._require("FillMaskPipeline")
+        pipe = MagicMock(spec=cls)
         pipeline_info = handle_transformers_pipeline(pipe)
         assert pipeline_info is not None
         assert pipeline_info["inputs"].label == "Input"
         assert pipeline_info["outputs"].label == "Classification"
 
     def test_image_classification_pipeline(self):
-        pipe = MagicMock(spec=ImageClassificationPipeline)
+        cls = self._require("ImageClassificationPipeline")
+        pipe = MagicMock(spec=cls)
         pipeline_info = handle_transformers_pipeline(pipe)
         assert pipeline_info is not None
         assert pipeline_info["inputs"].label == "Input Image"
         assert pipeline_info["outputs"].label == "Classification"
 
     def test_question_answering_pipeline(self):
-        pipe = MagicMock(spec=QuestionAnsweringPipeline)
+        cls = self._require("QuestionAnsweringPipeline")
+        pipe = MagicMock(spec=cls)
         pipeline_info = handle_transformers_pipeline(pipe)
         assert pipeline_info is not None
         assert pipeline_info["inputs"][0].label == "Context"
@@ -102,21 +112,24 @@ class TestHandleTransformersPipelines(unittest.TestCase):
         assert pipeline_info["outputs"][1].label == "Score"
 
     def test_text_classification_pipeline(self):
-        pipe = MagicMock(spec=TextClassificationPipeline)
+        cls = self._require("TextClassificationPipeline")
+        pipe = MagicMock(spec=cls)
         pipeline_info = handle_transformers_pipeline(pipe)
         assert pipeline_info is not None
         assert pipeline_info["inputs"].label == "Input"
         assert pipeline_info["outputs"].label == "Classification"
 
     def test_text_generation_pipeline(self):
-        pipe = MagicMock(spec=TextGenerationPipeline)
+        cls = self._require("TextGenerationPipeline")
+        pipe = MagicMock(spec=cls)
         pipeline_info = handle_transformers_pipeline(pipe)
         assert pipeline_info is not None
         assert pipeline_info["inputs"].label == "Input"
         assert pipeline_info["outputs"].label == "Output"
 
     def test_zero_shot_classification_pipeline(self):
-        pipe = MagicMock(spec=ZeroShotClassificationPipeline)
+        cls = self._require("ZeroShotClassificationPipeline")
+        pipe = MagicMock(spec=cls)
         pipeline_info = handle_transformers_pipeline(pipe)
         assert pipeline_info is not None
         assert pipeline_info["inputs"][0].label == "Input"
@@ -127,7 +140,8 @@ class TestHandleTransformersPipelines(unittest.TestCase):
         assert pipeline_info["outputs"].label == "Classification"
 
     def test_document_question_answering_pipeline(self):
-        pipe = MagicMock(spec=DocumentQuestionAnsweringPipeline)
+        cls = self._require("DocumentQuestionAnsweringPipeline")
+        pipe = MagicMock(spec=cls)
         pipeline_info = handle_transformers_pipeline(pipe)
         assert pipeline_info is not None
         assert pipeline_info["inputs"][0].label == "Input Document"
@@ -135,7 +149,8 @@ class TestHandleTransformersPipelines(unittest.TestCase):
         assert pipeline_info["outputs"].label == "Label"
 
     def test_visual_question_answering_pipeline(self):
-        pipe = MagicMock(spec=VisualQuestionAnsweringPipeline)
+        cls = self._require("VisualQuestionAnsweringPipeline")
+        pipe = MagicMock(spec=cls)
         pipeline_info = handle_transformers_pipeline(pipe)
         assert pipeline_info is not None
         assert pipeline_info["inputs"][0].label == "Input Image"
+24 −9
Original line number Diff line number Diff line
@@ -3,23 +3,28 @@
  stdenv,
  buildPythonPackage,
  fetchFromGitHub,

  # build-system
  hatchling,
  huggingface-hub,
  matplotlib,

  # dependencies
  numpy,
  packaging,
  pandas,
  prettytable,
  scikit-learn,
  tabulate,

  # tests
  matplotlib,
  pandas,
  pytest-cov-stub,
  pytestCheckHook,
  pyyaml,
  rich,
  scikit-learn,
  streamlit,
  tabulate,
}:

buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
  pname = "skops";
  version = "0.13.0";
  pyproject = true;
@@ -27,7 +32,7 @@ buildPythonPackage rec {
  src = fetchFromGitHub {
    owner = "skops-dev";
    repo = "skops";
    tag = "v${version}";
    tag = "v${finalAttrs.version}";
    hash = "sha256-1550LIVyChqP5q4VZmflCXPyXXg4eHJU5AlVQJD2M8c=";
  };

@@ -59,8 +64,14 @@ buildPythonPackage rec {
  disabledTests = [
    # flaky
    "test_base_case_works_as_expected"

    # fairlearn is not available in nixpkgs
    "TestAddFairlearnMetricFrame"

    # numpy.linalg.LinAlgError: The covariance matrix of class 0 is not full rank.
    # Increase the value of `reg_param` to reduce the collinearity.
    "test_can_persist_fitted"

  ];

  disabledTestPaths = [
@@ -76,6 +87,10 @@ buildPythonPackage rec {
    # Warning from scipy.optimize in skops/io/tests/test_persist.py::test_dump_and_load_with_file_wrapper
    # https://github.com/skops-dev/skops/issues/479
    "-Wignore::DeprecationWarning"

    # FutureWarning: Class PassiveAggressiveClassifier is deprecated; this is deprecated in version
    # 1.8 and will be removed in 1.10. Use `SGDClassifier(...)` instead.
    "-Wignore::FutureWarning"
  ];

  pythonImportsCheck = [ "skops" ];
@@ -83,9 +98,9 @@ buildPythonPackage rec {
  meta = {
    description = "Library for saving/loading, sharing, and deploying scikit-learn based models";
    homepage = "https://skops.readthedocs.io/en/stable";
    changelog = "https://github.com/skops-dev/skops/releases/tag/${src.tag}";
    changelog = "https://github.com/skops-dev/skops/releases/tag/${finalAttrs.src.tag}";
    license = lib.licenses.mit;
    maintainers = [ lib.maintainers.bcdarwin ];
    mainProgram = "skops";
  };
}
})
+13 −3
Original line number Diff line number Diff line
@@ -66,6 +66,9 @@ buildPythonPackage (finalAttrs: {

  build-system = [ setuptools ];

  pythonRelaxDeps = [
    "huggingface-hub"
  ];
  dependencies = [
    huggingface-hub
    jinja2
@@ -146,18 +149,23 @@ buildPythonPackage (finalAttrs: {
  disabledTestPaths = [
    # ImportError: cannot import name 'require_soundfile' from 'transformers.testing_utils'
    "tests/test_types.py"

    # Requires unpackaged 'helium'
    "tests/test_vision_web_browser.py"
  ];

  disabledTests = [
    # Missing dependencies
    "TestBlaxelExecutorUnit"
    "TestModalExecutorUnit"
    "mcp"
    "test_cleanup"
    "test_ddgs_with_kwargs"
    "test_e2b_executor_instantiation"
    "test_flatten_messages_as_text_for_all_models"
    "mcp"
    "test_import_smolagents_without_extras"
    "test_vision_web_browser_main"
    "test_multiple_servers"
    "test_vision_web_browser_main"
    # Tests require network access
    "test_agent_type_output"
    "test_call_different_providers_without_key"
@@ -184,6 +192,9 @@ buildPythonPackage (finalAttrs: {
    "test_multiagents_save"
    "test_new_instance"

    # Flaky: assert 0.9858949184417725 <= 0.73
    "test_retry_on_rate_limit_error"

    # Requires optional "blaxel" dependencies
    "test_blaxel_executor_instantiation_with_blaxel_sdk"
    "test_blaxel_executor_custom_parameters"
@@ -192,7 +203,6 @@ buildPythonPackage (finalAttrs: {
    "test_sandbox_lifecycle"
    # TypeError: 'function' object is not subscriptable
    "test_stream_to_gradio_memory_step"

  ];

  __darwinAllowLocalNetworking = true;
Loading