learning-loop-node 0.13.7__py3-none-any.whl → 0.15.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 learning-loop-node might be problematic. Click here for more details.

Files changed (25) hide show
  1. learning_loop_node/data_classes/__init__.py +2 -2
  2. learning_loop_node/data_classes/image_metadata.py +5 -0
  3. learning_loop_node/data_classes/training.py +3 -2
  4. learning_loop_node/data_exchanger.py +3 -3
  5. learning_loop_node/detector/detector_logic.py +8 -5
  6. learning_loop_node/detector/detector_node.py +105 -44
  7. learning_loop_node/detector/inbox_filter/relevance_filter.py +11 -9
  8. learning_loop_node/detector/outbox.py +134 -44
  9. learning_loop_node/detector/rest/detect.py +3 -3
  10. learning_loop_node/detector/rest/upload.py +4 -3
  11. learning_loop_node/helpers/background_tasks.py +78 -0
  12. learning_loop_node/helpers/run.py +21 -0
  13. learning_loop_node/node.py +11 -4
  14. learning_loop_node/tests/annotator/conftest.py +9 -4
  15. learning_loop_node/tests/annotator/test_annotator_node.py +10 -2
  16. learning_loop_node/tests/detector/inbox_filter/test_unexpected_observations_count.py +4 -3
  17. learning_loop_node/tests/detector/test_client_communication.py +1 -23
  18. learning_loop_node/tests/detector/test_outbox.py +7 -16
  19. learning_loop_node/tests/detector/test_relevance_filter.py +3 -3
  20. learning_loop_node/tests/general/conftest.py +8 -2
  21. learning_loop_node/tests/trainer/conftest.py +2 -2
  22. learning_loop_node/trainer/trainer_logic_generic.py +16 -4
  23. {learning_loop_node-0.13.7.dist-info → learning_loop_node-0.15.0.dist-info}/METADATA +35 -38
  24. {learning_loop_node-0.13.7.dist-info → learning_loop_node-0.15.0.dist-info}/RECORD +25 -23
  25. {learning_loop_node-0.13.7.dist-info → learning_loop_node-0.15.0.dist-info}/WHEEL +0 -0
@@ -30,10 +30,10 @@ async def test_filter_is_used_by_node(test_detector_node: DetectorNode, autouplo
30
30
  assert test_detector_node.outbox.path.startswith('/tmp')
31
31
  assert len(get_outbox_files(test_detector_node.outbox)) == 0
32
32
 
33
- image = np.fromfile(file=test_image_path, dtype=np.uint8)
34
- _ = await test_detector_node.get_detections(image, '00:.....', tags=[], autoupload=autoupload)
33
+ image = bytes(np.fromfile(file=test_image_path, dtype=np.uint8))
34
+ _ = await test_detector_node.get_detections(image, tags=[], camera_id='00:.....', autoupload=autoupload)
35
35
  # NOTE adding second images with identical detections
36
- _ = await test_detector_node.get_detections(image, '00:.....', tags=[], autoupload=autoupload)
36
+ _ = await test_detector_node.get_detections(image, tags=[], camera_id='00:.....', autoupload=autoupload)
37
37
  await asyncio.sleep(.5) # files are stored asynchronously
38
38
 
39
39
  assert len(get_outbox_files(test_detector_node.outbox)) == expected_file_count, \
@@ -2,6 +2,7 @@ import asyncio
2
2
  import logging
3
3
  import os
4
4
  import shutil
5
+ import sys
5
6
 
6
7
  import pytest
7
8
 
@@ -15,7 +16,12 @@ from ...loop_communication import LoopCommunicator
15
16
  async def create_project_for_module():
16
17
 
17
18
  loop_communicator = LoopCommunicator()
18
- await loop_communicator.delete("/zauberzeug/projects/pytest_nodelib_general?keep_images=true")
19
+ try:
20
+ await loop_communicator.delete("/zauberzeug/projects/pytest_nodelib_general", timeout=10)
21
+ except Exception:
22
+ logging.warning("Failed to delete project pytest_nodelib_general")
23
+ sys.exit(1)
24
+
19
25
  await asyncio.sleep(1)
20
26
  project_configuration = {
21
27
  'project_name': 'pytest_nodelib_general', 'inbox': 0, 'annotate': 0, 'review': 0, 'complete': 3, 'image_style': 'beautiful',
@@ -23,7 +29,7 @@ async def create_project_for_module():
23
29
  'trainings': 1, 'box_detections': 3, 'box_annotations': 0}
24
30
  assert (await loop_communicator.post("/zauberzeug/projects/generator", json=project_configuration)).status_code == 200
25
31
  yield
26
- await loop_communicator.delete("/zauberzeug/projects/pytest_nodelib_general?keep_images=true")
32
+ await loop_communicator.delete("/zauberzeug/projects/pytest_nodelib_general", timeout=10)
27
33
  await loop_communicator.shutdown()
28
34
 
29
35
 
@@ -35,7 +35,7 @@ async def test_initialized_trainer_node():
35
35
  'training_number': 0,
36
36
  'model_variant': '',
37
37
  'hyperparameters': {
38
- 'resolution': 800,
38
+ 'resolution': 832,
39
39
  'fliplr': 0.5,
40
40
  'flipud': 0.5}
41
41
  })
@@ -58,7 +58,7 @@ async def test_initialized_trainer():
58
58
  'training_number': 0,
59
59
  'model_variant': '',
60
60
  'hyperparameters': {
61
- 'resolution': 800,
61
+ 'resolution': 832,
62
62
  'fliplr': 0.5,
63
63
  'flipud': 0.5}
64
64
  })
@@ -6,13 +6,25 @@ import sys
6
6
  import time
7
7
  from abc import ABC, abstractmethod
8
8
  from dataclasses import asdict
9
- from typing import TYPE_CHECKING, Callable, Coroutine, Dict, List, Optional
9
+ from typing import TYPE_CHECKING, Any, Callable, Coroutine, Dict, List, Optional
10
10
 
11
11
  from fastapi.encoders import jsonable_encoder
12
12
 
13
- from ..data_classes import Context, Errors, PretrainedModel, Training, TrainingOut, TrainingStateData, TrainingStatus
13
+ from ..data_classes import (
14
+ Context,
15
+ Errors,
16
+ PretrainedModel,
17
+ Training,
18
+ TrainingOut,
19
+ TrainingStateData,
20
+ TrainingStatus,
21
+ )
14
22
  from ..enums import TrainerState
15
- from ..helpers.misc import create_project_folder, delete_all_training_folders, is_valid_uuid4
23
+ from ..helpers.misc import (
24
+ create_project_folder,
25
+ delete_all_training_folders,
26
+ is_valid_uuid4,
27
+ )
16
28
  from .downloader import TrainingsDownloader
17
29
  from .exceptions import CriticalError, NodeNeedsRestartError
18
30
  from .io_helpers import ActiveTrainingIO, EnvironmentVars, LastTrainingIO
@@ -66,7 +78,7 @@ class TrainerLogicGeneric(ABC):
66
78
  return self._training
67
79
 
68
80
  @property
69
- def hyperparameters(self) -> dict:
81
+ def hyperparameters(self) -> Dict[str, Any]:
70
82
  assert self._training is not None, 'Training should have data'
71
83
  return self._training.hyperparameters
72
84
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: learning-loop-node
3
- Version: 0.13.7
3
+ Version: 0.15.0
4
4
  Summary: Python Library for Nodes which connect to the Zauberzeug Learning Loop
5
5
  Home-page: https://github.com/zauberzeug/learning_loop_node
6
6
  License: MIT
@@ -100,11 +100,16 @@ You can additionally provide the following camera parameters:
100
100
  - `autoupload`: configures auto-submission to the learning loop; `filtered` (default), `all`, `disabled` (example curl parameter `-H 'autoupload: all'`)
101
101
  - `camera-id`: a string which groups images for submission together (example curl parameter `-H 'camera-id: front_cam'`)
102
102
 
103
+ To use the socketio interface, the caller needs to connect to the detector node's socketio server and emit the `detect` or `batch_detect` event with the image data and image metadata. Example code can be found [in the rosys implementation](https://github.com/zauberzeug/rosys/blob/main/rosys/vision/detector_hardware.py).
104
+
103
105
  The detector also has a sio **upload endpoint** that can be used to upload images and detections to the learning loop. The function receives a json dictionary, with the following entries:
104
106
 
105
107
  - `image`: the image data in jpg format
106
108
  - `tags`: a list of strings. If not provided the tag is `picked_by_system`
107
109
  - `detections`: a dictionary representing the detections. UUIDs for the classes are automatically determined based on the category names. This field is optional. If not provided, no detections are uploaded.
110
+ - `source`: optional source identifier for the image
111
+ - `creation_date`: optional creation date for the image
112
+ - `upload_priority`: boolean flag to prioritize the upload (defaults to False)
108
113
 
109
114
  The endpoint returns None if the upload was successful and an error message otherwise.
110
115
 
@@ -187,58 +192,52 @@ Upload a model with
187
192
  The model should now be available for the format 'format_a'
188
193
  `curl "https://learning-loop.ai/api/zauberzeug/projects/demo/models?format=format_a"`
189
194
 
190
- ````
191
-
195
+ ```json
192
196
  {
193
- "models": [
194
- {
195
- "id": "3c20d807-f71c-40dc-a996-8a8968aa5431",
196
- "version": "4.0",
197
- "formats": [
198
- "format_a"
199
- ],
200
- "created": "2021-06-01T06:28:21.289092",
201
- "comment": "uploaded at 2021-06-01 06:28:21.288442",
202
- ...
197
+ "models": [
198
+ {
199
+ "id": "3c20d807-f71c-40dc-a996-8a8968aa5431",
200
+ "version": "4.0",
201
+ "formats": [
202
+ "format_a"
203
+ ],
204
+ "created": "2021-06-01T06:28:21.289092",
205
+ "comment": "uploaded at 2021-06-01 06:28:21.288442",
206
+ ...
207
+ }
208
+ ]
203
209
  }
204
- ]
205
- }
206
-
207
210
  ```
208
211
 
209
212
  but not in the format_b
210
213
  `curl "https://learning-loop.ai/api/zauberzeug/projects/demo/models?format=format_b"`
211
214
 
212
- ```
213
-
215
+ ```json
214
216
  {
215
- "models": []
217
+ "models": []
216
218
  }
217
-
218
219
  ```
219
220
 
220
221
  Connect the Node to the Learning Loop by simply starting the container.
221
222
  After a short time the converted model should be available as well.
222
223
  `curl https://learning-loop.ai/api/zauberzeug/projects/demo/models?format=format_b`
223
224
 
224
- ```
225
-
226
- {
227
- "models": [
225
+ ```json
228
226
  {
229
- "id": "3c20d807-f71c-40dc-a996-8a8968aa5431",
230
- "version": "4.0",
231
- "formats": [
232
- "format_a",
233
- "format_b",
234
- ],
235
- "created": "2021-06-01T06:28:21.289092",
236
- "comment": "uploaded at 2021-06-01 06:28:21.288442",
237
- ...
238
- }
239
- ]
227
+ "models": [
228
+ {
229
+ "id": "3c20d807-f71c-40dc-a996-8a8968aa5431",
230
+ "version": "4.0",
231
+ "formats": [
232
+ "format_a",
233
+ "format_b",
234
+ ],
235
+ "created": "2021-06-01T06:28:21.289092",
236
+ "comment": "uploaded at 2021-06-01 06:28:21.288442",
237
+ ...
238
+ }
239
+ ]
240
240
  }
241
-
242
241
  ```
243
242
 
244
243
  ## About Models (the currency between Nodes)
@@ -257,6 +256,4 @@ After a short time the converted model should be available as well.
257
256
  - Nodes add properties to `model.json`, which contains all the information which are needed by subsequent nodes. These are typically the properties:
258
257
  - `resolution`: resolution in which the model expects images (as `int`, since the resolution is mostly square - later, ` resolution_x`` resolution_y ` would also be conceivable or `resolutions` to give a list of possible resolutions)
259
258
  - `categories`: list of categories with name, id, (later also type), in the order in which they are used by the model -- this is neccessary to be robust about renamings
260
- ```
261
- ````
262
259
 
@@ -2,30 +2,30 @@ learning_loop_node/__init__.py,sha256=onN5s8-x_xBsCM6NLmJO0Ym1sJHeCFaGw8qb0oQZmz
2
2
  learning_loop_node/annotation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  learning_loop_node/annotation/annotator_logic.py,sha256=BTaopkJZkIf1CI5lfsVKsxbxoUIbDJrevavuQUT5e_c,1000
4
4
  learning_loop_node/annotation/annotator_node.py,sha256=Ac6tuiO-Ne8m8XLDBK_ucRhofiudRUIjL1nM-rkUkGE,4156
5
- learning_loop_node/data_classes/__init__.py,sha256=GUFbVDT8ywGUpEMhV4WZHwvD2yM9A0eAvPydHeq6gyA,1233
5
+ learning_loop_node/data_classes/__init__.py,sha256=ZFVeouHrQtonaEw6_S7TwKQUpgvldyv8P1M9IVrURpY,1267
6
6
  learning_loop_node/data_classes/annotations.py,sha256=NfMlTv2_5AfVY_JDM4tbjETFjSN2S2I2LJJPMMcDT50,966
7
7
  learning_loop_node/data_classes/detections.py,sha256=7vqcS0EK8cmDjRDckHlpSZDZ9YO6qajRmYvx-oxatFc,5425
8
8
  learning_loop_node/data_classes/general.py,sha256=r7fVfuQvbo8qOTT7zylgfM45TbIvYu8bkDIAZ3wszqA,7397
9
- learning_loop_node/data_classes/image_metadata.py,sha256=56nNSf_7aMlvKsJOG8vKCzJHcqKGHVRoULp85pJ2imA,1598
9
+ learning_loop_node/data_classes/image_metadata.py,sha256=YccDyHMbnOrRr4-9hHbCNBpuhlZem5M64c0ZbZXTASY,1764
10
10
  learning_loop_node/data_classes/socket_response.py,sha256=tIdt-oYf6ULoJIDYQCecNM9OtWR6_wJ9tL0Ksu83Vko,655
11
- learning_loop_node/data_classes/training.py,sha256=FFPsr2AA7ynYz39MLZaFJ0sF_9Axll5HHbAA8nnirp0,5726
12
- learning_loop_node/data_exchanger.py,sha256=2gV2epi24NQm8MgZKhi-sUNAP8CmcFLwihLagHxzKgA,9070
11
+ learning_loop_node/data_classes/training.py,sha256=TybwcCDf_NUaDUaOj30lPm-7Z3Qk9XFRibEX5qIv96Y,5737
12
+ learning_loop_node/data_exchanger.py,sha256=nd9JNPLn9amIeTcSIyUPpbE97ORAcb5yNphvmpgWSUQ,9095
13
13
  learning_loop_node/detector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- learning_loop_node/detector/detector_logic.py,sha256=s1EFLrk_SFvLJOsIj9b0lp-Oq0DgfVWxT6Q34Vmi_JE,2243
15
- learning_loop_node/detector/detector_node.py,sha256=svf4HsP7LjR_5aVRsqRzyJkdXWE_tNyHU4sNYJCpMO4,26334
14
+ learning_loop_node/detector/detector_logic.py,sha256=YmsEsqSr0CUUWKtSR7EFU92HA90NvdYiPZGDQKXJUxU,2462
15
+ learning_loop_node/detector/detector_node.py,sha256=ywbBOZE8jvOLG_Fa4wD9XOZtnDV2xTjmxutWWvF7jyo,29629
16
16
  learning_loop_node/detector/exceptions.py,sha256=C6KbNPlSbtfgDrZx2Hbhm7Suk9jVoR3fMRCO0CkrMsQ,196
17
17
  learning_loop_node/detector/inbox_filter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
18
  learning_loop_node/detector/inbox_filter/cam_observation_history.py,sha256=1PHgXRrhSQ34HSFw7mdX8ndRxHf_i1aP5nXXnrZxhAY,3312
19
- learning_loop_node/detector/inbox_filter/relevance_filter.py,sha256=NPEmrAtuGjIWCtHS0B3zDmnYWkhVFCLbd_7RUp08_AM,1372
20
- learning_loop_node/detector/outbox.py,sha256=i12X28FJka8HMm4iqE7SCODT1uCEtM53tIBul3uxKFw,8828
19
+ learning_loop_node/detector/inbox_filter/relevance_filter.py,sha256=rI46jL9ZuI0hiDVxWCfXllB8DlQyyewNs6oZ6MnglMc,1540
20
+ learning_loop_node/detector/outbox.py,sha256=KjQ2C8OokFtXtSOUKiYihADGI4QgkBX8QVRV109Bdr0,12716
21
21
  learning_loop_node/detector/rest/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  learning_loop_node/detector/rest/about.py,sha256=evHJ2svUZY_DFz0FSef5u9c5KW4Uc3GL7EbPinG9-dg,583
23
23
  learning_loop_node/detector/rest/backdoor_controls.py,sha256=ZNaFOvC0OLWNtcLiG-NIqS_y1kkLP4csgk3CHhp8Gis,885
24
- learning_loop_node/detector/rest/detect.py,sha256=ofJ3ysTarbCpiH1YAD6gSJbrDOzAcsLRuGxhr57dtk0,2503
24
+ learning_loop_node/detector/rest/detect.py,sha256=wYf9cCgtImMgnHbrcE6GMXE2aBopdZciKvGmc92ZCGw,2533
25
25
  learning_loop_node/detector/rest/model_version_control.py,sha256=P4FOG0U9HT6QtCoNt-1s1pT6drtgdVjGZWEuCAyuNmA,1370
26
26
  learning_loop_node/detector/rest/operation_mode.py,sha256=1_xfutA_6nzdb4Q_jZiHQ5m_wA83bcG5jSIy-sfNIvk,1575
27
27
  learning_loop_node/detector/rest/outbox_mode.py,sha256=H8coDNbgLGEfXmKQrhtXWeUHBAHpnrdZktuHXQz0xis,1148
28
- learning_loop_node/detector/rest/upload.py,sha256=5YWY0Ku4duZqKd6tjyJzq-Ga83o2UYb1VmzuxBIgo0w,1061
28
+ learning_loop_node/detector/rest/upload.py,sha256=GMDKyN3UNfzsKq5GtBBlv828lht0bztgqRqT_PQHkZM,1250
29
29
  learning_loop_node/enums/__init__.py,sha256=tjSrhztIQ8W656_QuXfTbbVNtH_wDXP5hpYZgzfgRhc,285
30
30
  learning_loop_node/enums/annotator.py,sha256=mtTAw-8LJIrHcYkBjYHCZuhYEEHS6QzSK8k6BhLusvQ,285
31
31
  learning_loop_node/enums/detector.py,sha256=Qvm5LWWR9BfsDxHEQ8YzaPaUuSmp4BescYuV4X4ikwE,512
@@ -34,34 +34,36 @@ learning_loop_node/enums/trainer.py,sha256=VaD63guLO4aKgVfXT0EryPlXKQGegSET3Cp4R
34
34
  learning_loop_node/examples/novelty_score_updater.py,sha256=1DRgM9lxjFV-q2JvGDDsNLz_ic_rhEZ9wc6ZdjcxwPE,2038
35
35
  learning_loop_node/globals.py,sha256=tgw_8RYOipPV9aYlyUhYtXfUxvJKRvfUk6u-qVAtZmY,174
36
36
  learning_loop_node/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
+ learning_loop_node/helpers/background_tasks.py,sha256=sNKyHyk9J5vNn-0GG1OzNJbB-F7GXGcbCWKE3MbRrno,3346
37
38
  learning_loop_node/helpers/environment_reader.py,sha256=6DxDJecLHxiGczByhyVa_JssAwwft7vuNCGaEzoSY2I,1662
38
39
  learning_loop_node/helpers/gdrive_downloader.py,sha256=zeYJciTAJVRpu_eFjwgYLCpIa6hU1d71anqEBb564Rk,1145
39
40
  learning_loop_node/helpers/log_conf.py,sha256=hqVAa_9NnYEU6N0dcOKmph82p7MpgKqeF_eomTLYzWY,961
40
41
  learning_loop_node/helpers/misc.py,sha256=J29iBmsEUAraKKDN1m1NKiHQ3QrP5ub5HBU6cllSP2g,7384
42
+ learning_loop_node/helpers/run.py,sha256=_uox-j3_K_bL3yCAwy3JYSOiIxrnhzVxyxWpCe8_J9U,876
41
43
  learning_loop_node/loop_communication.py,sha256=opulqBKRLXlUQgjA3t0pg8CNA-JXJRCPPUspRxRuuGw,7556
42
- learning_loop_node/node.py,sha256=IRV81q1G3-A6_BLNqB3NBT7T_dN5OXegBoM9JHMJuLM,11030
44
+ learning_loop_node/node.py,sha256=-Tw8kbvDKm8bPMm51MsFEOQKxPJx3n6DZ65cWGVQ5Zw,11262
43
45
  learning_loop_node/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
46
  learning_loop_node/rest.py,sha256=omwlRHLnyG-kgCBVnZDk5_SAPobL9g7slWeX21wsPGw,1551
45
47
  learning_loop_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
48
  learning_loop_node/tests/annotator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
- learning_loop_node/tests/annotator/conftest.py,sha256=G4ZvdZUdvPp9bYCzg3eEVkGCeXn9INZ3AcN7d5CyLkU,1931
49
+ learning_loop_node/tests/annotator/conftest.py,sha256=e83I8WNAUgCFmum1GCx_nSjP9uwAoPIwPk72elypNQY,2098
48
50
  learning_loop_node/tests/annotator/pytest.ini,sha256=8QdjmawLy1zAzXrJ88or1kpFDhJw0W5UOnDfGGs_igU,262
49
- learning_loop_node/tests/annotator/test_annotator_node.py,sha256=UWRXRSBc1e795ftkp7xrEXbyR4LYvFDDHRpZGqC3vr8,1974
51
+ learning_loop_node/tests/annotator/test_annotator_node.py,sha256=AuTqFvFyQYuxEdkNmjBZqBB7RYRgpoSuDsi7SjBVHfo,1997
50
52
  learning_loop_node/tests/detector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
53
  learning_loop_node/tests/detector/conftest.py,sha256=gut-RaacarhWJNCvGEz7O7kj3cS7vJ4SvAxCmR87PIw,5263
52
54
  learning_loop_node/tests/detector/inbox_filter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
55
  learning_loop_node/tests/detector/inbox_filter/test_observation.py,sha256=k4WYdvnuV7d_r7zI4M2aA8WuBjm0aycQ0vj1rGE2q4w,1370
54
56
  learning_loop_node/tests/detector/inbox_filter/test_relevance_group.py,sha256=r-wABFQVsTNTjv7vYGr8wbHfOWy43F_B14ZDWHfiZ-A,7613
55
- learning_loop_node/tests/detector/inbox_filter/test_unexpected_observations_count.py,sha256=3KKwf-J9oJRMIuuVju2vT9IM9vWhKvswPiXJI8KxmcU,1661
57
+ learning_loop_node/tests/detector/inbox_filter/test_unexpected_observations_count.py,sha256=JbUnPZVjzdtAlp6cTZVAdXUluQYNueGU9eITNJKY-tU,1710
56
58
  learning_loop_node/tests/detector/pytest.ini,sha256=8QdjmawLy1zAzXrJ88or1kpFDhJw0W5UOnDfGGs_igU,262
57
59
  learning_loop_node/tests/detector/test.jpg,sha256=msA-vHPmvPiro_D102Qmn1fn4vNfooqYYEXPxZUmYpk,161390
58
- learning_loop_node/tests/detector/test_client_communication.py,sha256=PUjnWnY-9RCZe-gqrtWf3o0ylCNH3WuzHoL7v3eAjAQ,8984
60
+ learning_loop_node/tests/detector/test_client_communication.py,sha256=cVviUmAwbLY3LsJcY-D3ve-Jwxk9WVOrVupeh-PdKtA,8013
59
61
  learning_loop_node/tests/detector/test_detector_node.py,sha256=0ZMV6coAvdq-nH8CwY9_LR2tUcH9VLcAB1CWuwHQMpo,3023
60
- learning_loop_node/tests/detector/test_outbox.py,sha256=IfCz4iBmYA4bm3TK4q2NmWyzQCwZWhUbBrKQNHGxZM4,3007
61
- learning_loop_node/tests/detector/test_relevance_filter.py,sha256=ZKcCstFWCDxJzKdVlAe8E6sZzv5NiH8mADhaZjokHoU,2052
62
+ learning_loop_node/tests/detector/test_outbox.py,sha256=8L2k792oBhS82fnw2D7sw-Kh1vok_-4PzGjrK7r1WpM,2629
63
+ learning_loop_node/tests/detector/test_relevance_filter.py,sha256=7oTXW4AuObk7NxMqGSwnjcspH3-QUbSdCYlz9hvzV78,2079
62
64
  learning_loop_node/tests/detector/testing_detector.py,sha256=MZajybyzISz2G1OENfLHgZhBcLCYzTR4iN9JkWpq5-s,551
63
65
  learning_loop_node/tests/general/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
- learning_loop_node/tests/general/conftest.py,sha256=oVuE-XZfUPjOXE8KLJgDbIMKIF9Mmgfna2rlupC44TE,2298
66
+ learning_loop_node/tests/general/conftest.py,sha256=kEtkuVA2wgny-YBkLDn7Ff5j6ShOPghQUU0cH9IIl_8,2430
65
67
  learning_loop_node/tests/general/pytest.ini,sha256=8QdjmawLy1zAzXrJ88or1kpFDhJw0W5UOnDfGGs_igU,262
66
68
  learning_loop_node/tests/general/test_data/file_1.txt,sha256=Lis06nfvbFPVCBZyEgQlfI_Nle2YDq1GQBlYvEfFtxw,19
67
69
  learning_loop_node/tests/general/test_data/file_2.txt,sha256=Xp8EETGhZBdVAgb4URowSSpOytwwwJdV0Renkdur7R8,19
@@ -71,7 +73,7 @@ learning_loop_node/tests/general/test_downloader.py,sha256=y4GcUyR0OAfrwltd6eyQg
71
73
  learning_loop_node/tests/general/test_learning_loop_node.py,sha256=SZd-VChpWnnsPN46pr4E_LL3ZevYx6psU-AWdVeOFpQ,770
72
74
  learning_loop_node/tests/test_helper.py,sha256=Xajn6BWJqeD36YAETwdcJd6awY2NPmaOis3gWgFc97k,2909
73
75
  learning_loop_node/tests/trainer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
- learning_loop_node/tests/trainer/conftest.py,sha256=F8b8cVJeDRG08OufAE4TuG4Dm-ViSyK_PzM2DrHUzJQ,3660
76
+ learning_loop_node/tests/trainer/conftest.py,sha256=eJUUBVRTmwcEooEN29hIa3eNuo0ogAPNn7Vqs9FSRDM,3660
75
77
  learning_loop_node/tests/trainer/pytest.ini,sha256=8QdjmawLy1zAzXrJ88or1kpFDhJw0W5UOnDfGGs_igU,262
76
78
  learning_loop_node/tests/trainer/state_helper.py,sha256=MDe9opeKruip74FoRFff8MSWGiQNFqDpPtIEIbgPnFc,919
77
79
  learning_loop_node/tests/trainer/states/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -95,8 +97,8 @@ learning_loop_node/trainer/rest/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
95
97
  learning_loop_node/trainer/rest/backdoor_controls.py,sha256=ZnK8ypY5r_q0-YZbtaOxhQThzuZvMsQHM5gJGESd_dE,5131
96
98
  learning_loop_node/trainer/test_executor.py,sha256=6BVGDN_6f5GEMMEvDLSG1yzMybSvgXaP5uYpSfsVPP0,2224
97
99
  learning_loop_node/trainer/trainer_logic.py,sha256=eK-01qZzi10UjLMCQX8vy5eW2FoghPj3rzzDC-s3Si4,8792
98
- learning_loop_node/trainer/trainer_logic_generic.py,sha256=RQqon8JIVzxaNh0KdEe6tMxebsY0DgZllEohHR-AgqU,26846
100
+ learning_loop_node/trainer/trainer_logic_generic.py,sha256=InEheL0oWwQNa4E6gyt1NAgjBZCetrP-kZHL3LAAIRs,26911
99
101
  learning_loop_node/trainer/trainer_node.py,sha256=Dl4ZQAjjXQggibeBjvhXAoFClw1ZX2Kkt3v_fjrJnCI,4508
100
- learning_loop_node-0.13.7.dist-info/METADATA,sha256=X408fRS2UiAjUgqlpo-zkJNqkJgsjvtn56jq4rdgVQE,12908
101
- learning_loop_node-0.13.7.dist-info/WHEEL,sha256=WGfLGfLX43Ei_YORXSnT54hxFygu34kMpcQdmgmEwCQ,88
102
- learning_loop_node-0.13.7.dist-info/RECORD,,
102
+ learning_loop_node-0.15.0.dist-info/METADATA,sha256=WuE54Oj2Jc2fSkuvmIFQW5y_TKGZ9b81W87JQE6HJTU,13509
103
+ learning_loop_node-0.15.0.dist-info/WHEEL,sha256=WGfLGfLX43Ei_YORXSnT54hxFygu34kMpcQdmgmEwCQ,88
104
+ learning_loop_node-0.15.0.dist-info/RECORD,,