dlouapre HF Staff commited on
Commit
48cbeab
·
1 Parent(s): a2f8318

Improving the logging when tools are not properly found or loaded.

Browse files
src/reachy_mini_conversation_app/tools/core_tools.py CHANGED
@@ -124,6 +124,7 @@ def _load_profile_tools() -> None:
124
  # Import each tool
125
  for tool_name in tool_names:
126
  loaded = False
 
127
 
128
  # Try profile-local tool first
129
  try:
@@ -131,10 +132,23 @@ def _load_profile_tools() -> None:
131
  importlib.import_module(profile_tool_module)
132
  logger.info(f"✓ Loaded profile-local tool: {tool_name}")
133
  loaded = True
134
- except ModuleNotFoundError:
135
- pass # Not in profile directory, try shared tools
 
 
 
 
 
 
 
 
 
 
 
136
  except Exception as e:
137
- logger.warning(f"Error loading profile-local tool {tool_name}: {e}")
 
 
138
 
139
  # Try shared tools library if not found in profile
140
  if not loaded:
@@ -144,9 +158,17 @@ def _load_profile_tools() -> None:
144
  logger.info(f"✓ Loaded shared tool: {tool_name}")
145
  loaded = True
146
  except ModuleNotFoundError:
147
- logger.warning(f"⚠ Tool '{tool_name}' not found in profile or shared tools")
 
 
 
 
 
 
 
148
  except Exception as e:
149
- logger.warning(f"Error loading shared tool {tool_name}: {e}")
 
150
 
151
 
152
  def _initialize_tools() -> None:
 
124
  # Import each tool
125
  for tool_name in tool_names:
126
  loaded = False
127
+ profile_error = None
128
 
129
  # Try profile-local tool first
130
  try:
 
132
  importlib.import_module(profile_tool_module)
133
  logger.info(f"✓ Loaded profile-local tool: {tool_name}")
134
  loaded = True
135
+ except ModuleNotFoundError as e:
136
+ # Check if it's the tool module itself that's missing (expected) or a dependency
137
+ if tool_name in str(e):
138
+ pass # Tool not in profile directory, try shared tools
139
+ else:
140
+ # Missing import dependency within the tool file
141
+ profile_error = f"Missing dependency: {e}"
142
+ logger.error(f"❌ Failed to load profile-local tool '{tool_name}': {profile_error}")
143
+ logger.error(f" Module path: {profile_tool_module}")
144
+ except ImportError as e:
145
+ profile_error = f"Import error: {e}"
146
+ logger.error(f"❌ Failed to load profile-local tool '{tool_name}': {profile_error}")
147
+ logger.error(f" Module path: {profile_tool_module}")
148
  except Exception as e:
149
+ profile_error = f"{type(e).__name__}: {e}"
150
+ logger.error(f"❌ Failed to load profile-local tool '{tool_name}': {profile_error}")
151
+ logger.error(f" Module path: {profile_tool_module}")
152
 
153
  # Try shared tools library if not found in profile
154
  if not loaded:
 
158
  logger.info(f"✓ Loaded shared tool: {tool_name}")
159
  loaded = True
160
  except ModuleNotFoundError:
161
+ if profile_error:
162
+ # Already logged error from profile attempt
163
+ logger.error(f"❌ Tool '{tool_name}' also not found in shared tools")
164
+ else:
165
+ logger.warning(f"⚠️ Tool '{tool_name}' not found in profile or shared tools")
166
+ except ImportError as e:
167
+ logger.error(f"❌ Failed to load shared tool '{tool_name}': Import error: {e}")
168
+ logger.error(f" Module path: {shared_tool_module}")
169
  except Exception as e:
170
+ logger.error(f" Failed to load shared tool '{tool_name}': {type(e).__name__}: {e}")
171
+ logger.error(f" Module path: {shared_tool_module}")
172
 
173
 
174
  def _initialize_tools() -> None:
uv.lock CHANGED
@@ -379,6 +379,15 @@ wheels = [
379
  { url = "https://files.pythonhosted.org/packages/92/15/5e713098a085f970ccf88550194d277d244464d7b3a7365ad92acb4b6dc1/av-16.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:6368d4ff153d75469d2a3217bc403630dc870a72fe0a014d9135de550d731a86", size = 32460624, upload-time = "2025-10-13T12:28:48.767Z" },
380
  ]
381
 
 
 
 
 
 
 
 
 
 
382
  [[package]]
383
  name = "brotli"
384
  version = "1.1.0"
@@ -540,6 +549,15 @@ wheels = [
540
  { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" },
541
  ]
542
 
 
 
 
 
 
 
 
 
 
543
  [[package]]
544
  name = "charset-normalizer"
545
  version = "3.4.4"
@@ -917,6 +935,15 @@ wheels = [
917
  { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" },
918
  ]
919
 
 
 
 
 
 
 
 
 
 
920
  [[package]]
921
  name = "distro"
922
  version = "1.9.0"
@@ -962,7 +989,7 @@ name = "exceptiongroup"
962
  version = "1.3.0"
963
  source = { registry = "https://pypi.org/simple" }
964
  dependencies = [
965
- { name = "typing-extensions", marker = "python_full_version < '3.12'" },
966
  ]
967
  sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" }
968
  wheels = [
@@ -1431,6 +1458,15 @@ wheels = [
1431
  { url = "https://files.pythonhosted.org/packages/39/7b/bb06b061991107cd8783f300adff3e7b7f284e330fd82f507f2a1417b11d/huggingface_hub-0.34.4-py3-none-any.whl", hash = "sha256:9b365d781739c93ff90c359844221beef048403f1bc1f1c123c191257c3c890a", size = 561452, upload-time = "2025-08-08T09:14:50.159Z" },
1432
  ]
1433
 
 
 
 
 
 
 
 
 
 
1434
  [[package]]
1435
  name = "idna"
1436
  version = "3.11"
@@ -2428,6 +2464,15 @@ wheels = [
2428
  { url = "https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec", size = 2034406, upload-time = "2025-05-29T11:35:04.961Z" },
2429
  ]
2430
 
 
 
 
 
 
 
 
 
 
2431
  [[package]]
2432
  name = "num2words"
2433
  version = "0.5.14"
@@ -2571,7 +2616,7 @@ name = "nvidia-cudnn-cu12"
2571
  version = "9.10.2.21"
2572
  source = { registry = "https://pypi.org/simple" }
2573
  dependencies = [
2574
- { name = "nvidia-cublas-cu12" },
2575
  ]
2576
  wheels = [
2577
  { url = "https://files.pythonhosted.org/packages/ba/51/e123d997aa098c61d029f76663dedbfb9bc8dcf8c60cbd6adbe42f76d049/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:949452be657fa16687d0930933f032835951ef0892b37d2d53824d1a84dc97a8", size = 706758467, upload-time = "2025-06-06T21:54:08.597Z" },
@@ -2582,7 +2627,7 @@ name = "nvidia-cufft-cu12"
2582
  version = "11.3.3.83"
2583
  source = { registry = "https://pypi.org/simple" }
2584
  dependencies = [
2585
- { name = "nvidia-nvjitlink-cu12" },
2586
  ]
2587
  wheels = [
2588
  { url = "https://files.pythonhosted.org/packages/1f/13/ee4e00f30e676b66ae65b4f08cb5bcbb8392c03f54f2d5413ea99a5d1c80/nvidia_cufft_cu12-11.3.3.83-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d2dd21ec0b88cf61b62e6b43564355e5222e4a3fb394cac0db101f2dd0d4f74", size = 193118695, upload-time = "2025-03-07T01:45:27.821Z" },
@@ -2609,9 +2654,9 @@ name = "nvidia-cusolver-cu12"
2609
  version = "11.7.3.90"
2610
  source = { registry = "https://pypi.org/simple" }
2611
  dependencies = [
2612
- { name = "nvidia-cublas-cu12" },
2613
- { name = "nvidia-cusparse-cu12" },
2614
- { name = "nvidia-nvjitlink-cu12" },
2615
  ]
2616
  wheels = [
2617
  { url = "https://files.pythonhosted.org/packages/85/48/9a13d2975803e8cf2777d5ed57b87a0b6ca2cc795f9a4f59796a910bfb80/nvidia_cusolver_cu12-11.7.3.90-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4376c11ad263152bd50ea295c05370360776f8c3427b30991df774f9fb26c450", size = 267506905, upload-time = "2025-03-07T01:47:16.273Z" },
@@ -2622,7 +2667,7 @@ name = "nvidia-cusparse-cu12"
2622
  version = "12.5.8.93"
2623
  source = { registry = "https://pypi.org/simple" }
2624
  dependencies = [
2625
- { name = "nvidia-nvjitlink-cu12" },
2626
  ]
2627
  wheels = [
2628
  { url = "https://files.pythonhosted.org/packages/c2/f5/e1854cb2f2bcd4280c44736c93550cc300ff4b8c95ebe370d0aa7d2b473d/nvidia_cusparse_cu12-12.5.8.93-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1ec05d76bbbd8b61b06a80e1eaf8cf4959c3d4ce8e711b65ebd0443bb0ebb13b", size = 288216466, upload-time = "2025-03-07T01:48:13.779Z" },
@@ -3046,6 +3091,22 @@ wheels = [
3046
  { url = "https://files.pythonhosted.org/packages/a8/87/77cc11c7a9ea9fd05503def69e3d18605852cd0d4b0d3b8f15bbeb3ef1d1/pooch-1.8.2-py3-none-any.whl", hash = "sha256:3529a57096f7198778a5ceefd5ac3ef0e4d06a6ddaf9fc2d609b806f25302c47", size = 64574, upload-time = "2024-06-06T16:53:44.343Z" },
3047
  ]
3048
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3049
  [[package]]
3050
  name = "propcache"
3051
  version = "0.4.1"
@@ -3514,6 +3575,20 @@ wheels = [
3514
  { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750, upload-time = "2025-09-04T14:34:20.226Z" },
3515
  ]
3516
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3517
  [[package]]
3518
  name = "python-dateutil"
3519
  version = "2.9.0.post0"
@@ -3688,8 +3763,11 @@ yolo-vision = [
3688
  [package.dev-dependencies]
3689
  dev = [
3690
  { name = "mypy" },
 
3691
  { name = "pytest" },
 
3692
  { name = "ruff" },
 
3693
  ]
3694
 
3695
  [package.metadata]
@@ -3698,20 +3776,23 @@ requires-dist = [
3698
  { name = "fastrtc", specifier = ">=0.0.33" },
3699
  { name = "gradio", specifier = ">=5.49.0" },
3700
  { name = "huggingface-hub", specifier = ">=0.34.4" },
 
3701
  { name = "mediapipe", marker = "extra == 'mediapipe-vision'", specifier = ">=0.10.14" },
 
3702
  { name = "num2words", marker = "extra == 'local-vision'" },
3703
  { name = "openai", specifier = ">=2.1" },
3704
  { name = "opencv-python", specifier = ">=4.12.0.88" },
3705
  { name = "python-dotenv" },
3706
  { name = "reachy-mini", specifier = ">=1.0.0rc4" },
3707
- { name = "reachy-mini-conversation-app", extras = ["local-vision"], marker = "extra == 'all-vision'" },
3708
- { name = "reachy-mini-conversation-app", extras = ["mediapipe-vision"], marker = "extra == 'all-vision'" },
3709
- { name = "reachy-mini-conversation-app", extras = ["yolo-vision"], marker = "extra == 'all-vision'" },
3710
  { name = "reachy-mini-dances-library" },
3711
  { name = "reachy-mini-toolbox" },
 
3712
  { name = "supervision", marker = "extra == 'yolo-vision'" },
 
3713
  { name = "torch", marker = "extra == 'local-vision'" },
 
3714
  { name = "transformers", marker = "extra == 'local-vision'" },
 
3715
  { name = "ultralytics", marker = "extra == 'yolo-vision'" },
3716
  ]
3717
  provides-extras = ["local-vision", "yolo-vision", "mediapipe-vision", "all-vision"]
@@ -3719,8 +3800,11 @@ provides-extras = ["local-vision", "yolo-vision", "mediapipe-vision", "all-visio
3719
  [package.metadata.requires-dev]
3720
  dev = [
3721
  { name = "mypy", specifier = "==1.18.2" },
 
3722
  { name = "pytest" },
 
3723
  { name = "ruff", specifier = "==0.12.0" },
 
3724
  ]
3725
 
3726
  [[package]]
@@ -4638,6 +4722,18 @@ wheels = [
4638
  { url = "https://files.pythonhosted.org/packages/78/64/7713ffe4b5983314e9d436a90d5bd4f63b6054e2aca783a3cfc44cb95bbf/typer-0.20.0-py3-none-any.whl", hash = "sha256:5b463df6793ec1dca6213a3cf4c0f03bc6e322ac5e16e13ddd622a889489784a", size = 47028, upload-time = "2025-10-20T17:03:47.617Z" },
4639
  ]
4640
 
 
 
 
 
 
 
 
 
 
 
 
 
4641
  [[package]]
4642
  name = "typing-extensions"
4643
  version = "4.15.0"
@@ -4782,6 +4878,21 @@ wheels = [
4782
  { url = "https://files.pythonhosted.org/packages/e4/16/c1fd27e9549f3c4baf1dc9c20c456cd2f822dbf8de9f463824b0c0357e06/uvloop-0.22.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6cde23eeda1a25c75b2e07d39970f3374105d5eafbaab2a4482be82f272d5a5e", size = 4296730, upload-time = "2025-10-16T22:17:00.744Z" },
4783
  ]
4784
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4785
  [[package]]
4786
  name = "watchfiles"
4787
  version = "1.1.1"
 
379
  { url = "https://files.pythonhosted.org/packages/92/15/5e713098a085f970ccf88550194d277d244464d7b3a7365ad92acb4b6dc1/av-16.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:6368d4ff153d75469d2a3217bc403630dc870a72fe0a014d9135de550d731a86", size = 32460624, upload-time = "2025-10-13T12:28:48.767Z" },
380
  ]
381
 
382
+ [[package]]
383
+ name = "backports-asyncio-runner"
384
+ version = "1.2.0"
385
+ source = { registry = "https://pypi.org/simple" }
386
+ sdist = { url = "https://files.pythonhosted.org/packages/8e/ff/70dca7d7cb1cbc0edb2c6cc0c38b65cba36cccc491eca64cabd5fe7f8670/backports_asyncio_runner-1.2.0.tar.gz", hash = "sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162", size = 69893, upload-time = "2025-07-02T02:27:15.685Z" }
387
+ wheels = [
388
+ { url = "https://files.pythonhosted.org/packages/a0/59/76ab57e3fe74484f48a53f8e337171b4a2349e506eabe136d7e01d059086/backports_asyncio_runner-1.2.0-py3-none-any.whl", hash = "sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5", size = 12313, upload-time = "2025-07-02T02:27:14.263Z" },
389
+ ]
390
+
391
  [[package]]
392
  name = "brotli"
393
  version = "1.1.0"
 
549
  { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" },
550
  ]
551
 
552
+ [[package]]
553
+ name = "cfgv"
554
+ version = "3.4.0"
555
+ source = { registry = "https://pypi.org/simple" }
556
+ sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114, upload-time = "2023-08-12T20:38:17.776Z" }
557
+ wheels = [
558
+ { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249, upload-time = "2023-08-12T20:38:16.269Z" },
559
+ ]
560
+
561
  [[package]]
562
  name = "charset-normalizer"
563
  version = "3.4.4"
 
935
  { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" },
936
  ]
937
 
938
+ [[package]]
939
+ name = "distlib"
940
+ version = "0.4.0"
941
+ source = { registry = "https://pypi.org/simple" }
942
+ sdist = { url = "https://files.pythonhosted.org/packages/96/8e/709914eb2b5749865801041647dc7f4e6d00b549cfe88b65ca192995f07c/distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d", size = 614605, upload-time = "2025-07-17T16:52:00.465Z" }
943
+ wheels = [
944
+ { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047, upload-time = "2025-07-17T16:51:58.613Z" },
945
+ ]
946
+
947
  [[package]]
948
  name = "distro"
949
  version = "1.9.0"
 
989
  version = "1.3.0"
990
  source = { registry = "https://pypi.org/simple" }
991
  dependencies = [
992
+ { name = "typing-extensions", marker = "python_full_version < '3.11'" },
993
  ]
994
  sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" }
995
  wheels = [
 
1458
  { url = "https://files.pythonhosted.org/packages/39/7b/bb06b061991107cd8783f300adff3e7b7f284e330fd82f507f2a1417b11d/huggingface_hub-0.34.4-py3-none-any.whl", hash = "sha256:9b365d781739c93ff90c359844221beef048403f1bc1f1c123c191257c3c890a", size = 561452, upload-time = "2025-08-08T09:14:50.159Z" },
1459
  ]
1460
 
1461
+ [[package]]
1462
+ name = "identify"
1463
+ version = "2.6.15"
1464
+ source = { registry = "https://pypi.org/simple" }
1465
+ sdist = { url = "https://files.pythonhosted.org/packages/ff/e7/685de97986c916a6d93b3876139e00eef26ad5bbbd61925d670ae8013449/identify-2.6.15.tar.gz", hash = "sha256:e4f4864b96c6557ef2a1e1c951771838f4edc9df3a72ec7118b338801b11c7bf", size = 99311, upload-time = "2025-10-02T17:43:40.631Z" }
1466
+ wheels = [
1467
+ { url = "https://files.pythonhosted.org/packages/0f/1c/e5fd8f973d4f375adb21565739498e2e9a1e54c858a97b9a8ccfdc81da9b/identify-2.6.15-py2.py3-none-any.whl", hash = "sha256:1181ef7608e00704db228516541eb83a88a9f94433a8c80bb9b5bd54b1d81757", size = 99183, upload-time = "2025-10-02T17:43:39.137Z" },
1468
+ ]
1469
+
1470
  [[package]]
1471
  name = "idna"
1472
  version = "3.11"
 
2464
  { url = "https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec", size = 2034406, upload-time = "2025-05-29T11:35:04.961Z" },
2465
  ]
2466
 
2467
+ [[package]]
2468
+ name = "nodeenv"
2469
+ version = "1.9.1"
2470
+ source = { registry = "https://pypi.org/simple" }
2471
+ sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437, upload-time = "2024-06-04T18:44:11.171Z" }
2472
+ wheels = [
2473
+ { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314, upload-time = "2024-06-04T18:44:08.352Z" },
2474
+ ]
2475
+
2476
  [[package]]
2477
  name = "num2words"
2478
  version = "0.5.14"
 
2616
  version = "9.10.2.21"
2617
  source = { registry = "https://pypi.org/simple" }
2618
  dependencies = [
2619
+ { name = "nvidia-cublas-cu12", marker = "sys_platform != 'win32'" },
2620
  ]
2621
  wheels = [
2622
  { url = "https://files.pythonhosted.org/packages/ba/51/e123d997aa098c61d029f76663dedbfb9bc8dcf8c60cbd6adbe42f76d049/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:949452be657fa16687d0930933f032835951ef0892b37d2d53824d1a84dc97a8", size = 706758467, upload-time = "2025-06-06T21:54:08.597Z" },
 
2627
  version = "11.3.3.83"
2628
  source = { registry = "https://pypi.org/simple" }
2629
  dependencies = [
2630
+ { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'win32'" },
2631
  ]
2632
  wheels = [
2633
  { url = "https://files.pythonhosted.org/packages/1f/13/ee4e00f30e676b66ae65b4f08cb5bcbb8392c03f54f2d5413ea99a5d1c80/nvidia_cufft_cu12-11.3.3.83-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d2dd21ec0b88cf61b62e6b43564355e5222e4a3fb394cac0db101f2dd0d4f74", size = 193118695, upload-time = "2025-03-07T01:45:27.821Z" },
 
2654
  version = "11.7.3.90"
2655
  source = { registry = "https://pypi.org/simple" }
2656
  dependencies = [
2657
+ { name = "nvidia-cublas-cu12", marker = "sys_platform != 'win32'" },
2658
+ { name = "nvidia-cusparse-cu12", marker = "sys_platform != 'win32'" },
2659
+ { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'win32'" },
2660
  ]
2661
  wheels = [
2662
  { url = "https://files.pythonhosted.org/packages/85/48/9a13d2975803e8cf2777d5ed57b87a0b6ca2cc795f9a4f59796a910bfb80/nvidia_cusolver_cu12-11.7.3.90-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4376c11ad263152bd50ea295c05370360776f8c3427b30991df774f9fb26c450", size = 267506905, upload-time = "2025-03-07T01:47:16.273Z" },
 
2667
  version = "12.5.8.93"
2668
  source = { registry = "https://pypi.org/simple" }
2669
  dependencies = [
2670
+ { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'win32'" },
2671
  ]
2672
  wheels = [
2673
  { url = "https://files.pythonhosted.org/packages/c2/f5/e1854cb2f2bcd4280c44736c93550cc300ff4b8c95ebe370d0aa7d2b473d/nvidia_cusparse_cu12-12.5.8.93-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1ec05d76bbbd8b61b06a80e1eaf8cf4959c3d4ce8e711b65ebd0443bb0ebb13b", size = 288216466, upload-time = "2025-03-07T01:48:13.779Z" },
 
3091
  { url = "https://files.pythonhosted.org/packages/a8/87/77cc11c7a9ea9fd05503def69e3d18605852cd0d4b0d3b8f15bbeb3ef1d1/pooch-1.8.2-py3-none-any.whl", hash = "sha256:3529a57096f7198778a5ceefd5ac3ef0e4d06a6ddaf9fc2d609b806f25302c47", size = 64574, upload-time = "2024-06-06T16:53:44.343Z" },
3092
  ]
3093
 
3094
+ [[package]]
3095
+ name = "pre-commit"
3096
+ version = "4.4.0"
3097
+ source = { registry = "https://pypi.org/simple" }
3098
+ dependencies = [
3099
+ { name = "cfgv" },
3100
+ { name = "identify" },
3101
+ { name = "nodeenv" },
3102
+ { name = "pyyaml" },
3103
+ { name = "virtualenv" },
3104
+ ]
3105
+ sdist = { url = "https://files.pythonhosted.org/packages/a6/49/7845c2d7bf6474efd8e27905b51b11e6ce411708c91e829b93f324de9929/pre_commit-4.4.0.tar.gz", hash = "sha256:f0233ebab440e9f17cabbb558706eb173d19ace965c68cdce2c081042b4fab15", size = 197501, upload-time = "2025-11-08T21:12:11.607Z" }
3106
+ wheels = [
3107
+ { url = "https://files.pythonhosted.org/packages/27/11/574fe7d13acf30bfd0a8dd7fa1647040f2b8064f13f43e8c963b1e65093b/pre_commit-4.4.0-py2.py3-none-any.whl", hash = "sha256:b35ea52957cbf83dcc5d8ee636cbead8624e3a15fbfa61a370e42158ac8a5813", size = 226049, upload-time = "2025-11-08T21:12:10.228Z" },
3108
+ ]
3109
+
3110
  [[package]]
3111
  name = "propcache"
3112
  version = "0.4.1"
 
3575
  { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750, upload-time = "2025-09-04T14:34:20.226Z" },
3576
  ]
3577
 
3578
+ [[package]]
3579
+ name = "pytest-asyncio"
3580
+ version = "1.3.0"
3581
+ source = { registry = "https://pypi.org/simple" }
3582
+ dependencies = [
3583
+ { name = "backports-asyncio-runner", marker = "python_full_version < '3.11'" },
3584
+ { name = "pytest" },
3585
+ { name = "typing-extensions", marker = "python_full_version < '3.13'" },
3586
+ ]
3587
+ sdist = { url = "https://files.pythonhosted.org/packages/90/2c/8af215c0f776415f3590cac4f9086ccefd6fd463befeae41cd4d3f193e5a/pytest_asyncio-1.3.0.tar.gz", hash = "sha256:d7f52f36d231b80ee124cd216ffb19369aa168fc10095013c6b014a34d3ee9e5", size = 50087, upload-time = "2025-11-10T16:07:47.256Z" }
3588
+ wheels = [
3589
+ { url = "https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl", hash = "sha256:611e26147c7f77640e6d0a92a38ed17c3e9848063698d5c93d5aa7aa11cebff5", size = 15075, upload-time = "2025-11-10T16:07:45.537Z" },
3590
+ ]
3591
+
3592
  [[package]]
3593
  name = "python-dateutil"
3594
  version = "2.9.0.post0"
 
3763
  [package.dev-dependencies]
3764
  dev = [
3765
  { name = "mypy" },
3766
+ { name = "pre-commit" },
3767
  { name = "pytest" },
3768
+ { name = "pytest-asyncio" },
3769
  { name = "ruff" },
3770
+ { name = "types-requests" },
3771
  ]
3772
 
3773
  [package.metadata]
 
3776
  { name = "fastrtc", specifier = ">=0.0.33" },
3777
  { name = "gradio", specifier = ">=5.49.0" },
3778
  { name = "huggingface-hub", specifier = ">=0.34.4" },
3779
+ { name = "mediapipe", marker = "extra == 'all-vision'", specifier = ">=0.10.14" },
3780
  { name = "mediapipe", marker = "extra == 'mediapipe-vision'", specifier = ">=0.10.14" },
3781
+ { name = "num2words", marker = "extra == 'all-vision'" },
3782
  { name = "num2words", marker = "extra == 'local-vision'" },
3783
  { name = "openai", specifier = ">=2.1" },
3784
  { name = "opencv-python", specifier = ">=4.12.0.88" },
3785
  { name = "python-dotenv" },
3786
  { name = "reachy-mini", specifier = ">=1.0.0rc4" },
 
 
 
3787
  { name = "reachy-mini-dances-library" },
3788
  { name = "reachy-mini-toolbox" },
3789
+ { name = "supervision", marker = "extra == 'all-vision'" },
3790
  { name = "supervision", marker = "extra == 'yolo-vision'" },
3791
+ { name = "torch", marker = "extra == 'all-vision'" },
3792
  { name = "torch", marker = "extra == 'local-vision'" },
3793
+ { name = "transformers", marker = "extra == 'all-vision'" },
3794
  { name = "transformers", marker = "extra == 'local-vision'" },
3795
+ { name = "ultralytics", marker = "extra == 'all-vision'" },
3796
  { name = "ultralytics", marker = "extra == 'yolo-vision'" },
3797
  ]
3798
  provides-extras = ["local-vision", "yolo-vision", "mediapipe-vision", "all-vision"]
 
3800
  [package.metadata.requires-dev]
3801
  dev = [
3802
  { name = "mypy", specifier = "==1.18.2" },
3803
+ { name = "pre-commit" },
3804
  { name = "pytest" },
3805
+ { name = "pytest-asyncio" },
3806
  { name = "ruff", specifier = "==0.12.0" },
3807
+ { name = "types-requests" },
3808
  ]
3809
 
3810
  [[package]]
 
4722
  { url = "https://files.pythonhosted.org/packages/78/64/7713ffe4b5983314e9d436a90d5bd4f63b6054e2aca783a3cfc44cb95bbf/typer-0.20.0-py3-none-any.whl", hash = "sha256:5b463df6793ec1dca6213a3cf4c0f03bc6e322ac5e16e13ddd622a889489784a", size = 47028, upload-time = "2025-10-20T17:03:47.617Z" },
4723
  ]
4724
 
4725
+ [[package]]
4726
+ name = "types-requests"
4727
+ version = "2.32.4.20250913"
4728
+ source = { registry = "https://pypi.org/simple" }
4729
+ dependencies = [
4730
+ { name = "urllib3" },
4731
+ ]
4732
+ sdist = { url = "https://files.pythonhosted.org/packages/36/27/489922f4505975b11de2b5ad07b4fe1dca0bca9be81a703f26c5f3acfce5/types_requests-2.32.4.20250913.tar.gz", hash = "sha256:abd6d4f9ce3a9383f269775a9835a4c24e5cd6b9f647d64f88aa4613c33def5d", size = 23113, upload-time = "2025-09-13T02:40:02.309Z" }
4733
+ wheels = [
4734
+ { url = "https://files.pythonhosted.org/packages/2a/20/9a227ea57c1285986c4cf78400d0a91615d25b24e257fd9e2969606bdfae/types_requests-2.32.4.20250913-py3-none-any.whl", hash = "sha256:78c9c1fffebbe0fa487a418e0fa5252017e9c60d1a2da394077f1780f655d7e1", size = 20658, upload-time = "2025-09-13T02:40:01.115Z" },
4735
+ ]
4736
+
4737
  [[package]]
4738
  name = "typing-extensions"
4739
  version = "4.15.0"
 
4878
  { url = "https://files.pythonhosted.org/packages/e4/16/c1fd27e9549f3c4baf1dc9c20c456cd2f822dbf8de9f463824b0c0357e06/uvloop-0.22.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6cde23eeda1a25c75b2e07d39970f3374105d5eafbaab2a4482be82f272d5a5e", size = 4296730, upload-time = "2025-10-16T22:17:00.744Z" },
4879
  ]
4880
 
4881
+ [[package]]
4882
+ name = "virtualenv"
4883
+ version = "20.35.4"
4884
+ source = { registry = "https://pypi.org/simple" }
4885
+ dependencies = [
4886
+ { name = "distlib" },
4887
+ { name = "filelock" },
4888
+ { name = "platformdirs" },
4889
+ { name = "typing-extensions", marker = "python_full_version < '3.11'" },
4890
+ ]
4891
+ sdist = { url = "https://files.pythonhosted.org/packages/20/28/e6f1a6f655d620846bd9df527390ecc26b3805a0c5989048c210e22c5ca9/virtualenv-20.35.4.tar.gz", hash = "sha256:643d3914d73d3eeb0c552cbb12d7e82adf0e504dbf86a3182f8771a153a1971c", size = 6028799, upload-time = "2025-10-29T06:57:40.511Z" }
4892
+ wheels = [
4893
+ { url = "https://files.pythonhosted.org/packages/79/0c/c05523fa3181fdf0c9c52a6ba91a23fbf3246cc095f26f6516f9c60e6771/virtualenv-20.35.4-py3-none-any.whl", hash = "sha256:c21c9cede36c9753eeade68ba7d523529f228a403463376cf821eaae2b650f1b", size = 6005095, upload-time = "2025-10-29T06:57:37.598Z" },
4894
+ ]
4895
+
4896
  [[package]]
4897
  name = "watchfiles"
4898
  version = "1.1.1"