diff --git a/tests/test_environment.py b/tests/test_environment.py index dc129c22ed..3558604c9a 100644 --- a/tests/test_environment.py +++ b/tests/test_environment.py @@ -1,5 +1,6 @@ """Tests for the base Environment class.""" +import importlib import json from typing import cast from unittest.mock import AsyncMock, Mock, patch @@ -22,6 +23,23 @@ from verifiers.utils.save_utils import make_dataset as build_dataset +def test_importlib_traversable_modules_import(): + """Import modules that use the version-tolerant Traversable import.""" + module_names = ( + "verifiers.v1.runtime", + "verifiers.v1.taskset", + "verifiers.v1.utils.sandbox_utils", + "verifiers.v1.utils.taskset_utils", + "verifiers.envs.experimental.composable.composable_env", + "verifiers.envs.experimental.composable.harness", + "verifiers.envs.experimental.composable.task", + "verifiers.envs.experimental.composable.harnesses.rlm", + ) + + for module_name in module_names: + assert importlib.import_module(module_name) + + # Create a concrete implementation for testing the abstract base class class SimpleEnvironment(Environment): """Simple implementation of Environment for testing.""" diff --git a/verifiers/envs/experimental/composable/composable_env.py b/verifiers/envs/experimental/composable/composable_env.py index 8d3282dbd2..eab0f33e27 100644 --- a/verifiers/envs/experimental/composable/composable_env.py +++ b/verifiers/envs/experimental/composable/composable_env.py @@ -42,11 +42,16 @@ import tarfile import tempfile import time -from importlib.abc import Traversable from pathlib import Path from typing import Any +try: + from importlib.resources.abc import Traversable +except ImportError: # Python < 3.14 + from importlib.abc import Traversable + import verifiers as vf + from verifiers.envs.experimental.cli_agent_env import CliAgentEnv from verifiers.envs.experimental.composable.harness import Harness from verifiers.envs.experimental.composable.task import TaskSet diff --git a/verifiers/envs/experimental/composable/harness.py b/verifiers/envs/experimental/composable/harness.py index 254fbfafe9..376b58d498 100644 --- a/verifiers/envs/experimental/composable/harness.py +++ b/verifiers/envs/experimental/composable/harness.py @@ -15,10 +15,14 @@ """ from dataclasses import dataclass -from importlib.abc import Traversable from pathlib import Path from typing import TYPE_CHECKING, Callable +try: + from importlib.resources.abc import Traversable +except ImportError: # Python < 3.14 + from importlib.abc import Traversable + if TYPE_CHECKING: from verifiers.envs.experimental.composable.task import SandboxSpec from verifiers.types import State, TrajectoryStep diff --git a/verifiers/envs/experimental/composable/harnesses/rlm.py b/verifiers/envs/experimental/composable/harnesses/rlm.py index c2a1528f3d..316ffdc4ef 100644 --- a/verifiers/envs/experimental/composable/harnesses/rlm.py +++ b/verifiers/envs/experimental/composable/harnesses/rlm.py @@ -3,10 +3,14 @@ import hashlib import random import shlex -from importlib.abc import Traversable from pathlib import Path from typing import Callable +try: + from importlib.resources.abc import Traversable +except ImportError: # Python < 3.14 + from importlib.abc import Traversable + from verifiers.envs.experimental.composable import Harness from verifiers.envs.experimental.utils.git_checkout_cache import ( resolve_git_checkout, diff --git a/verifiers/envs/experimental/composable/task.py b/verifiers/envs/experimental/composable/task.py index 950812c276..7f17f47693 100644 --- a/verifiers/envs/experimental/composable/task.py +++ b/verifiers/envs/experimental/composable/task.py @@ -27,10 +27,14 @@ async def evaluate(self, sandbox_client, sandbox_id, state) -> float: ... import importlib import importlib.resources as resources from dataclasses import dataclass -from importlib.abc import Traversable from pathlib import Path from typing import Any, Callable +try: + from importlib.resources.abc import Traversable +except ImportError: # Python < 3.14 + from importlib.abc import Traversable + from verifiers.envs.experimental.composable._filter import _resolve_filter_fn from verifiers.types import DatasetBuilder, Messages, State diff --git a/verifiers/v1/runtime.py b/verifiers/v1/runtime.py index 5c3062e413..7d6dcd332f 100644 --- a/verifiers/v1/runtime.py +++ b/verifiers/v1/runtime.py @@ -8,7 +8,6 @@ from collections.abc import Awaitable, Callable, Iterable, Sequence from contextlib import AsyncExitStack from dataclasses import dataclass, field -from importlib.abc import Traversable from pathlib import Path from typing import ( TYPE_CHECKING, @@ -20,6 +19,11 @@ runtime_checkable, ) +try: + from importlib.resources.abc import Traversable +except ImportError: # Python < 3.14 + from importlib.abc import Traversable + from verifiers.clients import Client, resolve_client from verifiers.types import Messages, Response, Tool from verifiers.types import ClientConfig, ClientType, SamplingArgs diff --git a/verifiers/v1/taskset.py b/verifiers/v1/taskset.py index df65e82f01..f1c1ea4299 100644 --- a/verifiers/v1/taskset.py +++ b/verifiers/v1/taskset.py @@ -1,7 +1,11 @@ -from importlib.abc import Traversable from pathlib import Path from typing import Generic, TypeVar, cast, final +try: + from importlib.resources.abc import Traversable +except ImportError: # Python < 3.14 + from importlib.abc import Traversable + from datasets import Dataset from pydantic import AliasChoices, Field diff --git a/verifiers/v1/utils/sandbox_utils.py b/verifiers/v1/utils/sandbox_utils.py index ea6876ada0..e5a188f4cc 100644 --- a/verifiers/v1/utils/sandbox_utils.py +++ b/verifiers/v1/utils/sandbox_utils.py @@ -8,10 +8,14 @@ import tempfile import uuid from collections.abc import Awaitable, Callable -from importlib.abc import Traversable from pathlib import Path from typing import TYPE_CHECKING, Literal, Protocol, TypeVar, cast +try: + from importlib.resources.abc import Traversable +except ImportError: # Python < 3.14 + from importlib.abc import Traversable + import tenacity as tc from verifiers.decorators import setup as setup_handler diff --git a/verifiers/v1/utils/taskset_utils.py b/verifiers/v1/utils/taskset_utils.py index a104a87668..34d00789e4 100644 --- a/verifiers/v1/utils/taskset_utils.py +++ b/verifiers/v1/utils/taskset_utils.py @@ -5,10 +5,14 @@ from collections.abc import Iterable from contextlib import suppress from copy import deepcopy -from importlib.abc import Traversable from pathlib import Path from typing import cast +try: + from importlib.resources.abc import Traversable +except ImportError: # Python < 3.14 + from importlib.abc import Traversable + from datasets import Dataset from verifiers.types import task_payload_from_info