diff --git a/CHANGELOG.md b/CHANGELOG.md
index fad2d825a..b81423268 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -31,6 +31,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 - Classes now use `CONFIG` if it has a default for every field and `config` is `None`
 - Models now dynamically import third party modules.
 - `dffml list records` command prints Records as JSON using `.export()`
+- FileSource takes pathlib.Path as filename
 ### Fixed
 - Race condition in `MemoryRedundancyChecker` when more than 4 possible
   parameter sets for an operation.
diff --git a/dffml/df/types.py b/dffml/df/types.py
index 74e67ed29..539321a88 100644
--- a/dffml/df/types.py
+++ b/dffml/df/types.py
@@ -29,7 +29,27 @@ class DefinitionMissing(Exception):
 
 class Definition(NamedTuple):
     """
-    List[type] is how to specify a list
+    Examples
+    --------
+
+    >>> from dffml import Definition, Input
+    >>> from typing import NamedTuple
+    >>>
+    >>> class Person(NamedTuple):
+    ...   name: str
+    ...   age: int
+    >>>
+    >>> Friend = Definition(name="Friend", primitive="map", spec=Person)
+    >>> Input(value={"name": "Bob", "age": 42}, definition=Friend)
+    Input(value=Person(name='Bob', age=42), definition=Friend)
+    >>>
+    >>> SignUpQueue = Definition(name="SignUpQueue", primitive="array", spec=Person, subspec=True)
+    >>> Input(value=[{"name": "Bob", "age": 42}], definition=SignUpQueue)
+    Input(value=[Person(name='Bob', age=42)], definition=SignUpQueue)
+    >>>
+    >>> AddressBook = Definition(name="AddressBook", primitive="map", spec=Person, subspec=True)
+    >>> Input(value={"bob": {"name": "Bob", "age": 42}}, definition=AddressBook)
+    Input(value={'bob': Person(name='Bob', age=42)}, definition=AddressBook)
     """
 
     name: str
diff --git a/dffml/source/file.py b/dffml/source/file.py
index ffd8519ec..90d72520f 100644
--- a/dffml/source/file.py
+++ b/dffml/source/file.py
@@ -9,6 +9,7 @@ import lzma
 import errno
 import zipfile
 from contextlib import contextmanager
+import pathlib
 
 from ..base import config
 from .source import BaseSource
@@ -35,6 +36,12 @@ class FileSource(BaseSource):
     READMODE_COMPRESSED: str = "rt"
     WRITEMODE_COMPRESSED: str = "wt"
 
+    def __init__(self, config):
+        super().__init__(config)
+
+        if isinstance(getattr(self.config, "filename", None), str):
+            self.config.filename = pathlib.Path(self.config.filename)
+
     async def __aenter__(self) -> "BaseSourceContext":
         await self._open()
         return self
@@ -62,15 +69,16 @@ class FileSource(BaseSource):
                     os.strerror(errno.ENOENT),
                     self.config.filename,
                 )
-        if self.config.filename[::-1].startswith((".gz")[::-1]):
+        if self.config.filename.suffix == ".gz":
             opener = gzip.open(self.config.filename, self.READMODE_COMPRESSED)
-        elif self.config.filename[::-1].startswith((".bz2")[::-1]):
+        elif self.config.filename.suffix == ".bz2":
             opener = bz2.open(self.config.filename, self.READMODE_COMPRESSED)
-        elif self.config.filename[::-1].startswith(
-            (".xz")[::-1]
-        ) or self.config.filename[::-1].startswith((".lzma")[::-1]):
+        elif (
+            self.config.filename.suffix == ".xz"
+            or self.config.filename.suffix == ".lzma"
+        ):
             opener = lzma.open(self.config.filename, self.READMODE_COMPRESSED)
-        elif self.config.filename[::-1].startswith((".zip")[::-1]):
+        elif self.config.filename.suffix == ".zip":
             opener = self.zip_opener_helper()
         else:
             opener = open(self.config.filename, self.READMODE)
@@ -79,21 +87,22 @@ class FileSource(BaseSource):
 
     async def _close(self):
         if self.config.readwrite:
-            if self.config.filename[::-1].startswith((".gz")[::-1]):
+            if self.config.filename.suffix == ".gz":
                 close = gzip.open(
                     self.config.filename, self.WRITEMODE_COMPRESSED
                 )
-            elif self.config.filename[::-1].startswith((".bz2")[::-1]):
+            elif self.config.filename.suffix == ".bz2":
                 close = bz2.open(
                     self.config.filename, self.WRITEMODE_COMPRESSED
                 )
-            elif self.config.filename[::-1].startswith(
-                (".xz")[::-1]
-            ) or self.config.filename[::-1].startswith((".lzma")[::-1]):
+            elif (
+                self.config.filename.suffix == ".xz"
+                or self.config.filename.suffix == ".lzma"
+            ):
                 close = lzma.open(
                     self.config.filename, self.WRITEMODE_COMPRESSED
                 )
-            elif self.config.filename[::-1].startswith((".zip")[::-1]):
+            elif self.config.filename.suffix == ".zip":
                 close = self.zip_closer_helper()
             else:
                 close = open(self.config.filename, "w+")
diff --git a/dffml/util/cli/cmd.py b/dffml/util/cli/cmd.py
index bf86c9466..8028947c9 100644
--- a/dffml/util/cli/cmd.py
+++ b/dffml/util/cli/cmd.py
@@ -12,6 +12,7 @@ from typing import Dict, Any
 from ...record import Record
 from ...feature import Feature
 
+from ..data import export_dict
 from .arg import Arg, parse_unknown
 
 DisplayHelp = "Display help message"
@@ -197,7 +198,7 @@ class CMD(object):
             and result != [CMDOutputOverride]
         ):
             json.dump(
-                result,
+                export_dict(result=result)["result"],
                 sys.stdout,
                 sort_keys=True,
                 indent=4,
diff --git a/dffml/util/data.py b/dffml/util/data.py
index c33b4e570..c285fcf3a 100644
--- a/dffml/util/data.py
+++ b/dffml/util/data.py
@@ -9,6 +9,7 @@ import ast
 import types
 import pydoc
 import inspect
+import dataclasses
 from functools import wraps
 import pathlib
 from typing import Callable
@@ -149,6 +150,8 @@ def export_value(obj, key, value):
         obj[key] = value.export()
     elif hasattr(value, "_asdict"):
         obj[key] = value._asdict()
+    elif dataclasses.is_dataclass(value):
+        obj[key] = export_dict(**dataclasses.asdict(value))
     elif getattr(value, "__module__", None) == "typing":
         obj[key] = STANDARD_TYPES.get(
             str(value).replace("typing.", ""), "generic"
@@ -160,6 +163,8 @@ def export_list(iterable):
         export_value(iterable, i, value)
         if isinstance(value, (dict, types.MappingProxyType)):
             iterable[i] = export_dict(**iterable[i])
+        elif dataclasses.is_dataclass(value):
+            iterable[i] = export_dict(**dataclasses.asdict(value))
         elif isinstance(value, list):
             iterable[i] = export_list(iterable[i])
     return iterable
diff --git a/docs/conf.py b/docs/conf.py
index 253929992..9d6a3f290 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -88,7 +88,7 @@ html_static_path = ["_static"]
 
 
 def setup(app):
-    app.add_javascript("copybutton.js")
+    app.add_js_file("copybutton.js")
 
 
 # -- Extension configuration -------------------------------------------------
diff --git a/model/tensorflow/setup.py b/model/tensorflow/setup.py
index e57d906b4..31700f633 100644
--- a/model/tensorflow/setup.py
+++ b/model/tensorflow/setup.py
@@ -18,7 +18,7 @@ with open(
 with open(os.path.join(self_path, "README.md"), "r", encoding="utf-8") as f:
     readme = f.read()
 
-INSTALL_REQUIRES = ["tensorflow>=2.0.0"] + (
+INSTALL_REQUIRES = ["tensorflow>=2.0.0,<2.2.0"] + (
     ["dffml>=0.3.7"]
     if not any(
         list(
diff --git a/model/tensorflow_hub/setup.py b/model/tensorflow_hub/setup.py
index e31dd47a0..e76b1c89f 100644
--- a/model/tensorflow_hub/setup.py
+++ b/model/tensorflow_hub/setup.py
@@ -20,7 +20,7 @@ with open(os.path.join(self_path, "README.md"), "r", encoding="utf-8") as f:
 
 INSTALL_REQUIRES = (
     [
-        "tensorflow>=2.0.0",
+        "tensorflow>=2.0.0,<2.2.0",
         "tensorflow-hub>=0.6.0",
         "pandas>=0.25.0",
         "numpy>=1.16.4",
diff --git a/model/transformers/setup.py b/model/transformers/setup.py
index 60e7e0efe..dd3e5cea9 100644
--- a/model/transformers/setup.py
+++ b/model/transformers/setup.py
@@ -19,12 +19,12 @@ with open(os.path.join(self_path, "README.md"), "r", encoding="utf-8") as f:
     readme = f.read()
 
 INSTALL_REQUIRES = [
-    "tensorflow>=2.0.0",
+    "tensorflow>=2.0.0,<2.2.0",
     "pandas>=0.25.0",
     "numpy>=1.16.4",
     "seqeval>=0.0.12",
     "fastprogress>=0.2.2",
-    "transformers>=2.5.1",
+    "transformers>=2.5.1,<2.9.0",
 ] + (
     ["dffml>=0.3.7"]
     if not any(

sources: file: Should take a pathlib.Path as filename
Right now if we have a filesource and we pass it a `pathlib.Path` as the filename, it will throw errors.

If you remove the `str` call here the failing test(s) will show you all the things that are wrong.

https://github.com/intel/dffml/blob/41d18ffea176dbec49224eed73910dfca933868f/service/http/tests/test_cli.py#L286-L290

The best way to handle this is probably to do like the models do right now with their directory config parameter. Treat the filename as if it's always a `pathlib.Path`. If the call to instantiate the `FileSource` (or subclass of `FileSource`) passes in a `str`, convert it to a `pathlib.Path` object.

Fix all the code that assumes `config.filename` is going to be a string. Remove calls to `os.path.` where appropriate and replace with `pathlib` alternatives.
diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml
index d856e3e08..1f81a2040 100644
--- a/.github/workflows/testing.yml
+++ b/.github/workflows/testing.yml
@@ -119,6 +119,7 @@ jobs:
         model/transformers=${{ secrets.PYPI_MODEL_TRANSFORMERS }}
         model/scratch=${{ secrets.PYPI_MODEL_SCRATCH }}
         model/scikit=${{ secrets.PYPI_MODEL_SCIKIT }}
+        model/vowpalWabbit=${{ secrets.PYPI_MODEL_VOWPALWABBIT }}
         source/mysql=${{ secrets.PYPI_SOURCE_MYSQL }}
         feature/git=${{ secrets.PYPI_FEATURE_GIT }}
         feature/auth=${{ secrets.PYPI_FEATURE_AUTH }}
diff --git a/service/http/tests/test_cli.py b/service/http/tests/test_cli.py
index 04d0e031f..c56a31d63 100644
--- a/service/http/tests/test_cli.py
+++ b/service/http/tests/test_cli.py
@@ -284,7 +284,7 @@ class TestServer(AsyncTestCase):
         with tempfile.TemporaryDirectory() as tempdir:
             # Source the HTTP API will pre-load
             source = JSONSource(
-                filename=str(pathlib.Path(tempdir, "source.json")),
+                filename=pathlib.Path(tempdir, "source.json"),
                 allowempty=True,
                 readwrite=True,
             )
@@ -302,7 +302,7 @@ class TestServer(AsyncTestCase):
                         "-sources",
                         "mysource=json",
                         "-source-mysource-filename",
-                        source.config.filename,
+                        str(source.config.filename),
                     )
                 )
                 async with self.get(
diff --git a/service/http/tests/test_routes.py b/service/http/tests/test_routes.py
index b80f6fe70..41bb9b94c 100644
--- a/service/http/tests/test_routes.py
+++ b/service/http/tests/test_routes.py
@@ -162,7 +162,7 @@ class TestRoutesConfigure(TestRoutesRunning, AsyncTestCase):
             self.assertEqual(
                 self.cli.app["sources"]["salary"].config,
                 CSVSourceConfig(
-                    filename="dataset.csv",
+                    filename=pathlib.Path("dataset.csv"),
                     tag="untagged",
                     key="key",
                     tagcol="tag",
diff --git a/tests/source/test_file.py b/tests/source/test_file.py
index 41e9fce69..ec5564d96 100644
--- a/tests/source/test_file.py
+++ b/tests/source/test_file.py
@@ -1,5 +1,6 @@
 # SPDX-License-Identifier: MIT
 # Copyright (c) 2019 Intel Corporation
+import pathlib
 from unittest.mock import patch, mock_open
 from contextlib import contextmanager
 from typing import AsyncIterator
@@ -125,10 +126,10 @@ class TestFileSource(AsyncTestCase):
             async with FakeFileSource(
                 self.config("testfile", readwrite=False)
             ):
-                m_open.assert_called_once_with("testfile", "r")
+                pass
+            m_open.assert_called_once_with(pathlib.Path("testfile"), "r")
 
     async def test_open_gz(self):
-        source = FakeFileSource("testfile.gz")
         m_open = mock_open()
         with patch("os.path.exists", return_value=True), patch(
             "gzip.open", m_open
@@ -136,7 +137,9 @@ class TestFileSource(AsyncTestCase):
             async with FakeFileSource(
                 self.config("testfile.gz", readwrite=False)
             ):
-                m_open.assert_called_once_with("testfile.gz", "rt")
+                m_open.assert_called_once_with(
+                    pathlib.Path("testfile.gz"), "rt"
+                )
 
     async def test_open_bz2(self):
         m_open = mock_open()
@@ -146,7 +149,9 @@ class TestFileSource(AsyncTestCase):
             async with FakeFileSource(
                 self.config("testfile.bz2", readwrite=False)
             ):
-                m_open.assert_called_once_with("testfile.bz2", "rt")
+                m_open.assert_called_once_with(
+                    pathlib.Path("testfile.bz2"), "rt"
+                )
 
     async def test_open_lzma(self):
         m_open = mock_open()
@@ -156,7 +161,9 @@ class TestFileSource(AsyncTestCase):
             async with FakeFileSource(
                 self.config("testfile.lzma", readwrite=False)
             ):
-                m_open.assert_called_once_with("testfile.lzma", "rt")
+                m_open.assert_called_once_with(
+                    pathlib.Path("testfile.lzma"), "rt"
+                )
 
     async def test_open_xz(self):
         m_open = mock_open()
@@ -166,7 +173,9 @@ class TestFileSource(AsyncTestCase):
             async with FakeFileSource(
                 self.config("testfile.xz", readwrite=False)
             ):
-                m_open.assert_called_once_with("testfile.xz", "rt")
+                m_open.assert_called_once_with(
+                    pathlib.Path("testfile.xz"), "rt"
+                )
 
     async def test_open_zip(self):
         source = FakeFileSource(self.config("testfile.zip", readwrite=False))
@@ -192,7 +201,7 @@ class TestFileSource(AsyncTestCase):
         ):
             async with FakeFileSource(self.config("testfile")):
                 pass
-            m_open.assert_called_once_with("testfile", "w+")
+            m_open.assert_called_once_with(pathlib.Path("testfile"), "w+")
 
     async def test_close_gz(self):
         m_open = mock_open()
@@ -201,7 +210,7 @@ class TestFileSource(AsyncTestCase):
         ):
             async with FakeFileSource(self.config("testfile.gz")):
                 pass
-            m_open.assert_called_once_with("testfile.gz", "wt")
+            m_open.assert_called_once_with(pathlib.Path("testfile.gz"), "wt")
 
     async def test_close_bz2(self):
         m_open = mock_open()
@@ -210,7 +219,7 @@ class TestFileSource(AsyncTestCase):
         ):
             async with FakeFileSource(self.config("testfile.bz2")):
                 pass
-            m_open.assert_called_once_with("testfile.bz2", "wt")
+            m_open.assert_called_once_with(pathlib.Path("testfile.bz2"), "wt")
 
     async def test_close_lzma(self):
         m_open = mock_open()
@@ -219,7 +228,7 @@ class TestFileSource(AsyncTestCase):
         ):
             async with FakeFileSource(self.config("testfile.lzma")):
                 pass
-            m_open.assert_called_once_with("testfile.lzma", "wt")
+            m_open.assert_called_once_with(pathlib.Path("testfile.lzma"), "wt")
 
     async def test_close_xz(self):
         m_open = mock_open()
@@ -228,7 +237,7 @@ class TestFileSource(AsyncTestCase):
         ):
             async with FakeFileSource(self.config("testfile.xz")):
                 pass
-            m_open.assert_called_once_with("testfile.xz", "wt")
+            m_open.assert_called_once_with(pathlib.Path("testfile.xz"), "wt")
 
     async def test_close_zip(self):
         source = FakeFileSource(self.config("testfile.zip"))
diff --git a/tests/test_base.py b/tests/test_base.py
index cc7de64d1..b40530761 100644
--- a/tests/test_base.py
+++ b/tests/test_base.py
@@ -1,5 +1,6 @@
 import unittest
 from typing import List
+import pathlib
 
 from dffml.base import (
     BaseDataFlowFacilitatorObject,
@@ -125,7 +126,9 @@ class TestAutoArgsConfig(unittest.TestCase):
         self.assertEqual(config.label, "unlabeled")
         self.assertFalse(config.readonly)
         self.assertTrue(isinstance(config.source, JSONSource))
-        self.assertEqual(config.source.config.filename, "file.json")
+        self.assertEqual(
+            config.source.config.filename, pathlib.Path("file.json")
+        )
         self.assertEqual(
             config.features,
             Features(
@@ -162,7 +165,9 @@ class TestAutoArgsConfig(unittest.TestCase):
         self.assertEqual(config.label, "default-label")
         self.assertTrue(config.readonly)
         self.assertTrue(isinstance(config.source, CSVSource))
-        self.assertEqual(config.source.config.filename, "file.csv")
+        self.assertEqual(
+            config.source.config.filename, pathlib.Path("file.csv")
+        )
         self.assertEqual(
             config.features,
             Features(

pip install -e .[all]
parse_log_pytest
requirements.txt
pytest pytest-cov pytest-xdist pytest-mock pytest-asyncio
apt-get update apt-get install -y gcc
3.7
examples/requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
absl-py==2.1.0
aiohttp==3.8.6
aiohttp-cors==0.7.0
aiomysql==0.2.0
aiosignal==1.3.1
aiosqlite==0.19.0
astunparse==1.6.3
async-timeout==4.0.3
asynctest==0.13.0
attrs==24.2.0
cachetools==5.5.2
certifi @ file:///croot/certifi_1671487769961/work/certifi
charset-normalizer==3.4.1
coverage==7.2.7
-e git+https://github.com/intel/dffml.git@a6b8a42f1dbbbaf18e5bd431783f90cc976f3690#egg=dffml
dffml-config-yaml==0.0.10
dffml-model-scikit==0.0.9
dffml-model-scratch==0.0.8
dffml-model-tensorflow==0.2.7
dffml-service-http==0.0.10
dffml-source-mysql==0.0.9
exceptiongroup==1.2.2
execnet==2.0.2
flatbuffers==25.2.10
frozenlist==1.3.3
gast==0.4.0
google-auth==2.38.0
google-auth-oauthlib==0.4.6
google-pasta==0.2.0
grpcio==1.62.3
h5py==3.8.0
idna==3.10
importlib-metadata==6.7.0
iniconfig==2.0.0
joblib==1.3.2
keras==2.11.0
libclang==18.1.1
Markdown==3.4.4
MarkupSafe==2.1.5
multidict==6.0.5
numpy==1.21.6
oauthlib==3.2.2
opt-einsum==3.3.0
packaging==24.0
pandas==1.3.5
pluggy==1.2.0
protobuf==3.19.6
pyasn1==0.5.1
pyasn1-modules==0.3.0
PyMySQL==1.1.1
pytest==7.4.4
pytest-asyncio==0.21.2
pytest-cov==4.1.0
pytest-mock==3.11.1
pytest-xdist==3.5.0
python-dateutil==2.9.0.post0
pytz==2025.2
PyYAML==6.0.1
requests==2.31.0
requests-oauthlib==2.0.0
rsa==4.9
scikit-learn==1.0.2
scipy==1.7.3
six==1.17.0
tensorboard==2.11.2
tensorboard-data-server==0.6.1
tensorboard-plugin-wit==1.8.1
tensorflow==2.11.0
tensorflow-estimator==2.11.0
tensorflow-io-gcs-filesystem==0.34.0
termcolor==2.3.0
threadpoolctl==3.1.0
tomli==2.0.1
typing_extensions==4.7.1
urllib3==2.0.7
Werkzeug==2.2.3
wrapt==1.16.0
yarl==1.9.4
zipp==3.15.0

name: dffml
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=22.3.1=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - absl-py==2.1.0
      - aiohttp==3.8.6
      - aiohttp-cors==0.7.0
      - aiomysql==0.2.0
      - aiosignal==1.3.1
      - aiosqlite==0.19.0
      - astunparse==1.6.3
      - async-timeout==4.0.3
      - asynctest==0.13.0
      - attrs==24.2.0
      - cachetools==5.5.2
      - charset-normalizer==3.4.1
      - coverage==7.2.7
      - dffml==0.3.7
      - dffml-config-yaml==0.0.10
      - dffml-model-scikit==0.0.9
      - dffml-model-scratch==0.0.8
      - dffml-model-tensorflow==0.2.7
      - dffml-service-http==0.0.10
      - dffml-source-mysql==0.0.9
      - exceptiongroup==1.2.2
      - execnet==2.0.2
      - flatbuffers==25.2.10
      - frozenlist==1.3.3
      - gast==0.4.0
      - google-auth==2.38.0
      - google-auth-oauthlib==0.4.6
      - google-pasta==0.2.0
      - grpcio==1.62.3
      - h5py==3.8.0
      - idna==3.10
      - importlib-metadata==6.7.0
      - iniconfig==2.0.0
      - joblib==1.3.2
      - keras==2.11.0
      - libclang==18.1.1
      - markdown==3.4.4
      - markupsafe==2.1.5
      - multidict==6.0.5
      - numpy==1.21.6
      - oauthlib==3.2.2
      - opt-einsum==3.3.0
      - packaging==24.0
      - pandas==1.3.5
      - pluggy==1.2.0
      - protobuf==3.19.6
      - pyasn1==0.5.1
      - pyasn1-modules==0.3.0
      - pymysql==1.1.1
      - pytest==7.4.4
      - pytest-asyncio==0.21.2
      - pytest-cov==4.1.0
      - pytest-mock==3.11.1
      - pytest-xdist==3.5.0
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - pyyaml==6.0.1
      - requests==2.31.0
      - requests-oauthlib==2.0.0
      - rsa==4.9
      - scikit-learn==1.0.2
      - scipy==1.7.3
      - six==1.17.0
      - tensorboard==2.11.2
      - tensorboard-data-server==0.6.1
      - tensorboard-plugin-wit==1.8.1
      - tensorflow==2.11.0
      - tensorflow-estimator==2.11.0
      - tensorflow-io-gcs-filesystem==0.34.0
      - termcolor==2.3.0
      - threadpoolctl==3.1.0
      - tomli==2.0.1
      - typing-extensions==4.7.1
      - urllib3==2.0.7
      - werkzeug==2.2.3
      - wrapt==1.16.0
      - yarl==1.9.4
      - zipp==3.15.0
prefix: /opt/conda/envs/dffml

service/http/tests/test_cli.py::TestServer::test_sources service/http/tests/test_routes.py::TestRoutesConfigure::test_source tests/source/test_file.py::TestFileSource::test_close tests/source/test_file.py::TestFileSource::test_close_bz2 tests/source/test_file.py::TestFileSource::test_close_gz tests/source/test_file.py::TestFileSource::test_close_lzma tests/source/test_file.py::TestFileSource::test_close_xz tests/source/test_file.py::TestFileSource::test_open tests/source/test_file.py::TestFileSource::test_open_bz2 tests/source/test_file.py::TestFileSource::test_open_gz tests/source/test_file.py::TestFileSource::test_open_lzma tests/source/test_file.py::TestFileSource::test_open_xz tests/test_base.py::TestAutoArgsConfig::test_config_defaults tests/test_base.py::TestAutoArgsConfig::test_config_set
service/http/tests/test_routes.py::TestRoutesMultiComm::test_no_post service/http/tests/test_routes.py::TestRoutesMultiComm::test_post
service/http/tests/test_cli.py::TestRoutesMultiComm::test_no_post service/http/tests/test_cli.py::TestRoutesMultiComm::test_post service/http/tests/test_cli.py::TestCreateTLS::test_create service/http/tests/test_cli.py::TestServer::test_insecure_off_by_default service/http/tests/test_cli.py::TestServer::test_mc_config service/http/tests/test_cli.py::TestServer::test_models service/http/tests/test_cli.py::TestServer::test_start service/http/tests/test_cli.py::TestServer::test_start_insecure service/http/tests/test_routes.py::TestRoutesService::test_not_found_handler service/http/tests/test_routes.py::TestRoutesServiceUpload::test_missing_file_field service/http/tests/test_routes.py::TestRoutesServiceUpload::test_not_allowed service/http/tests/test_routes.py::TestRoutesServiceUpload::test_path_traversal service/http/tests/test_routes.py::TestRoutesServiceUpload::test_success service/http/tests/test_routes.py::TestRoutesServiceFiles::test_not_allowed service/http/tests/test_routes.py::TestRoutesServiceFiles::test_success service/http/tests/test_routes.py::TestRoutesList::test_models service/http/tests/test_routes.py::TestRoutesList::test_sources service/http/tests/test_routes.py::TestRoutesConfigure::test_model service/http/tests/test_routes.py::TestRoutesConfigure::test_model_config_error service/http/tests/test_routes.py::TestRoutesConfigure::test_model_context_model_not_found service/http/tests/test_routes.py::TestRoutesConfigure::test_not_found service/http/tests/test_routes.py::TestRoutesConfigure::test_source_context_source_not_found service/http/tests/test_routes.py::TestRoutesConfigure::test_source_error service/http/tests/test_routes.py::TestRoutesSource::test_record service/http/tests/test_routes.py::TestRoutesSource::test_records service/http/tests/test_routes.py::TestRoutesSource::test_records_iterkey service/http/tests/test_routes.py::TestRoutesSource::test_records_iterkey_not_found service/http/tests/test_routes.py::TestRoutesSource::test_source_not_found service/http/tests/test_routes.py::TestRoutesSource::test_update service/http/tests/test_routes.py::TestModel::test_accuracy service/http/tests/test_routes.py::TestModel::test_model_not_found service/http/tests/test_routes.py::TestModel::test_no_sources service/http/tests/test_routes.py::TestModel::test_predict service/http/tests/test_routes.py::TestModel::test_predict_chunk_size_unsupported service/http/tests/test_routes.py::TestModel::test_source_not_found service/http/tests/test_routes.py::TestModel::test_train tests/source/test_file.py::TestFileSource::test_args tests/source/test_file.py::TestFileSource::test_close_readonly tests/source/test_file.py::TestFileSource::test_close_zip tests/source/test_file.py::TestFileSource::test_config_readonly_default tests/source/test_file.py::TestFileSource::test_config_readonly_set tests/source/test_file.py::TestFileSource::test_open_no_file tests/source/test_file.py::TestFileSource::test_open_zip tests/test_base.py::TestAutoArgsConfig::test_00_args tests/test_base.py::TestCONFIG::test_CONFIG
docs/conf.py model/tensorflow/setup.py model/transformers/setup.py CHANGELOG.md dffml/df/types.py dffml/util/data.py dffml/source/file.py dffml/util/cli/cmd.py model/tensorflow_hub/setup.py
docs/conf.py model/tensorflow/setup.py model/transformers/setup.py CHANGELOG.md dffml/df/types.py dffml/util/data.py dffml/source/file.py dffml/util/cli/cmd.py model/tensorflow_hub/setup.py