rapidfireai 0.10.2rc5__tar.gz → 0.10.3rc1__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 rapidfireai might be problematic. Click here for more details.

Files changed (300) hide show
  1. {rapidfireai-0.10.2rc5/rapidfireai.egg-info → rapidfireai-0.10.3rc1}/PKG-INFO +7 -4
  2. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/README.md +2 -2
  3. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/pyproject.toml +5 -2
  4. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/backend/controller.py +29 -16
  5. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/backend/worker.py +14 -7
  6. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/cli.py +28 -1
  7. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/db/rf_db.py +1 -1
  8. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/db/tables.sql +1 -1
  9. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/dispatcher/dispatcher.py +3 -1
  10. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/dispatcher/gunicorn.conf.py +1 -1
  11. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/experiment.py +75 -7
  12. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/asset-manifest.json +3 -3
  13. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/index.html +1 -1
  14. rapidfireai-0.10.2rc5/rapidfireai/frontend/build/static/js/main.1bf27639.js → rapidfireai-0.10.3rc1/rapidfireai/frontend/build/static/js/main.e7d3b759.js +3 -3
  15. rapidfireai-0.10.2rc5/rapidfireai/frontend/build/static/js/main.1bf27639.js.map → rapidfireai-0.10.3rc1/rapidfireai/frontend/build/static/js/main.e7d3b759.js.map +1 -1
  16. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/proxy_middleware.py +1 -1
  17. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/ml/callbacks.py +78 -38
  18. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/ml/trainer.py +6 -6
  19. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/start.sh +117 -34
  20. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/utils/constants.py +20 -1
  21. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/utils/experiment_utils.py +87 -43
  22. rapidfireai-0.10.3rc1/rapidfireai/utils/interactive_controller.py +494 -0
  23. rapidfireai-0.10.3rc1/rapidfireai/utils/metric_logger.py +346 -0
  24. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/utils/mlflow_manager.py +0 -2
  25. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/utils/worker_manager.py +16 -6
  26. rapidfireai-0.10.3rc1/rapidfireai/version.py +6 -0
  27. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1/rapidfireai.egg-info}/PKG-INFO +7 -4
  28. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai.egg-info/SOURCES.txt +9 -4
  29. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai.egg-info/requires.txt +4 -1
  30. rapidfireai-0.10.3rc1/tests/test_metric_logger.py +486 -0
  31. rapidfireai-0.10.3rc1/tests/test_notebooks.py +113 -0
  32. rapidfireai-0.10.3rc1/tutorial_notebooks/rf-colab-tensorboard-tutorial.ipynb +314 -0
  33. rapidfireai-0.10.2rc5/rapidfireai/version.py +0 -6
  34. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/LICENSE +0 -0
  35. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/MANIFEST.in +0 -0
  36. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/__init__.py +0 -0
  37. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/automl/__init__.py +0 -0
  38. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/automl/base.py +0 -0
  39. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/automl/datatypes.py +0 -0
  40. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/automl/grid_search.py +0 -0
  41. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/automl/model_config.py +0 -0
  42. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/automl/random_search.py +0 -0
  43. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/backend/__init__.py +0 -0
  44. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/backend/chunks.py +0 -0
  45. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/backend/scheduler.py +0 -0
  46. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/db/__init__.py +0 -0
  47. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/db/db_interface.py +0 -0
  48. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/favicon.ico +0 -0
  49. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/lib/notebook-trace-renderer/index.html +0 -0
  50. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/lib/notebook-trace-renderer/js/ml-model-trace-renderer.5490ebc325fe0f300ad9.js +0 -0
  51. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/lib/notebook-trace-renderer/js/ml-model-trace-renderer.5490ebc325fe0f300ad9.js.map +0 -0
  52. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/manifest.json +0 -0
  53. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/1570.21d39143.chunk.css +0 -0
  54. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/1570.21d39143.chunk.css.map +0 -0
  55. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/1810.b886c467.chunk.css +0 -0
  56. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/1810.b886c467.chunk.css.map +0 -0
  57. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/1998.182efef5.chunk.css +0 -0
  58. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/1998.182efef5.chunk.css.map +0 -0
  59. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/2061.c07e2d0d.chunk.css +0 -0
  60. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/2061.c07e2d0d.chunk.css.map +0 -0
  61. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/301.ca66900f.chunk.css +0 -0
  62. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/301.ca66900f.chunk.css.map +0 -0
  63. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/3044.41bf106c.chunk.css +0 -0
  64. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/3044.41bf106c.chunk.css.map +0 -0
  65. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/5009.e39511b7.chunk.css +0 -0
  66. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/5009.e39511b7.chunk.css.map +0 -0
  67. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/505.1c6f09d6.chunk.css +0 -0
  68. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/505.1c6f09d6.chunk.css.map +0 -0
  69. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/5275.766cab72.chunk.css +0 -0
  70. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/5275.766cab72.chunk.css.map +0 -0
  71. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/6279.4898ad7a.chunk.css +0 -0
  72. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/6279.4898ad7a.chunk.css.map +0 -0
  73. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/6724.817f39a9.chunk.css +0 -0
  74. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/6724.817f39a9.chunk.css.map +0 -0
  75. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/7166.2660bfa4.chunk.css +0 -0
  76. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/7166.2660bfa4.chunk.css.map +0 -0
  77. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/7774.51471f49.chunk.css +0 -0
  78. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/7774.51471f49.chunk.css.map +0 -0
  79. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/8165.edc59d12.chunk.css +0 -0
  80. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/8165.edc59d12.chunk.css.map +0 -0
  81. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/8649.cfa704f2.chunk.css +0 -0
  82. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/8649.cfa704f2.chunk.css.map +0 -0
  83. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/8655.a1aab422.chunk.css +0 -0
  84. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/8655.a1aab422.chunk.css.map +0 -0
  85. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/9059.cccf5f9b.chunk.css +0 -0
  86. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/9059.cccf5f9b.chunk.css.map +0 -0
  87. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/961.a1aab422.chunk.css +0 -0
  88. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/961.a1aab422.chunk.css.map +0 -0
  89. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/9801.c9632c36.chunk.css +0 -0
  90. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/9801.c9632c36.chunk.css.map +0 -0
  91. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/9831.2fd713ad.chunk.css +0 -0
  92. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/9831.2fd713ad.chunk.css.map +0 -0
  93. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/experimentPage.b886c467.chunk.css +0 -0
  94. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/experimentPage.b886c467.chunk.css.map +0 -0
  95. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/main.702595df.css +0 -0
  96. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/css/main.702595df.css.map +0 -0
  97. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/1107.3b7eb241.chunk.js +0 -0
  98. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/1107.3b7eb241.chunk.js.map +0 -0
  99. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/1130.8c8328e9.chunk.js +0 -0
  100. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/1130.8c8328e9.chunk.js.map +0 -0
  101. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/1570.e6a5ccf7.chunk.js +0 -0
  102. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/1570.e6a5ccf7.chunk.js.LICENSE.txt +0 -0
  103. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/1570.e6a5ccf7.chunk.js.map +0 -0
  104. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/1810.7b0d2aa5.chunk.js +0 -0
  105. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/1810.7b0d2aa5.chunk.js.map +0 -0
  106. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/1841.54c56f45.chunk.js +0 -0
  107. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/1841.54c56f45.chunk.js.LICENSE.txt +0 -0
  108. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/1841.54c56f45.chunk.js.map +0 -0
  109. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/1998.52257a5d.chunk.js +0 -0
  110. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/1998.52257a5d.chunk.js.map +0 -0
  111. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2008.7734bf52.chunk.js +0 -0
  112. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2008.7734bf52.chunk.js.LICENSE.txt +0 -0
  113. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2008.7734bf52.chunk.js.map +0 -0
  114. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2013.ebec35d3.chunk.js +0 -0
  115. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2013.ebec35d3.chunk.js.map +0 -0
  116. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2025.fccf596b.chunk.js +0 -0
  117. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2025.fccf596b.chunk.js.map +0 -0
  118. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2061.43748e5b.chunk.js +0 -0
  119. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2061.43748e5b.chunk.js.map +0 -0
  120. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2149.2b521c18.chunk.js +0 -0
  121. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2149.2b521c18.chunk.js.map +0 -0
  122. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2231.5a7fbe5e.chunk.js +0 -0
  123. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2231.5a7fbe5e.chunk.js.LICENSE.txt +0 -0
  124. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2231.5a7fbe5e.chunk.js.map +0 -0
  125. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2402.1c147bbf.chunk.js +0 -0
  126. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2402.1c147bbf.chunk.js.map +0 -0
  127. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2608.3e80e7b0.chunk.js +0 -0
  128. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2608.3e80e7b0.chunk.js.map +0 -0
  129. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2633.7a14dc7e.chunk.js +0 -0
  130. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2633.7a14dc7e.chunk.js.LICENSE.txt +0 -0
  131. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2633.7a14dc7e.chunk.js.map +0 -0
  132. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/278.ef0f3856.chunk.js +0 -0
  133. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/278.ef0f3856.chunk.js.map +0 -0
  134. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2999.16056eb5.chunk.js +0 -0
  135. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/2999.16056eb5.chunk.js.map +0 -0
  136. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/301.be95b5c5.chunk.js +0 -0
  137. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/301.be95b5c5.chunk.js.map +0 -0
  138. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/3044.833a108e.chunk.js +0 -0
  139. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/3044.833a108e.chunk.js.map +0 -0
  140. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/3334.aa15c4e1.chunk.js +0 -0
  141. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/3334.aa15c4e1.chunk.js.LICENSE.txt +0 -0
  142. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/3334.aa15c4e1.chunk.js.map +0 -0
  143. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/3464.83ee62c8.chunk.js +0 -0
  144. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/3464.83ee62c8.chunk.js.map +0 -0
  145. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/3835.5817b6a4.chunk.js +0 -0
  146. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/3835.5817b6a4.chunk.js.map +0 -0
  147. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/3885.6631331e.chunk.js +0 -0
  148. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/3885.6631331e.chunk.js.map +0 -0
  149. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/4175.8b841372.chunk.js +0 -0
  150. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/4175.8b841372.chunk.js.map +0 -0
  151. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/4588.d69c50d6.chunk.js +0 -0
  152. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/4588.d69c50d6.chunk.js.map +0 -0
  153. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/47.436aaeb8.chunk.js +0 -0
  154. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/47.436aaeb8.chunk.js.map +0 -0
  155. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/4765.afb39d4e.chunk.js +0 -0
  156. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/4765.afb39d4e.chunk.js.map +0 -0
  157. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/4850.b10d3c24.chunk.js +0 -0
  158. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/4850.b10d3c24.chunk.js.LICENSE.txt +0 -0
  159. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/4850.b10d3c24.chunk.js.map +0 -0
  160. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/5009.73d4294a.chunk.js +0 -0
  161. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/5009.73d4294a.chunk.js.map +0 -0
  162. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/505.92c8a2ab.chunk.js +0 -0
  163. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/505.92c8a2ab.chunk.js.map +0 -0
  164. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/5194.721c2975.chunk.js +0 -0
  165. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/5194.721c2975.chunk.js.map +0 -0
  166. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/5265.c79d9911.chunk.js +0 -0
  167. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/5265.c79d9911.chunk.js.map +0 -0
  168. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/5275.e848bc22.chunk.js +0 -0
  169. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/5275.e848bc22.chunk.js.map +0 -0
  170. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/532.327a6d70.chunk.js +0 -0
  171. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/532.327a6d70.chunk.js.map +0 -0
  172. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/571.1ca4d1b2.chunk.js +0 -0
  173. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/571.1ca4d1b2.chunk.js.map +0 -0
  174. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/5879.8c03c3a7.chunk.js +0 -0
  175. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/5879.8c03c3a7.chunk.js.LICENSE.txt +0 -0
  176. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/5879.8c03c3a7.chunk.js.map +0 -0
  177. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6019.9025341e.chunk.js +0 -0
  178. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/618.c43acc34.chunk.js +0 -0
  179. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/618.c43acc34.chunk.js.LICENSE.txt +0 -0
  180. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/618.c43acc34.chunk.js.map +0 -0
  181. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6279.b98153c9.chunk.js +0 -0
  182. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6279.b98153c9.chunk.js.map +0 -0
  183. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6336.8153bc1c.chunk.js +0 -0
  184. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6336.8153bc1c.chunk.js.map +0 -0
  185. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6386.95210fd8.chunk.js +0 -0
  186. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6386.95210fd8.chunk.js.map +0 -0
  187. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6450.c16333e6.chunk.js +0 -0
  188. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6450.c16333e6.chunk.js.map +0 -0
  189. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6674.568e5d25.chunk.js +0 -0
  190. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6674.568e5d25.chunk.js.LICENSE.txt +0 -0
  191. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6674.568e5d25.chunk.js.map +0 -0
  192. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6724.109a403e.chunk.js +0 -0
  193. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6724.109a403e.chunk.js.map +0 -0
  194. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6742.957d9f66.chunk.js +0 -0
  195. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6742.957d9f66.chunk.js.map +0 -0
  196. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6791.64608625.chunk.js +0 -0
  197. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6791.64608625.chunk.js.map +0 -0
  198. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6931.db3e086e.chunk.js +0 -0
  199. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6931.db3e086e.chunk.js.map +0 -0
  200. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6991.0e98e62b.chunk.js +0 -0
  201. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/6991.0e98e62b.chunk.js.map +0 -0
  202. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/7021.21cfd230.chunk.js +0 -0
  203. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/7021.21cfd230.chunk.js.LICENSE.txt +0 -0
  204. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/7021.21cfd230.chunk.js.map +0 -0
  205. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/7027.6961c163.chunk.js +0 -0
  206. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/7027.6961c163.chunk.js.LICENSE.txt +0 -0
  207. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/7027.6961c163.chunk.js.map +0 -0
  208. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/7166.9761fb8a.chunk.js +0 -0
  209. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/7166.9761fb8a.chunk.js.map +0 -0
  210. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/7262.504f3f63.chunk.js +0 -0
  211. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/7262.504f3f63.chunk.js.map +0 -0
  212. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/7544.ccd817ff.chunk.js +0 -0
  213. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/7544.ccd817ff.chunk.js.map +0 -0
  214. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/7774.ba2d7341.chunk.js +0 -0
  215. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/7774.ba2d7341.chunk.js.LICENSE.txt +0 -0
  216. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/7774.ba2d7341.chunk.js.map +0 -0
  217. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/7863.7f2f62cc.chunk.js +0 -0
  218. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/7863.7f2f62cc.chunk.js.map +0 -0
  219. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/8048.bdbecbb6.chunk.js +0 -0
  220. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/8048.bdbecbb6.chunk.js.LICENSE.txt +0 -0
  221. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/8048.bdbecbb6.chunk.js.map +0 -0
  222. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/8165.40e9a465.chunk.js +0 -0
  223. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/8165.40e9a465.chunk.js.map +0 -0
  224. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/8229.ba907d90.chunk.js +0 -0
  225. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/8229.ba907d90.chunk.js.map +0 -0
  226. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/8238.657b5a23.chunk.js +0 -0
  227. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/8238.657b5a23.chunk.js.map +0 -0
  228. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/847.de5af26a.chunk.js +0 -0
  229. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/847.de5af26a.chunk.js.map +0 -0
  230. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/8521.23f1b86b.chunk.js +0 -0
  231. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/8521.23f1b86b.chunk.js.map +0 -0
  232. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/8649.c727bd23.chunk.js +0 -0
  233. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/8649.c727bd23.chunk.js.map +0 -0
  234. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/8846.2cec14c5.chunk.js +0 -0
  235. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/8846.2cec14c5.chunk.js.LICENSE.txt +0 -0
  236. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/8846.2cec14c5.chunk.js.map +0 -0
  237. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/9059.aa80078d.chunk.js +0 -0
  238. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/9059.aa80078d.chunk.js.map +0 -0
  239. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/939.e6c5459d.chunk.js +0 -0
  240. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/939.e6c5459d.chunk.js.map +0 -0
  241. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/9478.cbf55ef3.chunk.js +0 -0
  242. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/9478.cbf55ef3.chunk.js.map +0 -0
  243. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/961.632f8737.chunk.js +0 -0
  244. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/961.632f8737.chunk.js.map +0 -0
  245. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/9800.2d34e2e9.chunk.js +0 -0
  246. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/9800.2d34e2e9.chunk.js.map +0 -0
  247. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/9801.039b9950.chunk.js +0 -0
  248. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/9801.039b9950.chunk.js.map +0 -0
  249. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/9831.43bfa1a6.chunk.js +0 -0
  250. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/9831.43bfa1a6.chunk.js.map +0 -0
  251. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/experimentPage.230db0b3.chunk.js +0 -0
  252. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/js/experimentPage.230db0b3.chunk.js.map +0 -0
  253. /rapidfireai-0.10.2rc5/rapidfireai/frontend/build/static/js/main.1bf27639.js.LICENSE.txt → /rapidfireai-0.10.3rc1/rapidfireai/frontend/build/static/js/main.e7d3b759.js.LICENSE.txt +0 -0
  254. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/404-overflow.fad9a31861b0afba6f921ebb8e769688.svg +0 -0
  255. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/RapidFire_Square_Bug.27ceb48296314a4bc0d4.png +0 -0
  256. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/chart-bar.0fd4a63680fba840a7b69fbf07969f79.svg +0 -0
  257. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/chart-contour.0d4b306f2669f3ad25375568935e3ce3.svg +0 -0
  258. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/chart-difference.16174216d6f3b7c24f40e3541fe0ca2c.svg +0 -0
  259. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/chart-image.cc434c4dc50780966344e2385a15f8fe.svg +0 -0
  260. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/chart-line.0adaa2036bb4eb5956db6d0c7e925a3d.svg +0 -0
  261. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/chart-parallel.da7dedf539b2af4b654d377c679173e4.svg +0 -0
  262. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/chart-scatter.69118d0023a6ff3973f7fa913834ac47.svg +0 -0
  263. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/default-error.f246ddf367c6fbd67942e5a13382a7f1.svg +0 -0
  264. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/fontawesome-webfont.1e59d2330b4c6deb84b3.ttf +0 -0
  265. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/fontawesome-webfont.20fd1704ea223900efa9.woff2 +0 -0
  266. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/fontawesome-webfont.8b43027f47b20503057d.eot +0 -0
  267. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/fontawesome-webfont.c1e38fd9e0e74ba58f7a.svg +0 -0
  268. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/fontawesome-webfont.f691f37e57f04c152e23.woff +0 -0
  269. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/icon-visible-fill.8d34cd35303828fdfc15154f5536e63b.svg +0 -0
  270. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/parallel-chart-placeholder.234ef0c5b220ef2a5a6fa5bafff173f7.svg +0 -0
  271. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/pdf.worker.min.1e04b97855d3d1d0937e.mjs +0 -0
  272. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/pdf.worker.min.1e04b97855d3d1d0937e.mjs.LICENSE.txt +0 -0
  273. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/promo-modal-content.e3b2c6c568ac192b9bec54b838b54850.svg +0 -0
  274. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/registered-model-grey-ok.8274b58d39504c8d1b8c358aa1c9aa35.svg +0 -0
  275. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/versions-empty.3e2d8bb8c5b8ddd0a19a34890b36ad41.svg +0 -0
  276. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/build/static/media/warning.290a3b14118933547965e91ea61c5a61.svg +0 -0
  277. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/package.json +0 -0
  278. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/frontend/server.py +0 -0
  279. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/ml/__init__.py +0 -0
  280. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/ml/checkpoint_utils.py +0 -0
  281. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/utils/__init__.py +0 -0
  282. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/utils/automl_utils.py +0 -0
  283. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/utils/datapaths.py +0 -0
  284. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/utils/exceptions.py +0 -0
  285. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/utils/logging.py +0 -0
  286. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/utils/ping.py +0 -0
  287. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/utils/serialize.py +0 -0
  288. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/utils/shm_manager.py +0 -0
  289. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai/utils/trainer_config.py +0 -0
  290. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai.egg-info/dependency_links.txt +0 -0
  291. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai.egg-info/entry_points.txt +0 -0
  292. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/rapidfireai.egg-info/top_level.txt +0 -0
  293. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/setup.cfg +0 -0
  294. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/tests/test_chunks.py +0 -0
  295. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/tutorial_notebooks/rf-tutorial-dpo-alignment-lite.ipynb +0 -0
  296. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/tutorial_notebooks/rf-tutorial-dpo-alignment.ipynb +0 -0
  297. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/tutorial_notebooks/rf-tutorial-grpo-mathreasoning-lite.ipynb +0 -0
  298. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/tutorial_notebooks/rf-tutorial-grpo-mathreasoning.ipynb +0 -0
  299. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/tutorial_notebooks/rf-tutorial-sft-chatqa-lite.ipynb +0 -0
  300. {rapidfireai-0.10.2rc5 → rapidfireai-0.10.3rc1}/tutorial_notebooks/rf-tutorial-sft-chatqa.ipynb +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rapidfireai
3
- Version: 0.10.2rc5
3
+ Version: 0.10.3rc1
4
4
  Summary: RapidFire AI: Rapid Experimentation Engine for Customizing LLMs
5
5
  Author-email: "RapidFire AI Inc." <support@rapidfire.ai>
6
6
  License: Apache-2.0
@@ -22,6 +22,7 @@ Requires-Python: >=3.12
22
22
  Description-Content-Type: text/markdown
23
23
  License-File: LICENSE
24
24
  Requires-Dist: pandas>=2.3.1
25
+ Requires-Dist: psutil>=5.9.0
25
26
  Requires-Dist: torch>=2.8.0
26
27
  Requires-Dist: transformers>=4.55.2
27
28
  Requires-Dist: peft>=0.17.0
@@ -40,11 +41,13 @@ Requires-Dist: requests>=2.32.5
40
41
  Requires-Dist: loguru>=0.7.3
41
42
  Requires-Dist: ipython>=8.37.0
42
43
  Requires-Dist: jupyter>=1.1.1
43
- Requires-Dist: ipywidgets>=8.1.7
44
+ Requires-Dist: ipywidgets<9.0.0,>=7.3.4
44
45
  Requires-Dist: uv>=0.8.14
46
+ Requires-Dist: tensorboard>=2.11.0
45
47
  Provides-Extra: dev
46
48
  Requires-Dist: pytest>=6.0; extra == "dev"
47
49
  Requires-Dist: pytest-cov>=2.0; extra == "dev"
50
+ Requires-Dist: pytest-mock>=3.10.0; extra == "dev"
48
51
  Requires-Dist: black>=21.0; extra == "dev"
49
52
  Requires-Dist: flake8>=3.8; extra == "dev"
50
53
  Requires-Dist: mypy>=0.800; extra == "dev"
@@ -147,7 +150,7 @@ If you encounter port conflicts, you can kill existing processes:
147
150
 
148
151
  ```bash
149
152
  lsof -t -i:5002 | xargs kill -9 # mlflow
150
- lsof -t -i:8080 | xargs kill -9 # dispatcher
153
+ lsof -t -i:8081 | xargs kill -9 # dispatcher
151
154
  lsof -t -i:3000 | xargs kill -9 # frontend server
152
155
  ```
153
156
 
@@ -292,7 +295,7 @@ chmod +x ./rapidfireai/start_dev.sh
292
295
  # VSCode can port-forward localhost:3000 where the rf-frontend server will be running
293
296
 
294
297
  # for port clash issues -
295
- lsof -t -i:8080 | xargs kill -9 # dispatcher
298
+ lsof -t -i:8081 | xargs kill -9 # dispatcher
296
299
  lsof -t -i:5002 | xargs kill -9 # mlflow
297
300
  lsof -t -i:3000 | xargs kill -9 # frontend
298
301
  ```
@@ -88,7 +88,7 @@ If you encounter port conflicts, you can kill existing processes:
88
88
 
89
89
  ```bash
90
90
  lsof -t -i:5002 | xargs kill -9 # mlflow
91
- lsof -t -i:8080 | xargs kill -9 # dispatcher
91
+ lsof -t -i:8081 | xargs kill -9 # dispatcher
92
92
  lsof -t -i:3000 | xargs kill -9 # frontend server
93
93
  ```
94
94
 
@@ -233,7 +233,7 @@ chmod +x ./rapidfireai/start_dev.sh
233
233
  # VSCode can port-forward localhost:3000 where the rf-frontend server will be running
234
234
 
235
235
  # for port clash issues -
236
- lsof -t -i:8080 | xargs kill -9 # dispatcher
236
+ lsof -t -i:8081 | xargs kill -9 # dispatcher
237
237
  lsof -t -i:5002 | xargs kill -9 # mlflow
238
238
  lsof -t -i:3000 | xargs kill -9 # frontend
239
239
  ```
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "rapidfireai"
7
- version = "0.10.2rc5"
7
+ version = "0.10.3rc1"
8
8
  authors = [
9
9
  {name = "RapidFire AI Inc.", email = "support@rapidfire.ai"},
10
10
  ]
@@ -27,6 +27,7 @@ classifiers = [
27
27
  ]
28
28
  dependencies = [
29
29
  "pandas>=2.3.1",
30
+ "psutil>=5.9.0",
30
31
  "torch>=2.8.0",
31
32
  "transformers>=4.55.2",
32
33
  "peft>=0.17.0",
@@ -45,14 +46,16 @@ dependencies = [
45
46
  "loguru>=0.7.3",
46
47
  "ipython>=8.37.0",
47
48
  "jupyter>=1.1.1",
48
- "ipywidgets>=8.1.7",
49
+ "ipywidgets>=7.3.4,<9.0.0", # Support both v7 (Colab) and v8 (Jupyter)
49
50
  "uv>=0.8.14",
51
+ "tensorboard>=2.11.0",
50
52
  ]
51
53
 
52
54
  [project.optional-dependencies]
53
55
  dev = [
54
56
  "pytest>=6.0",
55
57
  "pytest-cov>=2.0",
58
+ "pytest-mock>=3.10.0",
56
59
  "black>=21.0",
57
60
  "flake8>=3.8",
58
61
  "mypy>=0.800",
@@ -9,7 +9,6 @@ from pathlib import Path
9
9
  from pprint import pformat
10
10
  from typing import Any
11
11
 
12
- import mlflow
13
12
  import torch
14
13
  from torch.utils.data import Dataset
15
14
 
@@ -20,6 +19,7 @@ from rapidfireai.db.rf_db import RfDb
20
19
  from rapidfireai.utils.automl_utils import get_flattened_config_leaf, get_runs
21
20
  from rapidfireai.utils.constants import (
22
21
  MLFLOW_URL,
22
+ TENSORBOARD_LOG_DIR,
23
23
  ControllerTask,
24
24
  ExperimentTask,
25
25
  RunEndedBy,
@@ -27,11 +27,12 @@ from rapidfireai.utils.constants import (
27
27
  RunStatus,
28
28
  TaskStatus,
29
29
  WorkerTask,
30
+ get_tracking_backend,
30
31
  )
31
32
  from rapidfireai.utils.datapaths import DataPath
32
33
  from rapidfireai.utils.exceptions import ControllerException, NoGPUsFoundException
33
34
  from rapidfireai.utils.logging import RFLogger
34
- from rapidfireai.utils.mlflow_manager import MLflowManager
35
+ from rapidfireai.utils.metric_logger import create_metric_logger
35
36
  from rapidfireai.utils.serialize import encode_payload
36
37
  from rapidfireai.utils.shm_manager import SharedMemoryManager
37
38
  from rapidfireai.utils.worker_manager import WorkerManager
@@ -79,9 +80,20 @@ class Controller:
79
80
  self.num_workers, registry, process_lock
80
81
  )
81
82
 
82
- # create mlflow manager
83
- self.mlflow_manager: MLflowManager = MLflowManager(MLFLOW_URL)
84
- self.mlflow_manager.get_experiment(self.experiment_name)
83
+ # create metric logger
84
+ # Initialize DataPath temporarily to get experiment path for tensorboard logs
85
+ experiment_path = self.db.get_experiments_path(self.experiment_name)
86
+ DataPath.initialize(self.experiment_name, experiment_path)
87
+ tensorboard_log_dir = TENSORBOARD_LOG_DIR or str(DataPath.experiments_path / "tensorboard_logs")
88
+
89
+ self.metric_logger = create_metric_logger(
90
+ backend=get_tracking_backend(),
91
+ mlflow_tracking_uri=MLFLOW_URL,
92
+ tensorboard_log_dir=tensorboard_log_dir,
93
+ )
94
+ # Get experiment if using MLflow
95
+ if hasattr(self.metric_logger, 'get_experiment'):
96
+ self.metric_logger.get_experiment(self.experiment_name)
85
97
 
86
98
  self.logger.debug("Controller initialized")
87
99
 
@@ -148,20 +160,20 @@ class Controller:
148
160
  f"Failed to create required Run DataPath directories: {e}"
149
161
  ) from e
150
162
 
151
- # create new MlFlow run
163
+ # create new tracking run
152
164
  try:
153
- # create new MlFlow run and get the mlflow_run_id
154
- mlflow_run_id = self.mlflow_manager.create_run(str(run_id))
165
+ # create new tracking run and get the mlflow_run_id
166
+ mlflow_run_id = self.metric_logger.create_run(str(run_id))
155
167
 
156
- # populate MLFlow with model config info
168
+ # populate tracking backend with model config info
157
169
  for key, value in flattened_config.items():
158
- self.mlflow_manager.log_param(mlflow_run_id, key, value)
170
+ self.metric_logger.log_param(mlflow_run_id, key, value)
159
171
  if warm_started_from:
160
- self.mlflow_manager.log_param(
172
+ self.metric_logger.log_param(
161
173
  mlflow_run_id, "warm-start", str(warm_started_from)
162
174
  )
163
175
  if cloned_from:
164
- self.mlflow_manager.log_param(
176
+ self.metric_logger.log_param(
165
177
  mlflow_run_id, "parent-run", str(cloned_from)
166
178
  )
167
179
  self.logger.debug(
@@ -172,10 +184,11 @@ class Controller:
172
184
  mlflow_run_id=mlflow_run_id,
173
185
  flattened_config=flattened_config,
174
186
  )
175
- except mlflow.exceptions.MlflowException as e:
176
- msg = f"Error creating new MLFlow run for run {run_id} - {e}."
187
+ except Exception as e:
188
+ # Catch any metric logger exceptions (MLflow, TensorBoard, etc.)
189
+ msg = f"Error creating new tracking run for run {run_id} - {e}."
177
190
  print(msg)
178
- self.mlflow_manager.end_run(mlflow_run_id)
191
+ self.metric_logger.end_run(mlflow_run_id)
179
192
  self.logger.error(msg, exc_info=True)
180
193
 
181
194
  total_runs = len(runs)
@@ -249,7 +262,7 @@ class Controller:
249
262
 
250
263
  # delete run from MLFlow
251
264
  mlflow_run_id = self.db.get_run(run_id)["mlflow_run_id"]
252
- self.mlflow_manager.delete_run(mlflow_run_id)
265
+ self.metric_logger.delete_run(mlflow_run_id)
253
266
  # mark run as deleted
254
267
  self.db.set_run_details(
255
268
  run_id=run_id,
@@ -24,11 +24,11 @@ from rapidfireai.ml.checkpoint_utils import (
24
24
  save_model_to_shared_memory,
25
25
  )
26
26
  from rapidfireai.ml.trainer import create_trainer_instance
27
- from rapidfireai.utils.constants import MLFLOW_URL, USE_SHARED_MEMORY, RunStatus, SHMObjectType, TaskStatus, WorkerTask
27
+ from rapidfireai.utils.constants import MLFLOW_URL, USE_SHARED_MEMORY, TENSORBOARD_LOG_DIR, RunStatus, SHMObjectType, TaskStatus, WorkerTask, get_tracking_backend
28
28
  from rapidfireai.utils.datapaths import DataPath
29
29
  from rapidfireai.utils.exceptions import WorkerException
30
30
  from rapidfireai.utils.logging import RFLogger, TrainingLogger
31
- from rapidfireai.utils.mlflow_manager import MLflowManager
31
+ from rapidfireai.utils.metric_logger import create_metric_logger
32
32
  from rapidfireai.utils.serialize import decode_db_payload
33
33
  from rapidfireai.utils.shm_manager import SharedMemoryManager
34
34
  from rapidfireai.utils.trainer_config import TrainerConfig
@@ -71,13 +71,20 @@ class Worker:
71
71
  # get experiment name
72
72
  self.experiment_name: str = self.db.get_running_experiment()["experiment_name"]
73
73
 
74
- # create mlflow manager
75
- self.mlflow_manager: MLflowManager = MLflowManager(MLFLOW_URL)
76
- self.mlflow_manager.get_experiment(self.experiment_name)
77
-
78
74
  # initialize data paths
79
75
  DataPath.initialize(self.experiment_name, self.db.get_experiments_path(self.experiment_name))
80
76
 
77
+ # create metric logger
78
+ tensorboard_log_dir = TENSORBOARD_LOG_DIR or str(DataPath.experiments_path / "tensorboard_logs")
79
+ self.metric_logger = create_metric_logger(
80
+ backend=get_tracking_backend(),
81
+ mlflow_tracking_uri=MLFLOW_URL,
82
+ tensorboard_log_dir=tensorboard_log_dir,
83
+ )
84
+ # Get experiment if using MLflow
85
+ if hasattr(self.metric_logger, 'get_experiment'):
86
+ self.metric_logger.get_experiment(self.experiment_name)
87
+
81
88
  # load datasets
82
89
  self.train_dataset, self.eval_dataset, self.num_chunks = self.load_datasets()
83
90
  self.len_train_dataset = len(self.train_dataset)
@@ -149,7 +156,7 @@ class Worker:
149
156
  stderr_buffer = StringIO()
150
157
  with redirect_stdout(stdout_buffer), redirect_stderr(stderr_buffer):
151
158
  trainer_instance, base_model_name = create_trainer_instance(
152
- trainer_config, self.shm_manager, USE_SHARED_MEMORY, self.mlflow_manager, chunk_id
159
+ trainer_config, self.shm_manager, USE_SHARED_MEMORY, self.metric_logger, chunk_id
153
160
  )
154
161
 
155
162
  # if first time, save checkpoint to disk
@@ -398,8 +398,35 @@ def main():
398
398
  action="version",
399
399
  version=f"RapidFire AI {__version__}"
400
400
  )
401
-
401
+
402
+ parser.add_argument(
403
+ "--tracking-backend",
404
+ choices=["mlflow", "tensorboard", "both"],
405
+ default=os.getenv("RF_TRACKING_BACKEND", "mlflow"),
406
+ help="Tracking backend to use for metrics (default: mlflow)"
407
+ )
408
+
409
+ parser.add_argument(
410
+ "--tensorboard-log-dir",
411
+ default=os.getenv("RF_TENSORBOARD_LOG_DIR", None),
412
+ help="Directory for TensorBoard logs (default: {experiment_path}/tensorboard_logs)"
413
+ )
414
+
415
+ parser.add_argument(
416
+ "--colab",
417
+ action="store_true",
418
+ help="Run in Colab mode (skips frontend, conditionally starts MLflow based on tracking backend)"
419
+ )
420
+
402
421
  args = parser.parse_args()
422
+
423
+ # Set environment variables from CLI args
424
+ if args.tracking_backend:
425
+ os.environ["RF_TRACKING_BACKEND"] = args.tracking_backend
426
+ if args.tensorboard_log_dir:
427
+ os.environ["RF_TENSORBOARD_LOG_DIR"] = args.tensorboard_log_dir
428
+ if args.colab:
429
+ os.environ["RF_COLAB_MODE"] = "true"
403
430
 
404
431
  # Handle doctor command separately
405
432
  if args.command == "doctor":
@@ -113,7 +113,7 @@ class RfDb:
113
113
  def create_experiment(
114
114
  self,
115
115
  experiment_name: str,
116
- mlflow_experiment_id: str,
116
+ mlflow_experiment_id: str | None,
117
117
  config_options: dict[str, Any],
118
118
  ) -> int:
119
119
  """Create a new experiment"""
@@ -2,7 +2,7 @@
2
2
  CREATE TABLE IF NOT EXISTS experiments (
3
3
  experiment_id INTEGER PRIMARY KEY AUTOINCREMENT,
4
4
  experiment_name TEXT NOT NULL,
5
- mlflow_experiment_id TEXT NOT NULL,
5
+ mlflow_experiment_id TEXT,
6
6
  config_options TEXT NOT NULL,
7
7
  status TEXT NOT NULL,
8
8
  current_task TEXT NOT NULL,
@@ -30,7 +30,9 @@ class Dispatcher:
30
30
  self.app: Flask = Flask(__name__)
31
31
 
32
32
  # Enable CORS for all routes
33
- _ = CORS(self.app, resources={r"/*": {"origins": CORS_ALLOWED_ORIGINS}})
33
+ # Allow all origins for local development (dispatcher runs on localhost)
34
+ # This is safe since the API is not exposed to the internet
35
+ _ = CORS(self.app, resources={r"/*": {"origins": "*"}})
34
36
 
35
37
  # register routes
36
38
  self.register_routes()
@@ -5,7 +5,7 @@ from rapidfireai.utils.constants import DispatcherConfig
5
5
 
6
6
  # Other Gunicorn settings...
7
7
  bind = f"{DispatcherConfig.HOST}:{DispatcherConfig.PORT}"
8
- workers = 2
8
+ workers = 1 # Single worker for Colab/single-user environments to save memory
9
9
 
10
10
  wsgi_app = "rapidfireai.dispatcher.dispatcher:serve_forever()"
11
11
 
@@ -17,9 +17,11 @@ from rapidfireai.utils.constants import MLFLOW_URL
17
17
  from rapidfireai.utils.exceptions import ExperimentException
18
18
  from rapidfireai.utils.experiment_utils import ExperimentUtils
19
19
  from rapidfireai.utils.logging import RFLogger
20
- from rapidfireai.utils.mlflow_manager import MLflowManager
21
20
  from rapidfireai.version import __version__
22
21
 
22
+ # Note: MLflowManager is imported lazily in get_results() to avoid
23
+ # connection attempts when using tensorboard-only mode
24
+
23
25
 
24
26
  class Experiment:
25
27
  """Class to manage the entire experiment lifecycle."""
@@ -39,6 +41,7 @@ class Experiment:
39
41
  self.experiment_id: int | None = None
40
42
  self.log_server_process: mp.Process | None = None
41
43
  self.worker_processes: list[mp.Process] = []
44
+ self._training_thread: Any = None # Track background training thread (Colab only)
42
45
 
43
46
  # create db tables
44
47
  try:
@@ -88,13 +91,68 @@ class Experiment:
88
91
  seed: int = 42,
89
92
  ) -> None:
90
93
  """Run the fit"""
94
+
95
+ # Check if training is already running
96
+ if self._training_thread is not None and self._training_thread.is_alive():
97
+ print("⚠️ Training is already running in background. Please wait for it to complete.")
98
+ return
99
+
100
+ # Detect if running in Google Colab
91
101
  try:
92
- controller = Controller(self.experiment_id, self.experiment_name)
93
- controller.run_fit(param_config, create_model_fn, train_dataset, eval_dataset, num_chunks, seed)
94
- except Exception as e:
95
- if hasattr(self, "logger"):
96
- self.logger.opt(exception=True).error(f"Error running fit: {e}")
97
- raise ExperimentException(f"Error running fit: {e}, traceback: {traceback.format_exc()}") from e
102
+ import google.colab
103
+ in_colab = True
104
+ except ImportError:
105
+ in_colab = False
106
+
107
+ if in_colab:
108
+ # Run Controller in background thread to keep kernel responsive
109
+ import threading
110
+ import sys
111
+ from io import StringIO
112
+ from IPython.display import display, HTML
113
+
114
+ def _run_controller_background():
115
+ """Run controller in background thread with output suppression"""
116
+ # Suppress stdout to avoid print statements appearing in wrong cells
117
+ old_stdout = sys.stdout
118
+ sys.stdout = StringIO()
119
+
120
+ try:
121
+ controller = Controller(self.experiment_id, self.experiment_name)
122
+ controller.run_fit(param_config, create_model_fn, train_dataset, eval_dataset, num_chunks, seed)
123
+ except Exception as e:
124
+ # Restore stdout for error logging
125
+ sys.stdout = old_stdout
126
+ if hasattr(self, "logger"):
127
+ self.logger.opt(exception=True).error(f"Error in background training: {e}")
128
+ display(HTML(f'<p style="color: red; font-weight: bold;">❌ Error in background training: {e}</p>'))
129
+ finally:
130
+ # Restore stdout
131
+ sys.stdout = old_stdout
132
+ # Display completion message
133
+ display(HTML('<p style="color: blue; font-weight: bold;">🎉 Training completed! Check InteractiveController for final results.</p>'))
134
+ self._training_thread = None
135
+
136
+ self._training_thread = threading.Thread(target=_run_controller_background, daemon=True)
137
+ self._training_thread.start()
138
+
139
+ # Use IPython display for reliable output in Colab
140
+ display(HTML(
141
+ '<div style="padding: 10px; background-color: #d4edda; border: 1px solid #28a745; border-radius: 5px; color: #155724;">'
142
+ '<b>✓ Training started in background</b><br>'
143
+ 'Use InteractiveController to monitor progress. The notebook kernel will remain responsive while training runs.<br>'
144
+ '<small>Tip: Interact with InteractiveController periodically to keep Colab active.</small>'
145
+ '</div>'
146
+ ))
147
+ else:
148
+ # Original blocking behavior for non-Colab environments
149
+ try:
150
+ controller = Controller(self.experiment_id, self.experiment_name)
151
+ controller.run_fit(param_config, create_model_fn, train_dataset, eval_dataset, num_chunks, seed)
152
+ except Exception as e:
153
+ if hasattr(self, "logger"):
154
+ self.logger.opt(exception=True).error(f"Error running fit: {e}")
155
+ raise ExperimentException(f"Error running fit: {e}, traceback: {traceback.format_exc()}") from e
98
156
 
99
157
  def get_results(self) -> pd.DataFrame:
100
158
  """
@@ -102,6 +160,16 @@ class Experiment:
102
160
  """
103
161
  try:
104
162
  runs_info_df = self.experiment_utils.get_runs_info()
163
+
164
+ # Check if there are any mlflow_run_ids before importing MLflow
165
+ has_mlflow_runs = runs_info_df.get("mlflow_run_id") is not None and runs_info_df["mlflow_run_id"].notna().any()
166
+
167
+ if not has_mlflow_runs:
168
+ # No MLflow runs to fetch, return empty DataFrame
169
+ return pd.DataFrame(columns=["run_id", "step"])
170
+
171
+ # Lazy import - only import when we actually have MLflow runs to fetch
172
+ from rapidfireai.utils.mlflow_manager import MLflowManager
105
173
  mlflow_manager = MLflowManager(MLFLOW_URL)
106
174
 
107
175
  metrics_data = []
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "files": {
3
3
  "main.css": "/static-files/static/css/main.702595df.css",
4
- "main.js": "/static-files/static/js/main.1bf27639.js",
4
+ "main.js": "/static-files/static/js/main.e7d3b759.js",
5
5
  "ml-model-trace-renderer.js": "/static-files/lib/notebook-trace-renderer/js/ml-model-trace-renderer.5490ebc325fe0f300ad9.js",
6
6
  "static/js/6019.9025341e.chunk.js": "/static-files/static/js/6019.9025341e.chunk.js",
7
7
  "static/js/6336.8153bc1c.chunk.js": "/static-files/static/js/6336.8153bc1c.chunk.js",
@@ -120,7 +120,7 @@
120
120
  "static/media/chart-line.svg": "/static-files/static/media/chart-line.0adaa2036bb4eb5956db6d0c7e925a3d.svg",
121
121
  "lib/notebook-trace-renderer/index.html": "/static-files/lib/notebook-trace-renderer/index.html",
122
122
  "main.702595df.css.map": "/static-files/static/css/main.702595df.css.map",
123
- "main.1bf27639.js.map": "/static-files/static/js/main.1bf27639.js.map",
123
+ "main.e7d3b759.js.map": "/static-files/static/js/main.e7d3b759.js.map",
124
124
  "ml-model-trace-renderer.js.map": "/static-files/lib/notebook-trace-renderer/js/ml-model-trace-renderer.5490ebc325fe0f300ad9.js.map",
125
125
  "6336.8153bc1c.chunk.js.map": "/static-files/static/js/6336.8153bc1c.chunk.js.map",
126
126
  "9478.cbf55ef3.chunk.js.map": "/static-files/static/js/9478.cbf55ef3.chunk.js.map",
@@ -216,6 +216,6 @@
216
216
  },
217
217
  "entrypoints": [
218
218
  "static/css/main.702595df.css",
219
- "static/js/main.1bf27639.js"
219
+ "static/js/main.e7d3b759.js"
220
220
  ]
221
221
  }
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"/><link rel="shortcut icon" href="./static-files/favicon.ico"/><meta name="theme-color" content="#000000"/><link rel="manifest" href="./static-files/manifest.json" crossorigin="use-credentials"/><title>RapidFire AI</title><script defer="defer" src="static-files/static/js/main.1bf27639.js"></script><link href="static-files/static/css/main.702595df.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root" class="mlflow-ui-container"></div><div id="modal" class="mlflow-ui-container"></div></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"/><link rel="shortcut icon" href="./static-files/favicon.ico"/><meta name="theme-color" content="#000000"/><link rel="manifest" href="./static-files/manifest.json" crossorigin="use-credentials"/><title>RapidFire AI</title><script defer="defer" src="static-files/static/js/main.e7d3b759.js"></script><link href="static-files/static/css/main.702595df.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root" class="mlflow-ui-container"></div><div id="modal" class="mlflow-ui-container"></div></body></html>