learning-loop-node 0.13.1__tar.gz → 0.13.4__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.1 → learning_loop_node-0.13.4}/PKG-INFO +1 -1
  2. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/detector/detector_node.py +8 -3
  3. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/detector/inbox_filter/cam_observation_history.py +2 -2
  4. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/detector/outbox.py +11 -5
  5. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/trainer/conftest.py +4 -4
  6. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/trainer/trainer_logic_generic.py +1 -1
  7. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/pyproject.toml +1 -1
  8. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/README.md +0 -0
  9. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/__init__.py +0 -0
  10. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/annotation/__init__.py +0 -0
  11. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/annotation/annotator_logic.py +0 -0
  12. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/annotation/annotator_node.py +0 -0
  13. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/data_classes/__init__.py +0 -0
  14. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/data_classes/annotations.py +0 -0
  15. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/data_classes/detections.py +0 -0
  16. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/data_classes/general.py +0 -0
  17. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/data_classes/image_metadata.py +0 -0
  18. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/data_classes/socket_response.py +0 -0
  19. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/data_classes/training.py +0 -0
  20. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/data_exchanger.py +0 -0
  21. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/detector/__init__.py +0 -0
  22. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/detector/detector_logic.py +0 -0
  23. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/detector/inbox_filter/__init__.py +0 -0
  24. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/detector/inbox_filter/relevance_filter.py +0 -0
  25. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/detector/rest/__init__.py +0 -0
  26. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/detector/rest/about.py +0 -0
  27. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/detector/rest/backdoor_controls.py +0 -0
  28. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/detector/rest/detect.py +0 -0
  29. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/detector/rest/model_version_control.py +0 -0
  30. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/detector/rest/operation_mode.py +0 -0
  31. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/detector/rest/outbox_mode.py +0 -0
  32. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/detector/rest/upload.py +0 -0
  33. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/enums/__init__.py +0 -0
  34. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/enums/annotator.py +0 -0
  35. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/enums/detector.py +0 -0
  36. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/enums/general.py +0 -0
  37. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/enums/trainer.py +0 -0
  38. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/examples/novelty_score_updater.py +0 -0
  39. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/globals.py +0 -0
  40. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/helpers/__init__.py +0 -0
  41. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/helpers/environment_reader.py +0 -0
  42. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/helpers/gdrive_downloader.py +0 -0
  43. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/helpers/log_conf.py +0 -0
  44. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/helpers/misc.py +0 -0
  45. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/loop_communication.py +0 -0
  46. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/node.py +0 -0
  47. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/py.typed +0 -0
  48. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/rest.py +0 -0
  49. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/__init__.py +0 -0
  50. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/annotator/__init__.py +0 -0
  51. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/annotator/conftest.py +0 -0
  52. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/annotator/pytest.ini +0 -0
  53. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/annotator/test_annotator_node.py +0 -0
  54. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/detector/__init__.py +0 -0
  55. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/detector/conftest.py +0 -0
  56. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/detector/inbox_filter/__init__.py +0 -0
  57. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/detector/inbox_filter/test_observation.py +0 -0
  58. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/detector/inbox_filter/test_relevance_group.py +0 -0
  59. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/detector/inbox_filter/test_unexpected_observations_count.py +0 -0
  60. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/detector/pytest.ini +0 -0
  61. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/detector/test.jpg +0 -0
  62. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/detector/test_client_communication.py +0 -0
  63. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/detector/test_detector_node.py +0 -0
  64. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/detector/test_outbox.py +0 -0
  65. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/detector/test_relevance_filter.py +0 -0
  66. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/detector/testing_detector.py +0 -0
  67. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/general/__init__.py +0 -0
  68. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/general/conftest.py +0 -0
  69. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/general/pytest.ini +0 -0
  70. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/general/test_data/file_1.txt +0 -0
  71. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/general/test_data/file_2.txt +0 -0
  72. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/general/test_data/model.json +0 -0
  73. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/general/test_data_classes.py +0 -0
  74. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/general/test_downloader.py +0 -0
  75. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/general/test_learning_loop_node.py +0 -0
  76. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/test_helper.py +0 -0
  77. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/trainer/__init__.py +0 -0
  78. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/trainer/pytest.ini +0 -0
  79. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/trainer/state_helper.py +0 -0
  80. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/trainer/states/__init__.py +0 -0
  81. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/trainer/states/test_state_cleanup.py +0 -0
  82. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/trainer/states/test_state_detecting.py +0 -0
  83. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/trainer/states/test_state_download_train_model.py +0 -0
  84. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/trainer/states/test_state_prepare.py +0 -0
  85. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/trainer/states/test_state_sync_confusion_matrix.py +0 -0
  86. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/trainer/states/test_state_train.py +0 -0
  87. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/trainer/states/test_state_upload_detections.py +0 -0
  88. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/trainer/states/test_state_upload_model.py +0 -0
  89. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/trainer/test_errors.py +0 -0
  90. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/trainer/test_trainer_states.py +0 -0
  91. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/tests/trainer/testing_trainer_logic.py +0 -0
  92. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/trainer/__init__.py +0 -0
  93. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/trainer/downloader.py +0 -0
  94. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/trainer/exceptions.py +0 -0
  95. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/trainer/executor.py +0 -0
  96. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/trainer/io_helpers.py +0 -0
  97. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/trainer/rest/__init__.py +0 -0
  98. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/trainer/rest/backdoor_controls.py +0 -0
  99. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/trainer/test_executor.py +0 -0
  100. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/learning_loop_node/trainer/trainer_logic.py +0 -0
  101. {learning_loop_node-0.13.1 → learning_loop_node-0.13.4}/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.1
3
+ Version: 0.13.4
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
@@ -200,8 +200,11 @@ class DetectorNode(Node):
200
200
  """The DetectorNode acts as a SocketIO server. This method sets up the server and defines the event handlers."""
201
201
  # pylint: disable=unused-argument
202
202
 
203
- # Initialize the Socket.IO server
204
- self.sio = socketio.AsyncServer(async_mode='asgi')
203
+ # Initialize the Socket.IO server with 20MB buffer size
204
+ self.sio = socketio.AsyncServer(
205
+ async_mode='asgi',
206
+ max_http_buffer_size=2e7, # 20MB
207
+ )
205
208
  # Initialize and mount the ASGI app
206
209
  self.sio_app = socketio.ASGIApp(self.sio, socketio_path='/socket.io')
207
210
  self.mount('/ws', self.sio_app)
@@ -217,7 +220,8 @@ class DetectorNode(Node):
217
220
  camera_id=data.get('camera-id', None) or data.get('mac', None),
218
221
  tags=data.get('tags', []),
219
222
  source=data.get('source', None),
220
- autoupload=data.get('autoupload', None)
223
+ autoupload=data.get('autoupload', None),
224
+ creation_date=data.get('creation_date', None)
221
225
  )
222
226
  if det is None:
223
227
  return {'error': 'no model loaded'}
@@ -400,6 +404,7 @@ class DetectorNode(Node):
400
404
 
401
405
  self.log_status_on_change(status.state or 'None', status)
402
406
 
407
+ # NOTE: sending organization and project is no longer required!
403
408
  response = await self.sio_client.call('update_detector', (self.organization, self.project, jsonable_encoder(asdict(status))))
404
409
  if not response:
405
410
  self.socket_connection_broken = True
@@ -1,8 +1,8 @@
1
1
  import os
2
2
  from typing import List, Union
3
3
 
4
- from learning_loop_node.data_classes import (BoxDetection, ClassificationDetection, ImageMetadata, Observation,
5
- PointDetection, SegmentationDetection)
4
+ from ...data_classes import (BoxDetection, ClassificationDetection, ImageMetadata, Observation, PointDetection,
5
+ SegmentationDetection)
6
6
 
7
7
 
8
8
  class CamObservationHistory:
@@ -79,10 +79,10 @@ class Outbox():
79
79
  image_metadata.source = source or 'unknown'
80
80
  os.makedirs(tmp, exist_ok=True)
81
81
 
82
- with open(tmp + '/image.json', 'w') as f:
82
+ with open(tmp + f'/image_{identifier}.json', 'w') as f:
83
83
  json.dump(jsonable_encoder(asdict(image_metadata)), f)
84
84
 
85
- with open(tmp + '/image.jpg', 'wb') as f:
85
+ with open(tmp + f'/image_{identifier}.jpg', 'wb') as f:
86
86
  f.write(image)
87
87
 
88
88
  if os.path.exists(tmp):
@@ -141,8 +141,10 @@ class Outbox():
141
141
  # results in a post failure on the first run of the test in a docker environment (WTF)
142
142
 
143
143
  data: List[Tuple[str, Union[TextIOWrapper, BufferedReader]]] = []
144
- data = [('files', open(f'{item}/image.json', 'r')) for item in items]
145
- data += [('files', open(f'{item}/image.jpg', 'rb')) for item in items]
144
+ for item in items:
145
+ identifier = os.path.basename(item)
146
+ data.append(('files', open(f'{item}/image_{identifier}.json', 'r')))
147
+ data.append(('files', open(f'{item}/image_{identifier}.jpg', 'rb')))
146
148
 
147
149
  try:
148
150
  async with aiohttp.ClientSession() as session:
@@ -158,7 +160,11 @@ class Outbox():
158
160
  if response.status == 200:
159
161
  self.upload_counter += len(items)
160
162
  for item in items:
161
- shutil.rmtree(item, ignore_errors=True)
163
+ try:
164
+ shutil.rmtree(item)
165
+ self.log.debug('Deleted %s', item)
166
+ except Exception:
167
+ self.log.exception('Failed to delete %s', item)
162
168
  self.log.info('Uploaded %s images successfully', len(items))
163
169
 
164
170
  elif response.status == 422:
@@ -36,8 +36,8 @@ async def test_initialized_trainer_node():
36
36
  'model_variant': '',
37
37
  'hyperparameters': {
38
38
  'resolution': 800,
39
- 'flip_rl': False,
40
- 'flip_ud': False}
39
+ 'fliplr': 0.5,
40
+ 'flipud': 0.5}
41
41
  })
42
42
  await node._on_startup()
43
43
  yield node
@@ -59,8 +59,8 @@ async def test_initialized_trainer():
59
59
  'model_variant': '',
60
60
  'hyperparameters': {
61
61
  'resolution': 800,
62
- 'flip_rl': False,
63
- 'flip_ud': False}
62
+ 'fliplr': 0.5,
63
+ 'flipud': 0.5}
64
64
  })
65
65
  yield trainer
66
66
  try:
@@ -402,7 +402,7 @@ class TrainerLogicGeneric(ABC):
402
402
  """
403
403
 
404
404
  files = await self._get_latest_model_files()
405
- if files is None:
405
+ if files is None or len(files) == 0:
406
406
  raise CriticalError('Could not get latest model files. Training might have failed.')
407
407
 
408
408
  if isinstance(files, List):
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "learning_loop_node"
3
- version = "v0.13.1"
3
+ version = "v0.13.4"
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"