From bafdb1cdf9e585e51574a3334a7eee1a4e7005e2 Mon Sep 17 00:00:00 2001 From: Keigh Rim Date: Thu, 27 Nov 2025 11:37:53 -0500 Subject: [PATCH] added a new metadata field for multi-model/family app --- clams/appmetadata/__init__.py | 4 ++++ tests/test_clamsapp.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/clams/appmetadata/__init__.py b/clams/appmetadata/__init__.py index 02e3227..8d0fec5 100644 --- a/clams/appmetadata/__init__.py +++ b/clams/appmetadata/__init__.py @@ -290,6 +290,10 @@ class AppMetadata(pydantic.BaseModel): None, description="(optional) Version of an analyzer software, if the app is working as a wrapper for one. " ) + analyzer_versions: Optional[Dict[str, str]] = pydantic.Field( + None, + description="(optional) Map of analyzer IDs to their versions, for apps that wrap multiple models or families." + ) app_license: str = pydantic.Field( ..., description="License information of the app." diff --git a/tests/test_clamsapp.py b/tests/test_clamsapp.py index a12cd6a..00faff8 100644 --- a/tests/test_clamsapp.py +++ b/tests/test_clamsapp.py @@ -431,6 +431,35 @@ def test_est_gpu_mem_typ_validation(self): # Should have auto-corrected self.assertEqual(metadata.est_gpu_mem_typ, metadata.est_gpu_mem_min) + def test_analyzer_versions_default_none(self): + """analyzer_versions field defaults to None.""" + metadata = AppMetadata( + name="Test App", + description="Test", + app_license="MIT", + identifier="test-app", + url="https://example.com", + ) + metadata.add_input(DocumentTypes.TextDocument) + metadata.add_output(AnnotationTypes.TimeFrame) + + self.assertIsNone(metadata.analyzer_versions) + + def test_analyzer_versions_with_value(self): + """analyzer_versions can be set with a dictionary.""" + test_versions = {"model_a": "1.0", "model_b": "2.1"} + metadata = AppMetadata( + name="Test App", + description="Test", + app_license="MIT", + identifier="test-app", + url="https://example.com", + analyzer_versions=test_versions, + ) + metadata.add_input(DocumentTypes.TextDocument) + metadata.add_output(AnnotationTypes.TimeFrame) + + self.assertEqual(metadata.analyzer_versions, test_versions) class TestRestifier(unittest.TestCase):