learning-loop-node 0.13.0__tar.gz → 0.13.2__tar.gz

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 (101) hide show
  1. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/PKG-INFO +1 -1
  2. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/detector/detector_logic.py +3 -2
  3. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/detector/detector_node.py +20 -9
  4. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/pyproject.toml +1 -1
  5. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/README.md +0 -0
  6. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/__init__.py +0 -0
  7. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/annotation/__init__.py +0 -0
  8. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/annotation/annotator_logic.py +0 -0
  9. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/annotation/annotator_node.py +0 -0
  10. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/data_classes/__init__.py +0 -0
  11. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/data_classes/annotations.py +0 -0
  12. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/data_classes/detections.py +0 -0
  13. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/data_classes/general.py +0 -0
  14. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/data_classes/image_metadata.py +0 -0
  15. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/data_classes/socket_response.py +0 -0
  16. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/data_classes/training.py +0 -0
  17. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/data_exchanger.py +0 -0
  18. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/detector/__init__.py +0 -0
  19. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/detector/inbox_filter/__init__.py +0 -0
  20. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/detector/inbox_filter/cam_observation_history.py +0 -0
  21. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/detector/inbox_filter/relevance_filter.py +0 -0
  22. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/detector/outbox.py +0 -0
  23. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/detector/rest/__init__.py +0 -0
  24. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/detector/rest/about.py +0 -0
  25. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/detector/rest/backdoor_controls.py +0 -0
  26. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/detector/rest/detect.py +0 -0
  27. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/detector/rest/model_version_control.py +0 -0
  28. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/detector/rest/operation_mode.py +0 -0
  29. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/detector/rest/outbox_mode.py +0 -0
  30. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/detector/rest/upload.py +0 -0
  31. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/enums/__init__.py +0 -0
  32. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/enums/annotator.py +0 -0
  33. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/enums/detector.py +0 -0
  34. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/enums/general.py +0 -0
  35. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/enums/trainer.py +0 -0
  36. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/examples/novelty_score_updater.py +0 -0
  37. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/globals.py +0 -0
  38. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/helpers/__init__.py +0 -0
  39. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/helpers/environment_reader.py +0 -0
  40. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/helpers/gdrive_downloader.py +0 -0
  41. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/helpers/log_conf.py +0 -0
  42. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/helpers/misc.py +0 -0
  43. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/loop_communication.py +0 -0
  44. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/node.py +0 -0
  45. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/py.typed +0 -0
  46. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/rest.py +0 -0
  47. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/__init__.py +0 -0
  48. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/annotator/__init__.py +0 -0
  49. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/annotator/conftest.py +0 -0
  50. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/annotator/pytest.ini +0 -0
  51. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/annotator/test_annotator_node.py +0 -0
  52. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/detector/__init__.py +0 -0
  53. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/detector/conftest.py +0 -0
  54. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/detector/inbox_filter/__init__.py +0 -0
  55. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/detector/inbox_filter/test_observation.py +0 -0
  56. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/detector/inbox_filter/test_relevance_group.py +0 -0
  57. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/detector/inbox_filter/test_unexpected_observations_count.py +0 -0
  58. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/detector/pytest.ini +0 -0
  59. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/detector/test.jpg +0 -0
  60. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/detector/test_client_communication.py +0 -0
  61. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/detector/test_detector_node.py +0 -0
  62. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/detector/test_outbox.py +0 -0
  63. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/detector/test_relevance_filter.py +0 -0
  64. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/detector/testing_detector.py +0 -0
  65. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/general/__init__.py +0 -0
  66. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/general/conftest.py +0 -0
  67. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/general/pytest.ini +0 -0
  68. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/general/test_data/file_1.txt +0 -0
  69. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/general/test_data/file_2.txt +0 -0
  70. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/general/test_data/model.json +0 -0
  71. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/general/test_data_classes.py +0 -0
  72. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/general/test_downloader.py +0 -0
  73. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/general/test_learning_loop_node.py +0 -0
  74. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/test_helper.py +0 -0
  75. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/trainer/__init__.py +0 -0
  76. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/trainer/conftest.py +0 -0
  77. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/trainer/pytest.ini +0 -0
  78. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/trainer/state_helper.py +0 -0
  79. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/trainer/states/__init__.py +0 -0
  80. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/trainer/states/test_state_cleanup.py +0 -0
  81. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/trainer/states/test_state_detecting.py +0 -0
  82. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/trainer/states/test_state_download_train_model.py +0 -0
  83. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/trainer/states/test_state_prepare.py +0 -0
  84. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/trainer/states/test_state_sync_confusion_matrix.py +0 -0
  85. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/trainer/states/test_state_train.py +0 -0
  86. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/trainer/states/test_state_upload_detections.py +0 -0
  87. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/trainer/states/test_state_upload_model.py +0 -0
  88. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/trainer/test_errors.py +0 -0
  89. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/trainer/test_trainer_states.py +0 -0
  90. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/tests/trainer/testing_trainer_logic.py +0 -0
  91. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/trainer/__init__.py +0 -0
  92. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/trainer/downloader.py +0 -0
  93. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/trainer/exceptions.py +0 -0
  94. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/trainer/executor.py +0 -0
  95. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/trainer/io_helpers.py +0 -0
  96. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/trainer/rest/__init__.py +0 -0
  97. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/trainer/rest/backdoor_controls.py +0 -0
  98. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/trainer/test_executor.py +0 -0
  99. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/trainer/trainer_logic.py +0 -0
  100. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/trainer/trainer_logic_generic.py +0 -0
  101. {learning_loop_node-0.13.0 → learning_loop_node-0.13.2}/learning_loop_node/trainer/trainer_node.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: learning-loop-node
3
- Version: 0.13.0
3
+ Version: 0.13.2
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
@@ -31,14 +31,15 @@ class DetectorLogic():
31
31
  logging.info('Loading model from %s', GLOBALS.data_folder)
32
32
  model_info = ModelInformation.load_from_disk(f'{GLOBALS.data_folder}/model')
33
33
  if model_info is None:
34
- logging.warning('No model found')
34
+ logging.error('No model found')
35
35
  self._model_info = None
36
- return
36
+ raise Exception('No model found')
37
37
  try:
38
38
  self._model_info = model_info
39
39
  self.init()
40
40
  logging.info('Successfully loaded model %s', self._model_info)
41
41
  except Exception:
42
+ self._model_info = None
42
43
  logging.error('Could not init model %s', model_info)
43
44
  raise
44
45
 
@@ -107,6 +107,8 @@ class DetectorNode(Node):
107
107
 
108
108
  async def set_model_version_mode(self, version_control_mode: str) -> None:
109
109
 
110
+ self.log.info('Setting model version mode to %s', version_control_mode)
111
+
110
112
  if version_control_mode == 'follow_loop':
111
113
  self.version_control = VersionMode.FollowLoop
112
114
  elif version_control_mode == 'pause':
@@ -215,7 +217,8 @@ class DetectorNode(Node):
215
217
  camera_id=data.get('camera-id', None) or data.get('mac', None),
216
218
  tags=data.get('tags', []),
217
219
  source=data.get('source', None),
218
- autoupload=data.get('autoupload', None)
220
+ autoupload=data.get('autoupload', None),
221
+ creation_date=data.get('creation_date', None)
219
222
  )
220
223
  if det is None:
221
224
  return {'error': 'no model loaded'}
@@ -324,13 +327,16 @@ class DetectorNode(Node):
324
327
  with step_into(GLOBALS.data_folder):
325
328
  model_symlink = 'model'
326
329
  target_model_folder = f'models/{self.target_model.version}'
327
- shutil.rmtree(target_model_folder, ignore_errors=True)
328
- os.makedirs(target_model_folder)
329
-
330
- await self.data_exchanger.download_model(target_model_folder,
331
- Context(organization=self.organization,
332
- project=self.project),
333
- self.target_model.id, self.detector_logic.model_format)
330
+ if not os.path.exists(target_model_folder):
331
+ os.makedirs(target_model_folder)
332
+ await self.data_exchanger.download_model(target_model_folder,
333
+ Context(organization=self.organization,
334
+ project=self.project),
335
+ self.target_model.id,
336
+ self.detector_logic.model_format)
337
+ self.log.info('Downloaded model %s', self.target_model.version)
338
+ else:
339
+ self.log.info('No need to download model %s (already exists)', self.target_model.version)
334
340
  try:
335
341
  os.unlink(model_symlink)
336
342
  os.remove(model_symlink)
@@ -339,7 +345,12 @@ class DetectorNode(Node):
339
345
  os.symlink(target_model_folder, model_symlink)
340
346
  self.log.info('Updated symlink for model to %s', os.readlink(model_symlink))
341
347
 
342
- self.detector_logic.load_model()
348
+ try:
349
+ self.detector_logic.load_model()
350
+ except Exception:
351
+ self.log.exception('Could not load model, will retry download on next check')
352
+ shutil.rmtree(target_model_folder, ignore_errors=True)
353
+ return
343
354
  try:
344
355
  await self.sync_status_with_learning_loop()
345
356
  except Exception:
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "learning_loop_node"
3
- version = "v0.13.0"
3
+ version = "v0.13.2"
4
4
  description = "Python Library for Nodes which connect to the Zauberzeug Learning Loop"
5
5
  authors = ["Zauberzeug GmbH <info@zauberzeug.com>"]
6
6
  license = "MIT"