QuLab 2.12.3__tar.gz → 2.13.0__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.
Files changed (192) hide show
  1. {qulab-2.12.3 → qulab-2.13.0}/PKG-INFO +6 -1
  2. {qulab-2.12.3 → qulab-2.13.0}/QuLab.egg-info/PKG-INFO +6 -1
  3. {qulab-2.12.3 → qulab-2.13.0}/QuLab.egg-info/SOURCES.txt +68 -10
  4. {qulab-2.12.3 → qulab-2.13.0}/QuLab.egg-info/requires.txt +5 -0
  5. {qulab-2.12.3 → qulab-2.13.0}/pyproject.toml +12 -0
  6. qulab-2.13.0/qulab/auto/__init__.py +109 -0
  7. qulab-2.13.0/qulab/auto/agent/__init__.py +34 -0
  8. qulab-2.13.0/qulab/auto/agent/analyzer.py +610 -0
  9. qulab-2.13.0/qulab/auto/agent/executor.py +552 -0
  10. qulab-2.13.0/qulab/auto/agent/loop.py +514 -0
  11. qulab-2.13.0/qulab/auto/agent/memory.py +223 -0
  12. qulab-2.13.0/qulab/auto/agent/planner.py +673 -0
  13. qulab-2.13.0/qulab/auto/bus/__init__.py +9 -0
  14. qulab-2.13.0/qulab/auto/bus/queue.py +427 -0
  15. qulab-2.13.0/qulab/auto/cli.py +715 -0
  16. qulab-2.13.0/qulab/auto/config.py +523 -0
  17. qulab-2.13.0/qulab/auto/exceptions.py +41 -0
  18. qulab-2.13.0/qulab/auto/executor/__init__.py +11 -0
  19. qulab-2.13.0/qulab/auto/executor/base.py +65 -0
  20. qulab-2.13.0/qulab/auto/executor/context.py +105 -0
  21. qulab-2.13.0/qulab/auto/executor/local.py +226 -0
  22. qulab-2.13.0/qulab/auto/llm/__init__.py +19 -0
  23. qulab-2.13.0/qulab/auto/llm/anthropic.py +172 -0
  24. qulab-2.13.0/qulab/auto/llm/base.py +60 -0
  25. qulab-2.13.0/qulab/auto/llm/openai.py +172 -0
  26. qulab-2.13.0/qulab/auto/llm/registry.py +110 -0
  27. qulab-2.13.0/qulab/auto/main.py +208 -0
  28. qulab-2.13.0/qulab/auto/models/__init__.py +5 -0
  29. qulab-2.13.0/qulab/auto/models/session.py +73 -0
  30. qulab-2.13.0/qulab/auto/skills/__init__.py +15 -0
  31. qulab-2.13.0/qulab/auto/skills/base.py +153 -0
  32. qulab-2.13.0/qulab/auto/skills/builtin/__init__.py +1 -0
  33. qulab-2.13.0/qulab/auto/skills/cache.py +235 -0
  34. qulab-2.13.0/qulab/auto/skills/generator.py +330 -0
  35. qulab-2.13.0/qulab/auto/skills/loader.py +265 -0
  36. qulab-2.13.0/qulab/auto/tools/__init__.py +18 -0
  37. qulab-2.13.0/qulab/auto/tools/analysis.py +619 -0
  38. qulab-2.13.0/qulab/auto/tools/base.py +126 -0
  39. qulab-2.13.0/qulab/auto/tools/config.py +50 -0
  40. qulab-2.13.0/qulab/auto/tools/human.py +61 -0
  41. qulab-2.13.0/qulab/auto/tools/lesson.py +410 -0
  42. qulab-2.13.0/qulab/auto/tools/measurement.py +454 -0
  43. qulab-2.13.0/qulab/auto/tools/query.py +156 -0
  44. qulab-2.13.0/qulab/auto/tools/registry.py +122 -0
  45. qulab-2.13.0/qulab/auto/world_model/__init__.py +20 -0
  46. qulab-2.13.0/qulab/auto/world_model/base.py +360 -0
  47. qulab-2.13.0/qulab/auto/world_model/history.py +318 -0
  48. qulab-2.13.0/qulab/auto/world_model/parameter.py +418 -0
  49. qulab-2.13.0/qulab/auto/world_model/state.py +415 -0
  50. {qulab-2.12.3 → qulab-2.13.0}/qulab/cli/commands.py +6 -0
  51. {qulab-2.12.3 → qulab-2.13.0}/qulab/executor/load.py +1 -5
  52. {qulab-2.12.3 → qulab-2.13.0}/qulab/executor/schedule.py +0 -1
  53. {qulab-2.12.3 → qulab-2.13.0}/qulab/monitor/__main__.py +2 -2
  54. {qulab-2.12.3 → qulab-2.13.0}/qulab/monitor/mainwindow.py +1 -1
  55. {qulab-2.12.3 → qulab-2.13.0}/qulab/monitor/monitor.py +2 -2
  56. {qulab-2.12.3 → qulab-2.13.0}/qulab/monitor/ploter.py +1 -1
  57. {qulab-2.12.3 → qulab-2.13.0}/qulab/monitor/toolbar.py +1 -1
  58. {qulab-2.12.3 → qulab-2.13.0}/qulab/scan/optimize.py +0 -1
  59. {qulab-2.12.3 → qulab-2.13.0}/qulab/scan/record.py +6 -6
  60. {qulab-2.12.3 → qulab-2.13.0}/qulab/scan/scan.py +2 -2
  61. {qulab-2.12.3 → qulab-2.13.0}/qulab/scan/server.py +7 -10
  62. {qulab-2.12.3 → qulab-2.13.0}/qulab/scan/space.py +0 -1
  63. qulab-2.13.0/qulab/storage/__init__.py +78 -0
  64. qulab-2.13.0/qulab/storage/__main__.py +6 -0
  65. qulab-2.13.0/qulab/storage/array.py +525 -0
  66. qulab-2.13.0/qulab/storage/array_utils.py +267 -0
  67. qulab-2.13.0/qulab/storage/attachment.py +264 -0
  68. qulab-2.13.0/qulab/storage/base.py +262 -0
  69. qulab-2.13.0/qulab/storage/chunk.py +100 -0
  70. qulab-2.13.0/qulab/storage/cli.py +328 -0
  71. qulab-2.13.0/qulab/storage/dataset.py +752 -0
  72. qulab-2.13.0/qulab/storage/document.py +535 -0
  73. qulab-2.13.0/qulab/storage/local.py +575 -0
  74. qulab-2.13.0/qulab/storage/models/__init__.py +79 -0
  75. qulab-2.13.0/qulab/storage/models/attachment.py +167 -0
  76. qulab-2.13.0/qulab/storage/models/base.py +50 -0
  77. qulab-2.13.0/qulab/storage/models/config.py +147 -0
  78. qulab-2.13.0/qulab/storage/models/dataset.py +255 -0
  79. qulab-2.13.0/qulab/storage/models/document.py +237 -0
  80. qulab-2.13.0/qulab/storage/models/script.py +146 -0
  81. {qulab-2.12.3 → qulab-2.13.0}/qulab/storage/models/tag.py +14 -11
  82. qulab-2.13.0/qulab/storage/remote.py +484 -0
  83. qulab-2.13.0/qulab/storage/render.py +285 -0
  84. qulab-2.13.0/qulab/storage/server.py +386 -0
  85. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/chat.py +0 -2
  86. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/device/loader.py +0 -1
  87. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/device/utils.py +5 -5
  88. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/ipy_events.py +5 -3
  89. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/net/dhcp.py +0 -2
  90. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/net/dhcpd.py +3 -6
  91. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/net/kad.py +2 -2
  92. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/net/kcp.py +1 -1
  93. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/rpc/msgpack.py +12 -21
  94. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/rpc/serialize.py +1 -1
  95. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/rpc/utils.py +0 -2
  96. qulab-2.13.0/qulab/trace/__init__.py +186 -0
  97. qulab-2.13.0/qulab/trace/capture.py +313 -0
  98. qulab-2.13.0/qulab/trace/cli.py +178 -0
  99. qulab-2.13.0/qulab/trace/client.py +476 -0
  100. qulab-2.13.0/qulab/trace/hooks.py +330 -0
  101. qulab-2.13.0/qulab/trace/models.py +189 -0
  102. qulab-2.13.0/qulab/trace/server.py +156 -0
  103. qulab-2.13.0/qulab/trace/storage.py +387 -0
  104. qulab-2.13.0/qulab/trace/watcher.py +242 -0
  105. qulab-2.13.0/qulab/typing.py +1 -0
  106. {qulab-2.12.3 → qulab-2.13.0}/qulab/utils.py +1 -1
  107. qulab-2.13.0/qulab/version.py +1 -0
  108. {qulab-2.12.3 → qulab-2.13.0}/qulab/visualization/__init__.py +2 -2
  109. {qulab-2.12.3 → qulab-2.13.0}/qulab/visualization/plot_circ.py +1 -1
  110. {qulab-2.12.3 → qulab-2.13.0}/qulab/visualization/plot_layout.py +6 -11
  111. {qulab-2.12.3 → qulab-2.13.0}/qulab/visualization/rot3d.py +0 -1
  112. qulab-2.13.0/qulab/visualization/widgets.py +821 -0
  113. qulab-2.13.0/tests/test_auto_framework.py +477 -0
  114. qulab-2.12.3/qulab/storage/__main__.py +0 -51
  115. qulab-2.12.3/qulab/storage/backend/redis.py +0 -204
  116. qulab-2.12.3/qulab/storage/base_dataset.py +0 -352
  117. qulab-2.12.3/qulab/storage/chunk.py +0 -60
  118. qulab-2.12.3/qulab/storage/dataset.py +0 -127
  119. qulab-2.12.3/qulab/storage/file.py +0 -273
  120. qulab-2.12.3/qulab/storage/models/__init__.py +0 -22
  121. qulab-2.12.3/qulab/storage/models/base.py +0 -4
  122. qulab-2.12.3/qulab/storage/models/config.py +0 -28
  123. qulab-2.12.3/qulab/storage/models/file.py +0 -89
  124. qulab-2.12.3/qulab/storage/models/ipy.py +0 -58
  125. qulab-2.12.3/qulab/storage/models/models.py +0 -88
  126. qulab-2.12.3/qulab/storage/models/record.py +0 -161
  127. qulab-2.12.3/qulab/storage/models/report.py +0 -22
  128. qulab-2.12.3/qulab/storage/storage.py +0 -95
  129. qulab-2.12.3/qulab/sys/rpc/__init__.py +0 -0
  130. qulab-2.12.3/qulab/tools/__init__.py +0 -0
  131. qulab-2.12.3/qulab/typing.py +0 -2
  132. qulab-2.12.3/qulab/version.py +0 -1
  133. qulab-2.12.3/qulab/visualization/widgets.py +0 -86
  134. {qulab-2.12.3 → qulab-2.13.0}/LICENSE +0 -0
  135. {qulab-2.12.3 → qulab-2.13.0}/MANIFEST.in +0 -0
  136. {qulab-2.12.3 → qulab-2.13.0}/QuLab.egg-info/dependency_links.txt +0 -0
  137. {qulab-2.12.3 → qulab-2.13.0}/QuLab.egg-info/entry_points.txt +0 -0
  138. {qulab-2.12.3 → qulab-2.13.0}/QuLab.egg-info/top_level.txt +0 -0
  139. {qulab-2.12.3 → qulab-2.13.0}/README.md +0 -0
  140. {qulab-2.12.3 → qulab-2.13.0}/qulab/__init__.py +0 -0
  141. {qulab-2.12.3 → qulab-2.13.0}/qulab/__main__.py +0 -0
  142. {qulab-2.12.3 → qulab-2.13.0}/qulab/cli/__init__.py +0 -0
  143. {qulab-2.12.3 → qulab-2.13.0}/qulab/cli/config.py +0 -0
  144. {qulab-2.12.3 → qulab-2.13.0}/qulab/cli/decorators.py +0 -0
  145. {qulab-2.12.3 → qulab-2.13.0}/qulab/executor/__init__.py +0 -0
  146. {qulab-2.12.3 → qulab-2.13.0}/qulab/executor/analyze.py +0 -0
  147. {qulab-2.12.3 → qulab-2.13.0}/qulab/executor/cli.py +0 -0
  148. {qulab-2.12.3 → qulab-2.13.0}/qulab/executor/registry.py +0 -0
  149. {qulab-2.12.3 → qulab-2.13.0}/qulab/executor/storage.py +0 -0
  150. {qulab-2.12.3 → qulab-2.13.0}/qulab/executor/template.py +0 -0
  151. {qulab-2.12.3 → qulab-2.13.0}/qulab/executor/utils.py +0 -0
  152. {qulab-2.12.3 → qulab-2.13.0}/qulab/monitor/__init__.py +0 -0
  153. {qulab-2.12.3 → qulab-2.13.0}/qulab/monitor/config.py +0 -0
  154. {qulab-2.12.3 → qulab-2.13.0}/qulab/monitor/dataset.py +0 -0
  155. {qulab-2.12.3 → qulab-2.13.0}/qulab/monitor/event_queue.py +0 -0
  156. {qulab-2.12.3 → qulab-2.13.0}/qulab/monitor/qt_compat.py +0 -0
  157. {qulab-2.12.3 → qulab-2.13.0}/qulab/scan/__init__.py +0 -0
  158. {qulab-2.12.3 → qulab-2.13.0}/qulab/scan/curd.py +0 -0
  159. {qulab-2.12.3 → qulab-2.13.0}/qulab/scan/models.py +0 -0
  160. {qulab-2.12.3 → qulab-2.13.0}/qulab/scan/query.py +0 -0
  161. {qulab-2.12.3 → qulab-2.13.0}/qulab/scan/utils.py +0 -0
  162. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/__init__.py +0 -0
  163. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/device/__init__.py +0 -0
  164. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/device/basedevice.py +0 -0
  165. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/drivers/FakeInstrument.py +0 -0
  166. {qulab-2.12.3/qulab/storage → qulab-2.13.0/qulab/sys/drivers}/__init__.py +0 -0
  167. {qulab-2.12.3/qulab/storage/backend → qulab-2.13.0/qulab/sys/net}/__init__.py +0 -0
  168. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/net/bencoder.py +0 -0
  169. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/net/cli.py +0 -0
  170. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/net/nginx.py +0 -0
  171. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/progress.py +0 -0
  172. {qulab-2.12.3/qulab/sys/drivers → qulab-2.13.0/qulab/sys/rpc}/__init__.py +0 -0
  173. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/rpc/client.py +0 -0
  174. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/rpc/exceptions.py +0 -0
  175. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/rpc/msgpack.pyi +0 -0
  176. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/rpc/router.py +0 -0
  177. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/rpc/rpc.py +0 -0
  178. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/rpc/server.py +0 -0
  179. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/rpc/socket.py +0 -0
  180. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/rpc/worker.py +0 -0
  181. {qulab-2.12.3 → qulab-2.13.0}/qulab/sys/rpc/zmq_socket.py +0 -0
  182. {qulab-2.12.3/qulab/sys/net → qulab-2.13.0/qulab/tools}/__init__.py +0 -0
  183. {qulab-2.12.3 → qulab-2.13.0}/qulab/tools/connection_helper.py +0 -0
  184. {qulab-2.12.3 → qulab-2.13.0}/qulab/tools/xlsx.py +0 -0
  185. {qulab-2.12.3 → qulab-2.13.0}/qulab/visualization/__main__.py +0 -0
  186. {qulab-2.12.3 → qulab-2.13.0}/qulab/visualization/_autoplot.py +0 -0
  187. {qulab-2.12.3 → qulab-2.13.0}/qulab/visualization/plot_seq.py +0 -0
  188. {qulab-2.12.3 → qulab-2.13.0}/qulab/visualization/qdat.py +0 -0
  189. {qulab-2.12.3 → qulab-2.13.0}/setup.cfg +0 -0
  190. {qulab-2.12.3 → qulab-2.13.0}/setup.py +0 -0
  191. {qulab-2.12.3 → qulab-2.13.0}/src/qulab.h +0 -0
  192. {qulab-2.12.3 → qulab-2.13.0}/tests/test_scan.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: QuLab
3
- Version: 2.12.3
3
+ Version: 2.13.0
4
4
  Summary: contral instruments and manage data
5
5
  Author-email: feihoo87 <feihoo87@gmail.com>
6
6
  Maintainer-email: feihoo87 <feihoo87@gmail.com>
@@ -35,8 +35,10 @@ Requires-Dist: matplotlib>=3.7.2
35
35
  Requires-Dist: msgpack>=1.0.5
36
36
  Requires-Dist: nevergrad>=1.0.2
37
37
  Requires-Dist: numpy>=1.13.3
38
+ Requires-Dist: openai>=1.0.0
38
39
  Requires-Dist: ply>=3.11
39
40
  Requires-Dist: pyperclip>=1.8.2
41
+ Requires-Dist: pyyaml>=6.0
40
42
  Requires-Dist: pyzmq>=25.1.0
41
43
  Requires-Dist: qlisp>=1.1.4
42
44
  Requires-Dist: qlispc>=1.1.8
@@ -50,6 +52,9 @@ Requires-Dist: waveforms>=1.9.4
50
52
  Requires-Dist: rich>=14.0.0
51
53
  Requires-Dist: pydantic>=2.12.5
52
54
  Requires-Dist: openpyxl>=3.1.5
55
+ Requires-Dist: anthropic>=0.84.0
56
+ Requires-Dist: fastapi>=0.115.0
57
+ Requires-Dist: uvicorn>=0.30.0
53
58
  Provides-Extra: full
54
59
  Requires-Dist: paramiko>=3.5.1; extra == "full"
55
60
  Requires-Dist: uvloop>=0.19.0; extra == "full"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: QuLab
3
- Version: 2.12.3
3
+ Version: 2.13.0
4
4
  Summary: contral instruments and manage data
5
5
  Author-email: feihoo87 <feihoo87@gmail.com>
6
6
  Maintainer-email: feihoo87 <feihoo87@gmail.com>
@@ -35,8 +35,10 @@ Requires-Dist: matplotlib>=3.7.2
35
35
  Requires-Dist: msgpack>=1.0.5
36
36
  Requires-Dist: nevergrad>=1.0.2
37
37
  Requires-Dist: numpy>=1.13.3
38
+ Requires-Dist: openai>=1.0.0
38
39
  Requires-Dist: ply>=3.11
39
40
  Requires-Dist: pyperclip>=1.8.2
41
+ Requires-Dist: pyyaml>=6.0
40
42
  Requires-Dist: pyzmq>=25.1.0
41
43
  Requires-Dist: qlisp>=1.1.4
42
44
  Requires-Dist: qlispc>=1.1.8
@@ -50,6 +52,9 @@ Requires-Dist: waveforms>=1.9.4
50
52
  Requires-Dist: rich>=14.0.0
51
53
  Requires-Dist: pydantic>=2.12.5
52
54
  Requires-Dist: openpyxl>=3.1.5
55
+ Requires-Dist: anthropic>=0.84.0
56
+ Requires-Dist: fastapi>=0.115.0
57
+ Requires-Dist: uvicorn>=0.30.0
53
58
  Provides-Extra: full
54
59
  Requires-Dist: paramiko>=3.5.1; extra == "full"
55
60
  Requires-Dist: uvloop>=0.19.0; extra == "full"
@@ -14,6 +14,50 @@ qulab/__main__.py
14
14
  qulab/typing.py
15
15
  qulab/utils.py
16
16
  qulab/version.py
17
+ qulab/auto/__init__.py
18
+ qulab/auto/cli.py
19
+ qulab/auto/config.py
20
+ qulab/auto/exceptions.py
21
+ qulab/auto/main.py
22
+ qulab/auto/agent/__init__.py
23
+ qulab/auto/agent/analyzer.py
24
+ qulab/auto/agent/executor.py
25
+ qulab/auto/agent/loop.py
26
+ qulab/auto/agent/memory.py
27
+ qulab/auto/agent/planner.py
28
+ qulab/auto/bus/__init__.py
29
+ qulab/auto/bus/queue.py
30
+ qulab/auto/executor/__init__.py
31
+ qulab/auto/executor/base.py
32
+ qulab/auto/executor/context.py
33
+ qulab/auto/executor/local.py
34
+ qulab/auto/llm/__init__.py
35
+ qulab/auto/llm/anthropic.py
36
+ qulab/auto/llm/base.py
37
+ qulab/auto/llm/openai.py
38
+ qulab/auto/llm/registry.py
39
+ qulab/auto/models/__init__.py
40
+ qulab/auto/models/session.py
41
+ qulab/auto/skills/__init__.py
42
+ qulab/auto/skills/base.py
43
+ qulab/auto/skills/cache.py
44
+ qulab/auto/skills/generator.py
45
+ qulab/auto/skills/loader.py
46
+ qulab/auto/skills/builtin/__init__.py
47
+ qulab/auto/tools/__init__.py
48
+ qulab/auto/tools/analysis.py
49
+ qulab/auto/tools/base.py
50
+ qulab/auto/tools/config.py
51
+ qulab/auto/tools/human.py
52
+ qulab/auto/tools/lesson.py
53
+ qulab/auto/tools/measurement.py
54
+ qulab/auto/tools/query.py
55
+ qulab/auto/tools/registry.py
56
+ qulab/auto/world_model/__init__.py
57
+ qulab/auto/world_model/base.py
58
+ qulab/auto/world_model/history.py
59
+ qulab/auto/world_model/parameter.py
60
+ qulab/auto/world_model/state.py
17
61
  qulab/cli/__init__.py
18
62
  qulab/cli/commands.py
19
63
  qulab/cli/config.py
@@ -49,21 +93,25 @@ qulab/scan/space.py
49
93
  qulab/scan/utils.py
50
94
  qulab/storage/__init__.py
51
95
  qulab/storage/__main__.py
52
- qulab/storage/base_dataset.py
96
+ qulab/storage/array.py
97
+ qulab/storage/array_utils.py
98
+ qulab/storage/attachment.py
99
+ qulab/storage/base.py
53
100
  qulab/storage/chunk.py
101
+ qulab/storage/cli.py
54
102
  qulab/storage/dataset.py
55
- qulab/storage/file.py
56
- qulab/storage/storage.py
57
- qulab/storage/backend/__init__.py
58
- qulab/storage/backend/redis.py
103
+ qulab/storage/document.py
104
+ qulab/storage/local.py
105
+ qulab/storage/remote.py
106
+ qulab/storage/render.py
107
+ qulab/storage/server.py
59
108
  qulab/storage/models/__init__.py
109
+ qulab/storage/models/attachment.py
60
110
  qulab/storage/models/base.py
61
111
  qulab/storage/models/config.py
62
- qulab/storage/models/file.py
63
- qulab/storage/models/ipy.py
64
- qulab/storage/models/models.py
65
- qulab/storage/models/record.py
66
- qulab/storage/models/report.py
112
+ qulab/storage/models/dataset.py
113
+ qulab/storage/models/document.py
114
+ qulab/storage/models/script.py
67
115
  qulab/storage/models/tag.py
68
116
  qulab/sys/__init__.py
69
117
  qulab/sys/chat.py
@@ -99,6 +147,15 @@ qulab/sys/rpc/zmq_socket.py
99
147
  qulab/tools/__init__.py
100
148
  qulab/tools/connection_helper.py
101
149
  qulab/tools/xlsx.py
150
+ qulab/trace/__init__.py
151
+ qulab/trace/capture.py
152
+ qulab/trace/cli.py
153
+ qulab/trace/client.py
154
+ qulab/trace/hooks.py
155
+ qulab/trace/models.py
156
+ qulab/trace/server.py
157
+ qulab/trace/storage.py
158
+ qulab/trace/watcher.py
102
159
  qulab/visualization/__init__.py
103
160
  qulab/visualization/__main__.py
104
161
  qulab/visualization/_autoplot.py
@@ -109,4 +166,5 @@ qulab/visualization/qdat.py
109
166
  qulab/visualization/rot3d.py
110
167
  qulab/visualization/widgets.py
111
168
  src/qulab.h
169
+ tests/test_auto_framework.py
112
170
  tests/test_scan.py
@@ -9,8 +9,10 @@ matplotlib>=3.7.2
9
9
  msgpack>=1.0.5
10
10
  nevergrad>=1.0.2
11
11
  numpy>=1.13.3
12
+ openai>=1.0.0
12
13
  ply>=3.11
13
14
  pyperclip>=1.8.2
15
+ pyyaml>=6.0
14
16
  pyzmq>=25.1.0
15
17
  qlisp>=1.1.4
16
18
  qlispc>=1.1.8
@@ -24,6 +26,9 @@ waveforms>=1.9.4
24
26
  rich>=14.0.0
25
27
  pydantic>=2.12.5
26
28
  openpyxl>=3.1.5
29
+ anthropic>=0.84.0
30
+ fastapi>=0.115.0
31
+ uvicorn>=0.30.0
27
32
 
28
33
  [full]
29
34
  paramiko>=3.5.1
@@ -39,8 +39,10 @@ dependencies = [
39
39
  "msgpack>=1.0.5",
40
40
  "nevergrad>=1.0.2",
41
41
  "numpy>=1.13.3",
42
+ "openai>=1.0.0",
42
43
  "ply>=3.11",
43
44
  "pyperclip>=1.8.2",
45
+ "pyyaml>=6.0",
44
46
  "pyzmq>=25.1.0",
45
47
  "qlisp>=1.1.4",
46
48
  "qlispc>=1.1.8",
@@ -54,6 +56,9 @@ dependencies = [
54
56
  "rich>=14.0.0",
55
57
  "pydantic>=2.12.5",
56
58
  "openpyxl>=3.1.5",
59
+ "anthropic>=0.84.0",
60
+ "fastapi>=0.115.0",
61
+ "uvicorn>=0.30.0",
57
62
  ]
58
63
  dynamic = ["version"]
59
64
 
@@ -81,3 +86,10 @@ include-package-data = true
81
86
 
82
87
  [tool.setuptools.dynamic]
83
88
  version = {attr = "qulab.version.__version__"}
89
+
90
+ [dependency-groups]
91
+ dev = [
92
+ "pylint[spelling]>=4.0.5",
93
+ "pytest>=9.0.2",
94
+ "pytest-asyncio>=1.3.0",
95
+ ]
@@ -0,0 +1,109 @@
1
+ """QuLab Automatic Experiment Framework
2
+
3
+ This module provides an automated experiment framework similar to nanobot,
4
+ using LLM as the decision center for coordinating measurement and analysis tasks.
5
+
6
+ Example:
7
+ >>> from qulab.auto import AutoLab
8
+ >>> from qulab.storage import LocalStorage
9
+ >>>
10
+ >>> # Initialize storage
11
+ >>> storage = LocalStorage("./data")
12
+ >>>
13
+ >>> # Initialize AutoLab with Kimi
14
+ >>> lab = AutoLab(storage, llm_config={
15
+ ... "provider": "openai",
16
+ ... "base_url": "https://api.moonshot.cn/v1",
17
+ ... "api_key": "sk-...",
18
+ ... "model": "kimi-k2.5"
19
+ ... })
20
+ >>>
21
+ >>> # Start a session
22
+ >>> async for event in lab.start("Calibrate qubit 1 frequency"):
23
+ ... print(f"[{event.type}] {event.content}")
24
+
25
+ The framework consists of:
26
+ - **Agent**: ReAct decision loop that coordinates tasks
27
+ - **LLM**: Pluggable LLM providers (Anthropic, OpenAI-compatible like Kimi)
28
+ - **Skills**: YAML + Markdown files describing experiments and analyses
29
+ - **Tools**: Query, measurement, analysis, config update, and human query
30
+ - **Storage**: Persistent storage via qulab.storage
31
+ """
32
+
33
+ from .config import (
34
+ AutoLabConfig,
35
+ BusConfig,
36
+ ExecutorConfig,
37
+ LLMConfig,
38
+ MemoryConfig,
39
+ SkillConfig,
40
+ WorldModelConfig,
41
+ )
42
+ from .exceptions import (
43
+ AutoLabError,
44
+ ConfigError,
45
+ LLMError,
46
+ SessionError,
47
+ SkillError,
48
+ SkillNotFoundError,
49
+ ToolError,
50
+ ToolNotFoundError,
51
+ )
52
+ from .main import AutoLab
53
+
54
+ __all__ = [
55
+ # Main class
56
+ "AutoLab",
57
+ # Configuration
58
+ "AutoLabConfig",
59
+ "LLMConfig",
60
+ "SkillConfig",
61
+ "ExecutorConfig",
62
+ "MemoryConfig",
63
+ "WorldModelConfig",
64
+ "BusConfig",
65
+ # Exceptions
66
+ "AutoLabError",
67
+ "SkillError",
68
+ "SkillNotFoundError",
69
+ "ToolError",
70
+ "ToolNotFoundError",
71
+ "LLMError",
72
+ "ConfigError",
73
+ "SessionError",
74
+ ]
75
+
76
+
77
+ def __getattr__(name):
78
+ """Lazy import for agent components."""
79
+ if name == "AgentLoop":
80
+ from .agent.loop import AgentLoop
81
+ return AgentLoop
82
+ if name == "AgentConfig":
83
+ from .agent.loop import AgentConfig
84
+ return AgentConfig
85
+ if name == "AgentEvent":
86
+ from .agent.loop import AgentEvent
87
+ return AgentEvent
88
+ if name == "PlannerAgent":
89
+ from .agent.planner import PlannerAgent
90
+ return PlannerAgent
91
+ if name == "ExecutorAgent":
92
+ from .agent.executor import ExecutorAgent
93
+ return ExecutorAgent
94
+ if name == "AnalysisAgent":
95
+ from .agent.analyzer import AnalysisAgent
96
+ return AnalysisAgent
97
+ if name == "Skill":
98
+ from .skills.base import Skill
99
+ return Skill
100
+ if name == "SkillLoader":
101
+ from .skills.loader import SkillLoader
102
+ return SkillLoader
103
+ if name == "MessageBus":
104
+ from .bus import MessageBus
105
+ return MessageBus
106
+ if name == "WorldModel":
107
+ from .world_model import WorldModel
108
+ return WorldModel
109
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
@@ -0,0 +1,34 @@
1
+ """Agent system for auto experiment framework.
2
+
3
+ This module provides a three-layer agent architecture:
4
+ - PlannerAgent: High-level strategy and planning
5
+ - ExecutorAgent: Experiment skill execution
6
+ - AnalysisAgent: Data analysis execution
7
+ """
8
+
9
+ from .analyzer import AnalysisAgent, AnalysisContext, AnalysisResult
10
+ from .executor import ExecutorAgent, ExecutionContext, ExecutionResult
11
+ from .loop import AgentConfig, AgentEvent, AgentLoop
12
+ from .memory import SessionMemory
13
+ from .planner import ExecutionPlan, PlanStatus, PlanStep, PlannerAgent
14
+
15
+ __all__ = [
16
+ # Original classes
17
+ "AgentLoop",
18
+ "AgentConfig",
19
+ "AgentEvent",
20
+ "SessionMemory",
21
+ # Planner Agent
22
+ "PlannerAgent",
23
+ "ExecutionPlan",
24
+ "PlanStep",
25
+ "PlanStatus",
26
+ # Executor Agent
27
+ "ExecutorAgent",
28
+ "ExecutionContext",
29
+ "ExecutionResult",
30
+ # Analysis Agent
31
+ "AnalysisAgent",
32
+ "AnalysisContext",
33
+ "AnalysisResult",
34
+ ]