kaiko-eva 0.3.2__py3-none-any.whl → 0.4.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of kaiko-eva might be problematic. Click here for more details.

Files changed (101) hide show
  1. eva/core/callbacks/config.py +4 -0
  2. eva/core/cli/setup.py +1 -1
  3. eva/core/data/dataloaders/__init__.py +1 -2
  4. eva/core/data/dataloaders/dataloader.py +3 -1
  5. eva/core/data/samplers/random.py +17 -10
  6. eva/core/interface/interface.py +21 -0
  7. eva/core/loggers/log/__init__.py +2 -1
  8. eva/core/loggers/log/table.py +73 -0
  9. eva/core/models/modules/module.py +2 -2
  10. eva/core/models/wrappers/base.py +2 -2
  11. eva/core/models/wrappers/from_function.py +3 -3
  12. eva/core/models/wrappers/from_torchhub.py +9 -7
  13. eva/core/models/wrappers/huggingface.py +4 -5
  14. eva/core/models/wrappers/onnx.py +5 -5
  15. eva/core/trainers/trainer.py +2 -0
  16. eva/language/__init__.py +2 -1
  17. eva/language/callbacks/__init__.py +5 -0
  18. eva/language/callbacks/writers/__init__.py +5 -0
  19. eva/language/callbacks/writers/prediction.py +176 -0
  20. eva/language/data/dataloaders/__init__.py +5 -0
  21. eva/language/data/dataloaders/collate_fn/__init__.py +5 -0
  22. eva/language/data/dataloaders/collate_fn/text.py +57 -0
  23. eva/language/data/datasets/__init__.py +3 -1
  24. eva/language/data/datasets/{language.py → base.py} +1 -1
  25. eva/language/data/datasets/classification/base.py +3 -43
  26. eva/language/data/datasets/classification/pubmedqa.py +36 -4
  27. eva/language/data/datasets/prediction.py +151 -0
  28. eva/language/data/datasets/schemas.py +18 -0
  29. eva/language/data/datasets/text.py +92 -0
  30. eva/language/data/datasets/typings.py +39 -0
  31. eva/language/data/messages.py +60 -0
  32. eva/language/models/__init__.py +15 -11
  33. eva/language/models/modules/__init__.py +2 -2
  34. eva/language/models/modules/language.py +93 -0
  35. eva/language/models/networks/__init__.py +12 -0
  36. eva/language/models/networks/alibaba.py +26 -0
  37. eva/language/models/networks/api/__init__.py +11 -0
  38. eva/language/models/networks/api/anthropic.py +34 -0
  39. eva/language/models/networks/registry.py +5 -0
  40. eva/language/models/typings.py +39 -0
  41. eva/language/models/wrappers/__init__.py +13 -5
  42. eva/language/models/wrappers/base.py +47 -0
  43. eva/language/models/wrappers/from_registry.py +54 -0
  44. eva/language/models/wrappers/huggingface.py +44 -8
  45. eva/language/models/wrappers/litellm.py +81 -46
  46. eva/language/models/wrappers/vllm.py +37 -13
  47. eva/language/utils/__init__.py +2 -1
  48. eva/language/utils/str_to_int_tensor.py +20 -12
  49. eva/language/utils/text/__init__.py +5 -0
  50. eva/language/utils/text/messages.py +113 -0
  51. eva/multimodal/__init__.py +6 -0
  52. eva/multimodal/callbacks/__init__.py +5 -0
  53. eva/multimodal/callbacks/writers/__init__.py +5 -0
  54. eva/multimodal/callbacks/writers/prediction.py +39 -0
  55. eva/multimodal/data/__init__.py +5 -0
  56. eva/multimodal/data/dataloaders/__init__.py +5 -0
  57. eva/multimodal/data/dataloaders/collate_fn/__init__.py +5 -0
  58. eva/multimodal/data/dataloaders/collate_fn/text_image.py +28 -0
  59. eva/multimodal/data/datasets/__init__.py +6 -0
  60. eva/multimodal/data/datasets/base.py +13 -0
  61. eva/multimodal/data/datasets/multiple_choice/__init__.py +5 -0
  62. eva/multimodal/data/datasets/multiple_choice/patch_camelyon.py +80 -0
  63. eva/multimodal/data/datasets/schemas.py +14 -0
  64. eva/multimodal/data/datasets/text_image.py +77 -0
  65. eva/multimodal/data/datasets/typings.py +27 -0
  66. eva/multimodal/models/__init__.py +8 -0
  67. eva/multimodal/models/modules/__init__.py +5 -0
  68. eva/multimodal/models/modules/vision_language.py +55 -0
  69. eva/multimodal/models/networks/__init__.py +14 -0
  70. eva/multimodal/models/networks/alibaba.py +39 -0
  71. eva/multimodal/models/networks/api/__init__.py +11 -0
  72. eva/multimodal/models/networks/api/anthropic.py +34 -0
  73. eva/multimodal/models/networks/others.py +47 -0
  74. eva/multimodal/models/networks/registry.py +5 -0
  75. eva/multimodal/models/typings.py +27 -0
  76. eva/multimodal/models/wrappers/__init__.py +13 -0
  77. eva/multimodal/models/wrappers/base.py +47 -0
  78. eva/multimodal/models/wrappers/from_registry.py +54 -0
  79. eva/multimodal/models/wrappers/huggingface.py +180 -0
  80. eva/multimodal/models/wrappers/litellm.py +56 -0
  81. eva/multimodal/utils/__init__.py +1 -0
  82. eva/multimodal/utils/image/__init__.py +5 -0
  83. eva/multimodal/utils/image/encode.py +28 -0
  84. eva/multimodal/utils/text/__init__.py +1 -0
  85. eva/multimodal/utils/text/messages.py +79 -0
  86. eva/vision/data/datasets/classification/patch_camelyon.py +8 -6
  87. eva/vision/data/transforms/__init__.py +2 -1
  88. eva/vision/data/transforms/spatial/__init__.py +2 -1
  89. eva/vision/data/transforms/spatial/functional/__init__.py +5 -0
  90. eva/vision/data/transforms/spatial/functional/resize.py +26 -0
  91. eva/vision/data/transforms/spatial/resize.py +62 -0
  92. eva/vision/models/wrappers/from_registry.py +6 -5
  93. eva/vision/models/wrappers/from_timm.py +6 -4
  94. {kaiko_eva-0.3.2.dist-info → kaiko_eva-0.4.0.dist-info}/METADATA +10 -2
  95. {kaiko_eva-0.3.2.dist-info → kaiko_eva-0.4.0.dist-info}/RECORD +98 -40
  96. eva/core/data/dataloaders/collate_fn/__init__.py +0 -5
  97. eva/core/data/dataloaders/collate_fn/collate.py +0 -24
  98. eva/language/models/modules/text.py +0 -85
  99. {kaiko_eva-0.3.2.dist-info → kaiko_eva-0.4.0.dist-info}/WHEEL +0 -0
  100. {kaiko_eva-0.3.2.dist-info → kaiko_eva-0.4.0.dist-info}/entry_points.txt +0 -0
  101. {kaiko_eva-0.3.2.dist-info → kaiko_eva-0.4.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,26 @@
1
+ """Functional resizing utilities."""
2
+
3
+ import io
4
+ from typing import Tuple
5
+
6
+ from PIL import Image
7
+ from torchvision import tv_tensors
8
+ from torchvision.transforms.v2 import functional as F
9
+
10
+
11
+ def resize_to_max_bytes(image: tv_tensors.Image, max_bytes: int) -> tv_tensors.Image:
12
+ """Resize the image to fit within the specified byte size."""
13
+ image_pil = F.to_pil_image(image)
14
+ image_bytes = io.BytesIO()
15
+ image_pil.save(image_bytes, format="PNG", optimize=True)
16
+
17
+ while image_bytes.tell() > max_bytes:
18
+ size: Tuple[int, int] = image_pil.size # type: ignore
19
+ w, h = size
20
+ scale = (max_bytes / image_bytes.tell()) ** 0.5
21
+ new_size = (max(1, int(h * scale)), max(1, int(w * scale)))
22
+ image_pil = image_pil.resize(new_size, Image.Resampling.LANCZOS)
23
+ image_bytes = io.BytesIO()
24
+ image_pil.save(image_bytes, format="PNG", optimize=True)
25
+
26
+ return tv_tensors.Image(F.pil_to_tensor(image_pil))
@@ -0,0 +1,62 @@
1
+ """Image resize transforms."""
2
+
3
+ import functools
4
+ from typing import Any, Dict
5
+
6
+ from torchvision import tv_tensors
7
+ from torchvision.transforms import v2
8
+ from typing_extensions import override
9
+
10
+ from eva.vision.data.transforms.spatial import functional
11
+
12
+
13
+ class Resize(v2.Transform):
14
+ """Resize transform for images with spatial or byte-based constraints.
15
+
16
+ This transform provides two mutually exclusive modes of resizing:
17
+ 1. Spatial resizing: Resize to a specific (height, width) dimension
18
+ 2. Byte-based resizing: Resize to fit within a maximum byte size
19
+
20
+ The latter is particularly useful for API models (e.g. Claude 3.7) that
21
+ have strict byte size limits for image inputs.
22
+ """
23
+
24
+ def __init__(self, size: tuple[int, int] | None = None, max_bytes: int | None = None) -> None:
25
+ """Initializes the transform.
26
+
27
+ Args:
28
+ size: Target size as (height, width) tuple for spatial resizing.
29
+ If provided, max_bytes must be None.
30
+ max_bytes: Maximum allowed byte size for the image.
31
+ If provided, size must be None. Must be a positive integer.
32
+
33
+ Raises:
34
+ ValueError: If both size and max_bytes are provided, or if max_bytes
35
+ is not a positive integer.
36
+ """
37
+ if size is not None and max_bytes is not None:
38
+ raise ValueError("Cannot provide both 'size' and 'max_bytes' parameters.")
39
+ if max_bytes is not None and max_bytes <= 0:
40
+ raise ValueError("'max_bytes' must be a positive integer.")
41
+
42
+ super().__init__()
43
+
44
+ self.size = size
45
+ self.max_bytes = max_bytes
46
+ self.resize_fn = None
47
+
48
+ if size is not None:
49
+ self.resize_fn = v2.Resize(size=size)
50
+ elif max_bytes is not None:
51
+ self.resize_fn = functools.partial(functional.resize_to_max_bytes, max_bytes=max_bytes)
52
+
53
+ @functools.singledispatchmethod
54
+ @override
55
+ def _transform(self, inpt: Any, params: Dict[str, Any]) -> Any:
56
+ return inpt
57
+
58
+ @_transform.register(tv_tensors.Image)
59
+ @_transform.register(tv_tensors.Mask)
60
+ def _(self, inpt: Any, params: Dict[str, Any]) -> Any:
61
+ inpt_resized = self.resize_fn(inpt) if self.resize_fn is not None else inpt
62
+ return tv_tensors.wrap(inpt_resized, like=inpt)
@@ -3,6 +3,7 @@
3
3
  from typing import Any, Callable, Dict
4
4
 
5
5
  import torch
6
+ from torch import nn
6
7
  from typing_extensions import override
7
8
 
8
9
  from eva.core.models.wrappers import base
@@ -40,14 +41,14 @@ class ModelFromRegistry(base.BaseModel[torch.Tensor, torch.Tensor]):
40
41
  self._model_kwargs = model_kwargs or {}
41
42
  self._model_extra_kwargs = model_extra_kwargs or {}
42
43
 
43
- self.load_model()
44
+ self.model = self.load_model()
44
45
 
45
46
  @override
46
- def load_model(self) -> None:
47
- self._model = factory.ModuleFactory(
47
+ def load_model(self) -> nn.Module:
48
+ ModelFromRegistry.__name__ = self._model_name
49
+
50
+ return factory.ModuleFactory(
48
51
  registry=backbone_registry,
49
52
  name=self._model_name,
50
53
  init_args=self._model_kwargs | self._model_extra_kwargs,
51
54
  )
52
-
53
- ModelFromRegistry.__name__ = self._model_name
@@ -5,6 +5,7 @@ from urllib import parse
5
5
 
6
6
  import timm
7
7
  import torch
8
+ from torch import nn
8
9
  from typing_extensions import override
9
10
 
10
11
  from eva.core.models.wrappers import base
@@ -46,12 +47,14 @@ class TimmModel(base.BaseModel[torch.Tensor, torch.Tensor]):
46
47
  self._out_indices = out_indices
47
48
  self._model_kwargs = model_kwargs or {}
48
49
 
49
- self.load_model()
50
+ self.model = self.load_model()
50
51
 
51
52
  @override
52
- def load_model(self) -> None:
53
+ def load_model(self) -> nn.Module:
53
54
  """Builds and loads the timm model as feature extractor."""
54
- self._model = timm.create_model(
55
+ TimmModel.__name__ = self._model_name
56
+
57
+ return timm.create_model(
55
58
  model_name=self._model_name,
56
59
  pretrained=True if self._checkpoint_path else self._pretrained,
57
60
  pretrained_cfg=self._pretrained_cfg,
@@ -59,7 +62,6 @@ class TimmModel(base.BaseModel[torch.Tensor, torch.Tensor]):
59
62
  features_only=self._out_indices is not None,
60
63
  **self._model_kwargs,
61
64
  )
62
- TimmModel.__name__ = self._model_name
63
65
 
64
66
  @property
65
67
  def _pretrained_cfg(self) -> Dict[str, Any]:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kaiko-eva
3
- Version: 0.3.2
3
+ Version: 0.4.0
4
4
  Summary: Evaluation Framework for oncology foundation models.
5
5
  Keywords: machine-learning,evaluation-framework,oncology,foundation-models
6
6
  Author-Email: Ioannis Gatopoulos <ioannis@kaiko.ai>, =?utf-8?q?Nicolas_K=C3=A4nzig?= <nicolas@kaiko.ai>, Roman Moser <roman@kaiko.ai>
@@ -245,6 +245,10 @@ Requires-Dist: einops>=0.8.1; extra == "vision"
245
245
  Provides-Extra: language
246
246
  Requires-Dist: datasets<4.0.0,>=2.19.0; extra == "language"
247
247
  Requires-Dist: litellm>=1.61.8; extra == "language"
248
+ Requires-Dist: backoff>=2.2.1; extra == "language"
249
+ Provides-Extra: multimodal
250
+ Requires-Dist: litellm>=1.61.8; extra == "multimodal"
251
+ Requires-Dist: backoff>=2.2.1; extra == "multimodal"
248
252
  Provides-Extra: all
249
253
  Requires-Dist: h5py>=3.10.0; extra == "all"
250
254
  Requires-Dist: nibabel>=4.0.1; extra == "all"
@@ -260,6 +264,7 @@ Requires-Dist: monai>=1.3.2; extra == "all"
260
264
  Requires-Dist: einops>=0.8.1; extra == "all"
261
265
  Requires-Dist: datasets<4.0.0,>=2.19.0; extra == "all"
262
266
  Requires-Dist: litellm>=1.61.8; extra == "all"
267
+ Requires-Dist: backoff>=2.2.1; extra == "all"
263
268
  Description-Content-Type: text/markdown
264
269
 
265
270
  <div align="center">
@@ -298,7 +303,7 @@ Check out the [documentation](https://kaiko-ai.github.io/eva/) for more informat
298
303
 
299
304
  ### Highlights:
300
305
  - Easy and reliable benchmark of Oncology FMs
301
- - Supports patch-level classification, slide-level classification, semantic segmentation, and text classification downstream tasks
306
+ - Supports patch-level classification, slide-level classification, semantic segmentation, and (visual) question answering tasks.
302
307
  - Automatic embedding inference and evaluation of a downstream task
303
308
  - Native support of popular medical [datasets](https://kaiko-ai.github.io/eva/dev/datasets/) and models
304
309
  - Produce statistics over multiple evaluation fits and multiple metrics
@@ -316,6 +321,9 @@ pip install 'kaiko-eva[vision]'
316
321
  # to install the expanded `language` version
317
322
  pip install 'kaiko-eva[language]'
318
323
 
324
+ # to install the expanded `multimodal` version
325
+ pip install 'kaiko-eva[multimodal]'
326
+
319
327
  # to install everything
320
328
  pip install 'kaiko-eva[all]'
321
329
  ```
@@ -3,7 +3,7 @@ eva/__main__.py,sha256=kM5tQ0egTuBWixNLLx9QU-PpS2Bbs3zE3nYE6b2vWa0,282
3
3
  eva/__version__.py,sha256=YFR4oOlvPg0sS4Ni7GJ_vU42VTs5WiWp6odK7yH4TBY,611
4
4
  eva/core/__init__.py,sha256=AYlMZcH76B7I1lOa-E67u2o9DxsCwI4JMLCYXLk9oDQ,451
5
5
  eva/core/callbacks/__init__.py,sha256=_XsS4QGf4r9frzFwEx-krmzJm3kbLmXQFtwYCfRyjrM,281
6
- eva/core/callbacks/config.py,sha256=-DRt20a2aF9Z9-7nZvbGBcOZ30qNf3ESf25EPRgRL1w,4267
6
+ eva/core/callbacks/config.py,sha256=X5d-Ex_1irOLtyzSbB4t3BjfctqtJXsIdHEbJUISmDE,4337
7
7
  eva/core/callbacks/writers/__init__.py,sha256=z8cNVJOanj-yYyIiX-mOkhur1NExuCOKzPjp4mmm3AE,232
8
8
  eva/core/callbacks/writers/embeddings/__init__.py,sha256=zMxP4POf1yFFUVSjGcsQgyPYNY6JsZO_F66ngKJZaG8,301
9
9
  eva/core/callbacks/writers/embeddings/_manifest.py,sha256=pB9nGv9ofVbnI4HHPrHY4p7jeFiFQTRc09zszto_DTk,2424
@@ -14,12 +14,10 @@ eva/core/callbacks/writers/embeddings/typings.py,sha256=qXZSlasaSKHad6HyJeRTeUv-
14
14
  eva/core/cli/__init__.py,sha256=1lGiomn4JINI0DKy41_D4cEyyH-hN6cfTZfMPxLxTCA,68
15
15
  eva/core/cli/cli.py,sha256=AZ4B4OP3D2af9H2RYBd5nxoy5I9DlaClZaadSWpPEPI,422
16
16
  eva/core/cli/logo.py,sha256=x6-vGWI0s9gza-xxQrBDi2wneb2wFU_mQGHgpAiq2MQ,786
17
- eva/core/cli/setup.py,sha256=kR-7l4X5Hu8kSLoQZGYGIeLXtn9S_EU52dauDy6fm0w,2663
17
+ eva/core/cli/setup.py,sha256=q5bLSqlHvR0bgF-uh4tL1JOv2aCn5hoRP-XqCaBKTvo,2690
18
18
  eva/core/data/__init__.py,sha256=yG3BeOWhp1EjVYMFqx8M_TBWFDyfIwwksQGQmMdSPaI,340
19
- eva/core/data/dataloaders/__init__.py,sha256=0AvpsPOdh4NX5rwkX9Th1M_rzxZVVzTPTdC5oTGFd5w,194
20
- eva/core/data/dataloaders/collate_fn/__init__.py,sha256=CfSAVrPD36shpyYAkob2ny05VWymb95MutawQcZkbuo,134
21
- eva/core/data/dataloaders/collate_fn/collate.py,sha256=oBdxaDCIaXBB6H8LB90Qsi2Inw1tyHGF4kAFBINPOeQ,689
22
- eva/core/data/dataloaders/dataloader.py,sha256=amRIwbmI6Hi2qS-ciKkv7ehgkBbMCHx7XUaEMlttWkw,2688
19
+ eva/core/data/dataloaders/__init__.py,sha256=fbNClVZ8J3QoGi4qiPq635ig1j9GdI7six3RhfwDbjY,110
20
+ eva/core/data/dataloaders/dataloader.py,sha256=v_UL5p78EiyLqXUhWsS0EbfW0iO-DAWOMv7-WTclOvA,2750
23
21
  eva/core/data/datamodules/__init__.py,sha256=qZchYbgxo9lxYnGoqdk0C6MfS2IbF0WItO0kCdP9Mqc,229
24
22
  eva/core/data/datamodules/call.py,sha256=jjj9w3UXYuQB-qyCcw1EZpRJW10OC1I3dvgvsuQWLck,940
25
23
  eva/core/data/datamodules/datamodule.py,sha256=_pK59oXDe53oDkmv6eoJUvfl44WlFkrbC8KXSRMs_20,5533
@@ -35,7 +33,7 @@ eva/core/data/datasets/typings.py,sha256=KSmckjsU64pGV-8uSLkD1HmvPKYlyypngiRx9yy
35
33
  eva/core/data/samplers/__init__.py,sha256=rRrKtg4l6YoziD3M0MkctQvX1NdRxaQa5sm6RHH_jXc,315
36
34
  eva/core/data/samplers/classification/__init__.py,sha256=gvv7BH4lG9JlkMaTOnaL0f4k1ghiVBgrH64bh1-rreQ,147
37
35
  eva/core/data/samplers/classification/balanced.py,sha256=MGTHt-WQaQKiJ5A1D_P6HJ6YzPTD-ERhc0R7rNMFqfg,3788
38
- eva/core/data/samplers/random.py,sha256=znl0Z9a-X-3attP-EH9jwwo83n40FXW_JzOLNZAml_c,1252
36
+ eva/core/data/samplers/random.py,sha256=fAlPmlTiXO7QqTh2hLVjgmELsX4P7DrS-9vV2qMAcOQ,1409
39
37
  eva/core/data/samplers/sampler.py,sha256=0DOLUzFoweqEubuO1A4bZBRU0AWFoWGWrO3pawRT-eI,877
40
38
  eva/core/data/splitting/__init__.py,sha256=VQJ8lfakbv6y2kAk3VDtITAvh7kcZo3H1JwJBc5jT08,198
41
39
  eva/core/data/splitting/random.py,sha256=r6iy7j34seRTlyB79_Xy7m6lsKRi8ZM9X5Ln1b-SBjg,1453
@@ -48,13 +46,14 @@ eva/core/data/transforms/padding/pad_2d_tensor.py,sha256=J4maGFmeQf9IHRxt5kU-6eI
48
46
  eva/core/data/transforms/sampling/__init__.py,sha256=BFKbvRjlZrwS0GcNrM54ZSWt6PrQARfFlXM1jJ-wpvo,149
49
47
  eva/core/data/transforms/sampling/sample_from_axis.py,sha256=Zbhp94lVa70WQKmSOKMTsOMe2c7wLqNZto7JqWhSdtI,1229
50
48
  eva/core/interface/__init__.py,sha256=chdpKXipxe1NP-Fgr_d9r6X1gMna0XiEa38waJ6FzTM,98
51
- eva/core/interface/interface.py,sha256=EeBrIqUlO497BOZGZrtO-fZnc_BhIJrrqyQmRfqWXcw,4591
49
+ eva/core/interface/interface.py,sha256=pni92cLb4KQMSvOoYMWP2qIn8rtzqxj84hEhjsdCgis,5364
52
50
  eva/core/loggers/__init__.py,sha256=4YMLNlN9LnuKqhBI1R1keh69dmMD-2lcH3HKwwyn380,266
53
51
  eva/core/loggers/dummy.py,sha256=Y7ypH0ecSAIkkZ5LzTmNNEzlKkqeaHfUNMCDKVOg6D4,1204
54
52
  eva/core/loggers/experimental_loggers.py,sha256=p5uCK_9QCYufRhE-LZQUJWbhGElyobX_zRM78yX4p2o,230
55
- eva/core/loggers/log/__init__.py,sha256=2nXYmR5_0XW0N8BcC918uvdvNyNgQLN_x1-papMprBk,189
53
+ eva/core/loggers/log/__init__.py,sha256=TdsUwcaB2jW0--HVGIr7_polTfmr7iOmXtSmr1wK9_c,251
56
54
  eva/core/loggers/log/image.py,sha256=iUwntQCdRNLtkSdqu8CvV34l06zPYVo4NAW2gUeiJIM,1490
57
55
  eva/core/loggers/log/parameters.py,sha256=7Xi-I5gQvEVv71d58bwdZ-Hb4287NXxaUyMfriq_KDU,1634
56
+ eva/core/loggers/log/table.py,sha256=HULCo5icDB6UOIXXMci0eo32Pl1-YRWzaOAB-ZBVUak,1726
58
57
  eva/core/loggers/log/utils.py,sha256=k4Q7uKpAQctfDv0EEYPnPv6wt9LnckEeqGvbYSLfKO0,415
59
58
  eva/core/loggers/loggers.py,sha256=igHxdxJSotWSg6nEOKnfFuBszzblHgi8T7sBrE00FEs,166
60
59
  eva/core/loggers/utils/wandb.py,sha256=GdwzEeFTAng5kl_kIVRxKL7rvwqyicQHSaZS8VSMXvU,747
@@ -77,7 +76,7 @@ eva/core/models/__init__.py,sha256=T6Fo886LxMj-Y58_ylzkPkFSnFR2aISiMIbuO_weC4s,4
77
76
  eva/core/models/modules/__init__.py,sha256=_4VjN9Qs4_mftEVgt0KqVxCRAtDcKYbUnBA3Ox1Pzis,350
78
77
  eva/core/models/modules/head.py,sha256=bZ45RBPi3N8sjvKyt2_TeKWI1eB6GyBeGzV6J11ERO8,5225
79
78
  eva/core/models/modules/inference.py,sha256=ih-0Rr2oNf2N6maiXPOW7XH5KVwUT1_MOxnJKOhJ1uQ,978
80
- eva/core/models/modules/module.py,sha256=LtjYxTZb7UY0owonmt_yQ5EySw3sX-xD9HLN2io8EK4,6697
79
+ eva/core/models/modules/module.py,sha256=8BHc_NdIXAyA7oUP7LFLYvMjIJSsuR5lvFiHS_wycU4,6695
81
80
  eva/core/models/modules/scheduler.py,sha256=orv5TDq9vEItxE7rTj0sQlzdChpx5jHx-3ypnHjUyr4,1650
82
81
  eva/core/models/modules/typings.py,sha256=LPR8JdIid2gJZpjMG1FcH5OZ60JlFOj_LupIh__2k_8,803
83
82
  eva/core/models/modules/utils/__init__.py,sha256=ScLCHwQfzlg_UsHVi5sf_SavUkh9secwtRn_umC_qA8,325
@@ -92,17 +91,17 @@ eva/core/models/transforms/extract_cls_features.py,sha256=A-oNNiGYBkMLK_E9DrzJUJ
92
91
  eva/core/models/transforms/extract_patch_features.py,sha256=5UsHjZnh3Uk2jAfi3GLtxoJ14ALTrfVoWUy8nTspRDY,2218
93
92
  eva/core/models/wrappers/__init__.py,sha256=jaiANQdbO-IPgH8U-Y0ftFsuuCAM5i5KuYRHauKw5k8,450
94
93
  eva/core/models/wrappers/_utils.py,sha256=ZWe9Ih_0kH5Wg_AQAtAn77LZ_CODAve5u3G12ifLNsc,4902
95
- eva/core/models/wrappers/base.py,sha256=S3LGbb_wo2ZTeDvoLvSlaymBsRN6UAuKrCmVAGasHWY,1452
96
- eva/core/models/wrappers/from_function.py,sha256=LVnfW3bL1mRtO8kL1D0MLJOiAiyiHkM7RX6-JIJzI0E,1844
97
- eva/core/models/wrappers/from_torchhub.py,sha256=-saKMxYq4KvVpaJL6BdHmUcEYHuaNvm2-0O_eQMg3GA,3250
98
- eva/core/models/wrappers/huggingface.py,sha256=-_fA81YRnoMc7O7SbrnCEj1dM_xArpQ8WdsZk9z_f1E,1449
99
- eva/core/models/wrappers/onnx.py,sha256=34li_xSwPryN8nJDrFyif_Hve1AEH7Ry9E_lZmf7JJM,1834
94
+ eva/core/models/wrappers/base.py,sha256=MvFZcwXvWsgvi9LqJUcUKjqimyFXvJ7P5ftOaNQpecc,1450
95
+ eva/core/models/wrappers/from_function.py,sha256=ccjCMwkdmyKqCxUbNaUDB1V6KvBgKuoXxIb8gH7Giyo,1855
96
+ eva/core/models/wrappers/from_torchhub.py,sha256=VHOigAIkYJfMfaq8WJwYzbex-1ny_ZjszxGSfaDeVbw,3291
97
+ eva/core/models/wrappers/huggingface.py,sha256=rP0DmdZnJ0Zqjy3o7BqwBa8uG3C24Epgb4h1sRPZOJ0,1459
98
+ eva/core/models/wrappers/onnx.py,sha256=BhXlXE0mF3pZ2R8SZtDUF51ooFwdsAjJ47CiJg-wjNY,1837
100
99
  eva/core/trainers/__init__.py,sha256=jhsKJF7HAae7EOiG3gKIAHH_h3dZlTE2JRcCHJmOzJc,208
101
100
  eva/core/trainers/_logging.py,sha256=gi4FqPy2GuVmh0WZY6mYwF7zMPvnoFA050B0XdCP6PU,2571
102
101
  eva/core/trainers/_recorder.py,sha256=M-BJHLgqGxR_MSV6f_WC7GN2JHYEEinV1-hNLpH667A,8062
103
102
  eva/core/trainers/_utils.py,sha256=M3h8lVhUmkeSiEXpX9hRdMvThGFCnTP15gv-hd1CZkc,321
104
103
  eva/core/trainers/functional.py,sha256=_Mw-NIPU2tPffxpK5t3sHBmVI6u163phCpoJFiauH7E,4583
105
- eva/core/trainers/trainer.py,sha256=a3OwLWOZKDqxayrd0ugUmxJKyQx6XDb4GHtdL8-AEV0,4826
104
+ eva/core/trainers/trainer.py,sha256=i_Qj76h6BfwK-5Y3UsiLcWrSnUKumg0XLxBdAR2WRHU,4908
106
105
  eva/core/utils/__init__.py,sha256=cndVBvtYxEW7hykH39GCNVI86zkXNn8Lw2A0sUJHS04,237
107
106
  eva/core/utils/clone.py,sha256=qcThZOuAs1cs0uV3BL5eKeM2VIBjuRPBe1t-NiUFM5Y,569
108
107
  eva/core/utils/factory.py,sha256=upWPWkWW7p3_ZoePAzbkkZvEPiAY4OaOQkwNvh0oa-E,2397
@@ -118,23 +117,79 @@ eva/core/utils/registry.py,sha256=iEDVsQ7DdPXhzfW32z3lWNgwjagR_jh_g4VkvajjRK4,13
118
117
  eva/core/utils/requirements.py,sha256=u01QPnBDu0YApncxgvg7xEANubyGSptqja12cycg3k0,909
119
118
  eva/core/utils/suppress_logs.py,sha256=pOk1076J0mKWn2lgDqEVC1g65FXhA_2IkC4LBEWhnwQ,902
120
119
  eva/core/utils/workers.py,sha256=hfx63M82qNg0Dwhre2tl53MnhtRsV7APaDONM9nhVB8,634
121
- eva/language/__init__.py,sha256=EQxtGM6zT3y-6EGecGAo2IXKS6J8dyWNOGP2mvD7fZ0,360
120
+ eva/language/__init__.py,sha256=W_u2wedmQvEOWVEw8dmkie7c6ATeVuTVn9_Yw7uc3cU,406
121
+ eva/language/callbacks/__init__.py,sha256=gVTSGjKYvovTgERVJmQLssW6Fz7aJwjYpe6gqUtq0_8,131
122
+ eva/language/callbacks/writers/__init__.py,sha256=FV02MK218j3pxCgmTvMPtgNL8-4d2NbUcnyvsZI0CNs,150
123
+ eva/language/callbacks/writers/prediction.py,sha256=MzU8Jc17fwL2SV0tjLl-ravxN9GPDAWARZdT2cr86FY,6894
122
124
  eva/language/data/__init__.py,sha256=ONF-CLBK2HO2p1bMCAbdvaHfSsYjdSE9-O3lWgwQQGk,89
123
- eva/language/data/datasets/__init__.py,sha256=AeGw3EVyz5w8Ja2m8Hd3FoKkCeG68M0BwtF64VCvOk4,211
125
+ eva/language/data/dataloaders/__init__.py,sha256=6pGDiohDxfNepOyE76XhgQMOYzgL1LYNaR9Qu7xb8fQ,169
126
+ eva/language/data/dataloaders/collate_fn/__init__.py,sha256=QZ22JjL4t8VldudGXTaEPv3rH8XKta_nlip1TszWn9g,171
127
+ eva/language/data/dataloaders/collate_fn/text.py,sha256=BrgbgUOFyaitymVAp2lZNaS2kqU7KzmeMOKfNzGaiYY,1944
128
+ eva/language/data/datasets/__init__.py,sha256=FE5tpQ18z2yRE_q60r2xu7WapLT3oGt5d_iZ6_uJ_DI,308
129
+ eva/language/data/datasets/base.py,sha256=BDpyT_mnYuP5qMlGP_vfRejO-gp-bsQYNMBqM0EmXyY,309
124
130
  eva/language/data/datasets/classification/__init__.py,sha256=HXtgJpMt9CgqvdeWc147bOn-9YeUMcL8v-0UHHkY_A4,144
125
- eva/language/data/datasets/classification/base.py,sha256=53Tbu8dRSMuNfRB_xEBk_3wSe0jRqd_S-IwE9WIpgW0,1669
126
- eva/language/data/datasets/classification/pubmedqa.py,sha256=AxqW5OQAtDBLVX-Sr0WIt3E7GBbkGMUPOvhOlKLTLh8,5439
127
- eva/language/data/datasets/language.py,sha256=Kjy1X9xZBIfjjEYJKMikgKhLaquugRSjXTYM_HWiHmw,305
128
- eva/language/models/__init__.py,sha256=ggL8uDv_J8vQTr5fc5j8UENoPA24h2Bo3uNSdd_vRU0,606
129
- eva/language/models/modules/__init__.py,sha256=UWO_yq7kPzTrptl6iWTFy07E_Cyzf-sTu-zAK-sN3CI,112
130
- eva/language/models/modules/text.py,sha256=wknEnS_t8IToLTo_F9AG4EXkt0_6o4n6dYm-8AVxgOY,2906
131
+ eva/language/data/datasets/classification/base.py,sha256=Xdy8quqx4lSZtS04yJ1WubXREMEnaB7BiCnn-Ao8wIQ,589
132
+ eva/language/data/datasets/classification/pubmedqa.py,sha256=n3CSwVbQAPU7NJ3m8WeYF1coNRLOiolVyvqVZIFfLg4,6510
133
+ eva/language/data/datasets/prediction.py,sha256=4ZyDFK5IWPuVShKy8z2Bn6Uq0dYgolFhf94EUnzYiC8,5880
134
+ eva/language/data/datasets/schemas.py,sha256=x0IBinezADXzQr71SDFSSeRYXW7uuINmzdPQLemWF-Y,405
135
+ eva/language/data/datasets/text.py,sha256=MpVJa5h7Al572UdU-WtfKwbF7nEAt_jd11rJF3ZIuQk,2778
136
+ eva/language/data/datasets/typings.py,sha256=_JZUD6ZlaCQhvWBD851zQZy3czgCxpsAnbnifSvSRCk,904
137
+ eva/language/data/messages.py,sha256=2x7k-rzZkM8Ow-fIm6cBrsJB6W_vlsjExs6IaQkdDa4,1306
138
+ eva/language/models/__init__.py,sha256=QZHt1uz9bB33Ko5mznlLjY0uGCVmnS7SOLb8Z0Bzgm4,725
139
+ eva/language/models/modules/__init__.py,sha256=Dk2pdjkerDA_Omrue38ia0rYmW84jRvyc9pPKziZH9c,172
140
+ eva/language/models/modules/language.py,sha256=ybDHNDtJ_YCKq_zoXHZorF0rOM1l4jz_URZ2cfdSSok,3097
131
141
  eva/language/models/modules/typings.py,sha256=dWq3FTbvGZGoIMTEIX1yWBk_VFKIHsvxaTvBXlbJfCA,379
132
- eva/language/models/wrappers/__init__.py,sha256=syKHBqX3MRD2oq_MjDjvoNC6W0F8TdmGYqhwrGLBahI,402
133
- eva/language/models/wrappers/huggingface.py,sha256=l3wVOB4QOe2_yeG4xwNm0imP_kWbjM8RG0ISE4ANAyE,2396
134
- eva/language/models/wrappers/litellm.py,sha256=0GSo3gxUv1Ah6FQ6VqTiiu_0TVx-h4xUkZqdOAGbKTM,2619
135
- eva/language/models/wrappers/vllm.py,sha256=LXadfveGSHmjWAlOBrJm1QHkKzB_O-s3M8U7bnKfW-E,5684
136
- eva/language/utils/__init__.py,sha256=jqrU3o80NAwt6HbNDWSM3e3B1-65vw811DqiUWT0Bys,150
137
- eva/language/utils/str_to_int_tensor.py,sha256=YlNppLlAoX0ZRVfcDX4BStCQPbS1NNParcwptxH0_wE,3143
142
+ eva/language/models/networks/__init__.py,sha256=zrRaiFqcIeFsLm6-yJWUeEgh_1xvBY-5QAdRGjEOysg,374
143
+ eva/language/models/networks/alibaba.py,sha256=kSGPdZWnn0q71Dm03HKmoXWACeEyc8V3HVLuk_fIhno,798
144
+ eva/language/models/networks/api/__init__.py,sha256=NrLiFExfplzbiFqOTgQqSUxeXzlAwCoDcbuBH9hbi58,222
145
+ eva/language/models/networks/api/anthropic.py,sha256=EdIKcFS7RCX_vpiOYMh-tS6rM74orOcNRmhw9pETen8,1194
146
+ eva/language/models/networks/registry.py,sha256=yFA1AhIbgoDLRvn9MUU2FPH25H7BODpN49CN_ya7wrY,106
147
+ eva/language/models/typings.py,sha256=SclZPkxg9T3ADl5SVWXzV4ymJyJ5Wf0VxDrWRRlBLIU,906
148
+ eva/language/models/wrappers/__init__.py,sha256=N5DrkKZs_zE7WHY76bnhViO1hpoO88Sm1BOj12tgwJU,626
149
+ eva/language/models/wrappers/base.py,sha256=0MLM-Ds20hftbO3JUUWd7wuXXRn2axz1ITUplw0u_LI,1682
150
+ eva/language/models/wrappers/from_registry.py,sha256=hdGzLfkgjZLrEb9GyqjF1mNlFMTErQ6sY900_tBJHH8,1793
151
+ eva/language/models/wrappers/huggingface.py,sha256=Qz_GAcIwJWt0Ao4gRSII7FEDUBMqYU5u5lVBejI3j_Y,4025
152
+ eva/language/models/wrappers/litellm.py,sha256=sGyaQHaFEjgEHxTcnlMHa2b7L5eln27Tv8g821eXd_U,3442
153
+ eva/language/models/wrappers/vllm.py,sha256=puJVOFeyFrqBplvkjvH5dGALlZD4gduaX3lY5fScbQU,6514
154
+ eva/language/utils/__init__.py,sha256=Bvw7Z5Z-mBQp7rTycycrgrxxrbItD5IqNU4uHRAnD9s,238
155
+ eva/language/utils/str_to_int_tensor.py,sha256=_D2FH_5S1Sc4ywsJ6EWrTwuaw-NJVHygwAaRSRs-NPs,3471
156
+ eva/language/utils/text/__init__.py,sha256=fxMel4GvRx-SKrxGcwXDNG77yj_deEOWc6mkePS2aWo,143
157
+ eva/language/utils/text/messages.py,sha256=9i4AUNjAo8XOF0_gB_MaoQy4SHI2zohz65qtMoTYtWE,3989
158
+ eva/multimodal/__init__.py,sha256=aRq8KCWg4h7XHS68EWSHDepu9VeACxVOU3B4DiQhphE,132
159
+ eva/multimodal/callbacks/__init__.py,sha256=tIwSH9Z1YJfebSU3-rSCGJgaX3Io6rptLX13gmI6Hck,135
160
+ eva/multimodal/callbacks/writers/__init__.py,sha256=6UYVvH3Hbya0haKQh9Dci_lRji9kz1RO4Z_vnTnY24U,154
161
+ eva/multimodal/callbacks/writers/prediction.py,sha256=OSfInVpz2qUDTkzM3MzwWZiJoa3N4y8amMLV5TEK-k0,1316
162
+ eva/multimodal/data/__init__.py,sha256=wL6XCRfIuDp-7YWaHsWZ90CdII-reSW1jQ2dn8_OC0Q,113
163
+ eva/multimodal/data/dataloaders/__init__.py,sha256=OZ4KnLxwfs1ccA6FItyoFBtgUL_vd5JnOycCOhk8H5M,143
164
+ eva/multimodal/data/dataloaders/collate_fn/__init__.py,sha256=1CHJ7cL9ELlo92LakB5ib0YD-kbTjzBrMBZ5j5kYu74,160
165
+ eva/multimodal/data/dataloaders/collate_fn/text_image.py,sha256=Hwf4GOmYtYcJYMTiZSVrSppo_SQqcAmvvahe_4xoVb0,883
166
+ eva/multimodal/data/datasets/__init__.py,sha256=XisAN7MOBncOucelkVOch_rX7KSHPIL7W6lmKUQVQuQ,236
167
+ eva/multimodal/data/datasets/base.py,sha256=mRkxiVpZJ3Rn_YRHvqGGJiAr-I1qY1A2H53vhn59d2g,315
168
+ eva/multimodal/data/datasets/multiple_choice/__init__.py,sha256=tmMLCUQWBAGvDPaUVL4qNoXTabkagoZTgbiAJ9Sci-E,148
169
+ eva/multimodal/data/datasets/multiple_choice/patch_camelyon.py,sha256=r2ZgjStennqHDK4H2Q980sDObvZDjTA6XWSLeBmbWaQ,3100
170
+ eva/multimodal/data/datasets/schemas.py,sha256=44ll-3B8V8ctkmUJ1EuoUSow38EmrRTx9K1nfLw3AgE,366
171
+ eva/multimodal/data/datasets/text_image.py,sha256=CxT8ej6lmcWDdCeimgBcujfgMrdCMEm5LhYnzW0RbL0,2608
172
+ eva/multimodal/data/datasets/typings.py,sha256=dkxszTFljKf8CUlIxblsIlNR0Ckjrl2_NTBq7cAY-fk,641
173
+ eva/multimodal/models/__init__.py,sha256=AILD2D1zLnPW6nelWTjwIBA4jS0kx2iSw3HEQ1wMJTo,130
174
+ eva/multimodal/models/modules/__init__.py,sha256=E6bhjdMGPBEUNI_Lq8foLQjRTbv26B7vgxOB8q3jeSQ,147
175
+ eva/multimodal/models/modules/vision_language.py,sha256=DaBv3_uzNllUeZcixWiDg1Mf5c0vZnALhwS1oC8uSfw,1844
176
+ eva/multimodal/models/networks/__init__.py,sha256=RjW6MZ4lCAAIbstTqIq_rkaZd-fm1_4XwLMetIry9gw,463
177
+ eva/multimodal/models/networks/alibaba.py,sha256=dsGG7QVFxLeMKSWMPOzJRPtWTyuIwFWQZYbf-5ibpGg,1241
178
+ eva/multimodal/models/networks/api/__init__.py,sha256=eE0nB7XjhuSH1itEyyMtJKxHwHg1IfsHU8S69AvfDo8,224
179
+ eva/multimodal/models/networks/api/anthropic.py,sha256=zlPiML2JL0q-l528x29dez-FofO5ktmOjPLFRh1PwTk,1198
180
+ eva/multimodal/models/networks/others.py,sha256=TMBR1cjzLa4azs2mHamdi1tzeRzE8wPtt8lLdYgp9IM,1535
181
+ eva/multimodal/models/networks/registry.py,sha256=beZsRZUrKdUhMPq7UYFOEF7z50FgxGT1OCwE64xBf9A,108
182
+ eva/multimodal/models/typings.py,sha256=bwQbUFIsXhAxk7YTXqRdBYw0RqPA0a6RGNLEt4mBrxk,693
183
+ eva/multimodal/models/wrappers/__init__.py,sha256=RvLw74VGP3mh1CMYPj4Ij09TNkBml4ohvdirXeVBm3I,421
184
+ eva/multimodal/models/wrappers/base.py,sha256=FXRjAekVIovc3kbd8Q6lkwpWTSML8a8XRFAgOCl2Gsk,1719
185
+ eva/multimodal/models/wrappers/from_registry.py,sha256=JBCck-ecIOC9_jSaEVMbU8R2MOgjHQRxzb0SzO4whIQ,1807
186
+ eva/multimodal/models/wrappers/huggingface.py,sha256=qyyhl1C90JKoOD9-p4TeK-hWWLo8T1iJgx8-yBa13O4,6714
187
+ eva/multimodal/models/wrappers/litellm.py,sha256=EyN180LbyfkkHXNMVdEcgKjv-7COqTvall3YOcvmZ_I,2063
188
+ eva/multimodal/utils/__init__.py,sha256=pRJUXvuJtcKOJc1yqKHdQv9dDAn8fOoP0d6Q_9cR7ek,32
189
+ eva/multimodal/utils/image/__init__.py,sha256=7DCx0FgFC0CwcR40872P6w1bQWgP8HXuwyy47ZQiv-Q,126
190
+ eva/multimodal/utils/image/encode.py,sha256=q_tq6MJtsy6yWu6Fei1j0mMmyKGBIf1CmvJcK4ev3eU,898
191
+ eva/multimodal/utils/text/__init__.py,sha256=Uk1vnstlU7hLa2Pn4cacVhdhQwe2vsBoPsB0_ZWjOdc,37
192
+ eva/multimodal/utils/text/messages.py,sha256=IIYKXE-6FwoKM3zNt3edKFqiJdEpNLnZXR4yhSZdjkM,2541
138
193
  eva/vision/__init__.py,sha256=oUZXFYjwtkWzi8An0uS5Xc84pLKintlXe2iti8zW6BQ,480
139
194
  eva/vision/callbacks/__init__.py,sha256=su1V73L0dDVYWSyvV_lnWbszDi2KikRraF7OsgeaKl4,139
140
195
  eva/vision/callbacks/loggers/__init__.py,sha256=td1JRJbE08nsGIZdO64_yLC3FUuMDp0kma0HjpUdXT4,161
@@ -158,7 +213,7 @@ eva/vision/data/datasets/classification/crc.py,sha256=sv18Lw4iUqGkYXEQN-kyZV_Foc
158
213
  eva/vision/data/datasets/classification/gleason_arvaniti.py,sha256=z1OQlxZYx-n3S2wcfu-GuchySRw0E70PURJDsvejFjE,5871
159
214
  eva/vision/data/datasets/classification/mhist.py,sha256=I-guWIucQZBHdSx-TWP24NXHf9IA9lU4hyfPZbJop0g,3033
160
215
  eva/vision/data/datasets/classification/panda.py,sha256=HVfCvByyajdo5o_waqTpzZWCbQXQqPjvvyS5I0NAvns,7277
161
- eva/vision/data/datasets/classification/patch_camelyon.py,sha256=1yXkfP680qxkQUFAPKRFbZv0cHAFx23s2vvT9th2nKM,7149
216
+ eva/vision/data/datasets/classification/patch_camelyon.py,sha256=mzgbVGQtaoer9yBXV8pXZx3DjbCy1w6aHNDJfC6CAOI,7187
162
217
  eva/vision/data/datasets/classification/unitopatho.py,sha256=IO3msEsuOnmdcYZxF-eBpo0K97y54rWFmCb_KxuF4bk,5129
163
218
  eva/vision/data/datasets/classification/wsi.py,sha256=YMGxU8ECjudizt_uXUevuPS8k66HxtEQ7M2IZJmL6kE,4079
164
219
  eva/vision/data/datasets/segmentation/__init__.py,sha256=f0q9tzk4ahaZfrw_SgIE_puk_D7qmkSCKX1FP9aJITU,668
@@ -175,7 +230,7 @@ eva/vision/data/datasets/segmentation/msd_task7_pancreas.py,sha256=dTsPD73PAP15V
175
230
  eva/vision/data/datasets/structs.py,sha256=RaTDW-B36PumcR5gymhCiX-r8GiKqIFcjqoEEjjFyUE,389
176
231
  eva/vision/data/datasets/vision.py,sha256=-_WRiyICMgqABR6Ay_RKBMfsPGwgx9MQfCA7WChHo24,3219
177
232
  eva/vision/data/datasets/wsi.py,sha256=dEAT_Si_Qb3qdSovUPeoiWeoPb7m-NGYqq44e3UXHk8,8384
178
- eva/vision/data/transforms/__init__.py,sha256=39KkoDaIILjgbCEi_WD48a0p6TKV7Woe6744a-CLeOU,863
233
+ eva/vision/data/transforms/__init__.py,sha256=7CpXeo-oSjft1VpzjK-dmozC0Ds-HeBzBU_KYLTnfIo,885
179
234
  eva/vision/data/transforms/base/__init__.py,sha256=d3gAnEHx8WZHuUpKLr0YAC1JR60qhRY02yeoADrx1Yw,143
180
235
  eva/vision/data/transforms/base/monai.py,sha256=g2U4eNxKiPm6TXjHjKZ4L8-1zxa1tEf-c73kKI_7WwQ,1081
181
236
  eva/vision/data/transforms/common/__init__.py,sha256=LWA5u0VsWzEEugdKpjpePr7fgV_XIGdASGwoaOU29Ac,211
@@ -191,8 +246,11 @@ eva/vision/data/transforms/intensity/__init__.py,sha256=mNp6pi0pnHcA24kQuiGHzMb4
191
246
  eva/vision/data/transforms/intensity/rand_scale_intensity.py,sha256=x3gYRRAFbZXFWgqvoUjT0sDFWT6zbhja3PJLXbOBtTg,2184
192
247
  eva/vision/data/transforms/intensity/rand_shift_intensity.py,sha256=5ngSHfHgJOR9KQykNKJhQMWhQYj781Mj_JKJ_ADchbM,2117
193
248
  eva/vision/data/transforms/intensity/scale_intensity_ranged.py,sha256=VLvYZYG6jQCuR5poJsAlhIFjw6VjPEpcDPKBlJTjYBM,1873
194
- eva/vision/data/transforms/spatial/__init__.py,sha256=k7C_p4fMZd7A00ikldAMsprYDedKrlMjKQB6BLA5InA,284
249
+ eva/vision/data/transforms/spatial/__init__.py,sha256=S2JwmBm98oPWLN497aYM-h1kyPU15Yfg9xPVTvzq6lg,355
195
250
  eva/vision/data/transforms/spatial/flip.py,sha256=jfRc-wPBvG58OtCNU3GrOkb57kcRddRqpwcAdCB0_No,2553
251
+ eva/vision/data/transforms/spatial/functional/__init__.py,sha256=OzJ_Hv3CJAvvTQsk6mo_IQS0MqPW2WQ6fwtWE3UQ_Xk,166
252
+ eva/vision/data/transforms/spatial/functional/resize.py,sha256=NBswLluIRs1cJP-dx5Kd3Z01gF57NjPXbtPGKNa0td0,949
253
+ eva/vision/data/transforms/spatial/resize.py,sha256=O7igA-x7jCutw5BE_5MXOEfCeLsZPUz9K2VEIekMCi4,2305
196
254
  eva/vision/data/transforms/spatial/rotate.py,sha256=FpMTAPWtgrG10yQ3R1_Ii6obPcn3boNWOuLhsblxUbQ,1793
197
255
  eva/vision/data/transforms/spatial/spacing.py,sha256=T1UhqK-OhhbLQxzejMyI8BQzYRF44PNc02Qap4nk1hY,2695
198
256
  eva/vision/data/transforms/utility/__init__.py,sha256=TjncS2aOgRJwjjRuIvmr4eRz2nKVg6b76tThp4UlzII,163
@@ -264,8 +322,8 @@ eva/vision/models/networks/decoders/segmentation/semantic/swin_unetr.py,sha256=e
264
322
  eva/vision/models/networks/decoders/segmentation/semantic/with_image.py,sha256=I5PyGKKo8DcXYcw4xlCFzuavRJNRrzGT-szpDidMPXI,3516
265
323
  eva/vision/models/networks/decoders/segmentation/typings.py,sha256=rY4CXp0MNF16SHnx9TgGjXI_r8bVGSqAWdR835hXndg,537
266
324
  eva/vision/models/wrappers/__init__.py,sha256=ogmr-eeVuGaOCcsuxSp6PGyauP2QqWTb8dGTtbC7lRU,210
267
- eva/vision/models/wrappers/from_registry.py,sha256=2vpKTkoa_CGjVLbhnUclstFzDfkXCqMxjdtxTk212HQ,1729
268
- eva/vision/models/wrappers/from_timm.py,sha256=Lkdibly4H_XNjl863YFBj10ZbSTN1onT2Bc6yV072m0,2334
325
+ eva/vision/models/wrappers/from_registry.py,sha256=aZTbPqlfbxvx5vmh2aUym9njTlEaFwmTL5fU2zPW0To,1761
326
+ eva/vision/models/wrappers/from_timm.py,sha256=vf5ZoEdh-QJW-wGD6PgpqkkgQzXgQ4lT1YIaI_kwnfU,2367
269
327
  eva/vision/utils/__init__.py,sha256=vaUovprE743SmyFH8l6uk4pYSWpI4zxn7lN0EwePTJI,96
270
328
  eva/vision/utils/colormap.py,sha256=sP1F0JCX3abZfFgdxEjLJO-LhNYKjXZvXxs03ZgrEvI,2876
271
329
  eva/vision/utils/convert.py,sha256=fqGmKrg5-JJLrTkTXB4YDcWTudXPrO1gGjsckVRUesU,1881
@@ -275,8 +333,8 @@ eva/vision/utils/io/image.py,sha256=IdOkr5MYqhYHz8U9drZ7wULTM3YHwCWSjZlu_Qdl4GQ,
275
333
  eva/vision/utils/io/mat.py,sha256=qpGifyjmpE0Xhv567Si7-zxKrgkgE0sywP70cHiLFGU,808
276
334
  eva/vision/utils/io/nifti.py,sha256=TFMgNhLqIK3sl3RjIRXEABM7FmSQjqVOwk1vXkuvX2w,4983
277
335
  eva/vision/utils/io/text.py,sha256=qYgfo_ZaDZWfG02NkVVYzo5QFySqdCCz5uLA9d-zXtI,701
278
- kaiko_eva-0.3.2.dist-info/METADATA,sha256=3OdB75bdgEKDkAhIh75c3WcpevnOsemYcMfBEG0MKy8,25704
279
- kaiko_eva-0.3.2.dist-info/WHEEL,sha256=9P2ygRxDrTJz3gsagc0Z96ukrxjr-LFBGOgv3AuKlCA,90
280
- kaiko_eva-0.3.2.dist-info/entry_points.txt,sha256=6CSLu9bmQYJSXEg8gbOzRhxH0AGs75BB-vPm3VvfcNE,88
281
- kaiko_eva-0.3.2.dist-info/licenses/LICENSE,sha256=e6AEzr7j_R-PYr2qLO-JwLn8y70jbVD3U2mxbRmwcI4,11338
282
- kaiko_eva-0.3.2.dist-info/RECORD,,
336
+ kaiko_eva-0.4.0.dist-info/METADATA,sha256=tw3KrpA3CqmTlDJ28SxkI_4t32IHcDE0YluzC3-xbq4,26017
337
+ kaiko_eva-0.4.0.dist-info/WHEEL,sha256=9P2ygRxDrTJz3gsagc0Z96ukrxjr-LFBGOgv3AuKlCA,90
338
+ kaiko_eva-0.4.0.dist-info/entry_points.txt,sha256=6CSLu9bmQYJSXEg8gbOzRhxH0AGs75BB-vPm3VvfcNE,88
339
+ kaiko_eva-0.4.0.dist-info/licenses/LICENSE,sha256=e6AEzr7j_R-PYr2qLO-JwLn8y70jbVD3U2mxbRmwcI4,11338
340
+ kaiko_eva-0.4.0.dist-info/RECORD,,
@@ -1,5 +0,0 @@
1
- """Collate functions API."""
2
-
3
- from eva.core.data.dataloaders.collate_fn.collate import text_collate_fn
4
-
5
- __all__ = ["text_collate_fn"]
@@ -1,24 +0,0 @@
1
- """Collate functions for text data."""
2
-
3
- from typing import Dict, List, Tuple
4
-
5
- import torch
6
-
7
-
8
- def text_collate_fn(
9
- batch: List[Tuple[str, torch.Tensor, Dict]],
10
- ) -> Tuple[List[str], torch.Tensor, List[Dict]]:
11
- """Collate function for text data that keeps texts as separate strings.
12
-
13
- Args:
14
- batch: List of tuples containing (text, target, metadata) from the dataset
15
-
16
- Returns:
17
- Tuple containing:
18
- - List of text strings
19
- - Batched tensor of targets
20
- - List of metadata dictionaries
21
- """
22
- texts, targets, metadata = zip(*batch, strict=False)
23
- targets = torch.stack(targets)
24
- return list(texts), targets, list(metadata)
@@ -1,85 +0,0 @@
1
- """LLM Text Module for Inference."""
2
-
3
- from typing import Any, List
4
-
5
- from lightning.pytorch.utilities.types import STEP_OUTPUT
6
- from loguru import logger
7
- from torch import nn
8
- from typing_extensions import override
9
-
10
- from eva.core.metrics import structs as metrics_lib
11
- from eva.core.models.modules import module
12
- from eva.core.models.modules.utils import batch_postprocess
13
- from eva.language.models.modules.typings import TEXT_BATCH
14
-
15
-
16
- class TextModule(module.ModelModule):
17
- """Text-based LLM module for inference.
18
-
19
- Uses LLM wrappers for text generation and supports evaluation using
20
- configurable metrics and post-processing transforms.
21
- """
22
-
23
- def __init__(
24
- self,
25
- model: nn.Module,
26
- prompt: str,
27
- metrics: metrics_lib.MetricsSchema | None = None,
28
- postprocess: batch_postprocess.BatchPostProcess | None = None,
29
- ) -> None:
30
- """Initializes the text inference module.
31
-
32
- Args:
33
- model: An LLM wrapper (PyTorch-compatible) for text generation.
34
- prompt: The prompt to use for generating text.
35
- metrics: Metrics schema for evaluation.
36
- postprocess: A helper function to post-process model outputs before evaluation.
37
- """
38
- super().__init__(metrics=metrics, postprocess=postprocess)
39
-
40
- self.model = model
41
- self.prompt = prompt
42
-
43
- @override
44
- def forward(self, prompts: List[str], *args: Any, **kwargs: Any) -> List[str]:
45
- """Generates text responses for a batch of prompts.
46
-
47
- Args:
48
- prompts: List of input texts to generate responses.
49
- args: Additional arguments.
50
- kwargs: Additional keyword arguments.
51
-
52
- Returns:
53
- List of generated responses.
54
- """
55
- return self.model(prompts)
56
-
57
- @override
58
- def validation_step(self, batch: TEXT_BATCH, *args: Any, **kwargs: Any) -> STEP_OUTPUT:
59
- """Validation step that runs batch inference and evaluates metrics.
60
-
61
- Args:
62
- batch: An input batch.
63
- args: Additional arguments.
64
- kwargs: Additional keyword arguments.
65
-
66
- Returns:
67
- Dictionary with predictions, ground truth, and evaluation metrics.
68
- """
69
- return self._batch_step(batch)
70
-
71
- def _batch_step(self, batch: TEXT_BATCH) -> STEP_OUTPUT:
72
- """Runs inference on a batch and evaluates model predictions.
73
-
74
- Args:
75
- batch: Input batch containing data, targets, and metadata.
76
-
77
- Returns:
78
- Dictionary with predictions, ground truth, and evaluation metrics.
79
- """
80
- data, targets, metadata = batch
81
- messages = [str(d) + "\n" + self.prompt for d in data]
82
- predictions = self(messages)
83
- logger.debug(f"Predictions: {predictions}")
84
- logger.debug(f"Targets: {targets}")
85
- return {"predictions": predictions, "targets": targets, "metadata": metadata}