featrixsphere 0.2.1637__tar.gz → 0.2.2279__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 (208) hide show
  1. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/PKG-INFO +1 -1
  2. featrixsphere-0.2.2279/VERSION +1 -0
  3. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrix-update.py +89 -14
  4. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrixsphere/__init__.py +1 -1
  5. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrixsphere/client.py +431 -65
  6. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrixsphere.egg-info/PKG-INFO +1 -1
  7. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrixsphere.egg-info/SOURCES.txt +24 -3
  8. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/requirements.txt +0 -1
  9. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/api.py +1147 -79
  10. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/celery_app.py +1232 -262
  11. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/config.py +9 -5
  12. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/event_log.py +1 -1
  13. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/featrix_watchdog.py +94 -2
  14. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/gc_cleanup.py +39 -1
  15. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/celery_job_recovery.py +133 -6
  16. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/convergence_monitor.py +43 -0
  17. featrixsphere-0.2.2279/src/lib/crash_tracker.py +283 -0
  18. featrixsphere-0.2.2279/src/lib/distribution_shift_detector.py +693 -0
  19. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/epoch_projections.py +1 -1
  20. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/es_projections.py +1 -1
  21. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/es_training.py +54 -20
  22. featrixsphere-0.2.2279/src/lib/es_training_wrapper.py +131 -0
  23. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/__init__.py +1 -1
  24. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/__init__.py +2 -2
  25. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/calibration_utils.py +8 -1
  26. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/classification_metrics.py +13 -12
  27. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/config.py +1 -1
  28. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/data_frame_data_set.py +1 -1
  29. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/dataloader_utils.py +87 -26
  30. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/detect.py +1 -1
  31. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/domain_codec.py +3 -3
  32. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/embedded_space.py +1660 -518
  33. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/embedding_lr_scheduler.py +1 -1
  34. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/embedding_space_utils.py +6 -1
  35. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/embedding_utils.py +1 -1
  36. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/encoders.py +148 -43
  37. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/enrich.py +1 -1
  38. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/es_projection.py +1 -1
  39. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/exceptions.py +1 -1
  40. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/featrix_csv.py +1 -1
  41. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/featrix_json.py +1 -1
  42. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/featrix_module_dict.py +1 -1
  43. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/featrix_token.py +7 -5
  44. featrixsphere-0.2.2279/src/lib/featrix/neural/feature_engineer.py +306 -0
  45. featrixsphere-0.2.2279/src/lib/featrix/neural/feature_suggestion_tracker.py +372 -0
  46. featrixsphere-0.2.2279/src/lib/featrix/neural/gpu_utils.py +724 -0
  47. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/guardrails.py +1 -1
  48. featrixsphere-0.2.2279/src/lib/featrix/neural/hybrid_column_detector.py +466 -0
  49. featrixsphere-0.2.2279/src/lib/featrix/neural/hybrid_encoders.py +344 -0
  50. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/input_data_file.py +15 -8
  51. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/input_data_set.py +419 -44
  52. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/integrity.py +1 -1
  53. featrixsphere-0.2.2279/src/lib/featrix/neural/io_utils.py +1380 -0
  54. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/json_cache.py +2 -2
  55. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/json_codec.py +2 -2
  56. featrixsphere-0.2.2279/src/lib/featrix/neural/llm/__init__.py +6 -0
  57. featrixsphere-0.2.2279/src/lib/featrix/neural/llm/schema_analyzer.py +143 -0
  58. featrixsphere-0.2.2279/src/lib/featrix/neural/logging_config.py +135 -0
  59. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/mask_tracker.py +18 -10
  60. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/model_config.py +53 -1
  61. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/model_hash.py +1 -1
  62. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/movie_frame_task.py +3 -6
  63. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/network_viz.py +1 -1
  64. featrixsphere-0.2.2279/src/lib/featrix/neural/platform_utils.py +84 -0
  65. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/prng_control.py +6 -6
  66. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_adaptive_training.py +1 -1
  67. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_checkpoint_dict_reconstruction.py +1 -1
  68. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_confusion_matrix_metadata.py +1 -1
  69. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_embedding_quality.py +1 -1
  70. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_embedding_space.py +1 -1
  71. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_extend_embedding_space.py +1 -1
  72. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_focal_comparison.py +1 -1
  73. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_focal_comparison_enhanced.py +1 -1
  74. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_focal_loss_single_predictor.py +1 -1
  75. featrixsphere-0.2.2279/src/lib/featrix/neural/qa/test_hybrid_columns.py +481 -0
  76. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_label_smoothing.py +1 -1
  77. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_monitor_integration.py +1 -1
  78. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_timeline_quick.py +1 -1
  79. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_training_monitor.py +1 -1
  80. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/scalar_codec.py +5 -4
  81. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/set_codec.py +31 -16
  82. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/setlist_codec.py +10 -4
  83. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/simple_mlp.py +1 -1
  84. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/single_predictor.py +1575 -427
  85. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/sphere_config.py +37 -5
  86. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/sqlite_utils.py +1 -1
  87. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/stopwatch.py +1 -1
  88. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/string_analysis.py +1 -1
  89. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/string_cache.py +350 -195
  90. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/string_codec.py +599 -307
  91. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/timestamp_codec.py +1 -1
  92. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/training_context_manager.py +1 -1
  93. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/training_history_db.py +1 -1
  94. featrixsphere-0.2.2279/src/lib/featrix/neural/training_logger.py +974 -0
  95. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/transformer_encoder.py +50 -1
  96. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/url_codec.py +3 -3
  97. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/url_parser.py +1 -1
  98. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/utils.py +58 -22
  99. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/vector_codec.py +4 -4
  100. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/world_data.py +1 -1
  101. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/job_manager.py +55 -20
  102. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/json_encoder_cache.py +1 -1
  103. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/knn_training.py +7 -4
  104. featrixsphere-0.2.2279/src/lib/meta_learning_client.py +339 -0
  105. featrixsphere-0.2.2279/src/lib/quick_architecture_search.py +292 -0
  106. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/session_chains.py +185 -37
  107. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/session_manager.py +483 -81
  108. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/single_predictor_cv.py +5 -4
  109. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/single_predictor_training.py +562 -216
  110. featrixsphere-0.2.2279/src/lib/sp_training_wrapper.py +99 -0
  111. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/structureddata.py +2 -4
  112. featrixsphere-0.2.2279/src/lib/system_health_monitor.py +465 -0
  113. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/training_monitor.py +1 -1
  114. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/utils.py +1 -1
  115. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/weightwatcher_tracking.py +70 -10
  116. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/node-install.sh +463 -58
  117. featrixsphere-0.2.2279/src/query_schema_worker.py +255 -0
  118. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/render_sphere.py +1 -1
  119. featrixsphere-0.2.2279/src/repair_checkpoint.py +246 -0
  120. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/start_celery_cpu_worker.sh +0 -1
  121. featrixsphere-0.2.2279/src/start_celery_gpu_worker.sh +142 -0
  122. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/start_celery_worker.sh +0 -1
  123. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/version.py +24 -9
  124. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/system_monitor.py +524 -94
  125. featrixsphere-0.2.2279/tests/test_client_data.py +145 -0
  126. featrixsphere-0.2.2279/tests/test_client_predictions.py +266 -0
  127. featrixsphere-0.2.2279/tests/test_client_sessions.py +268 -0
  128. featrixsphere-0.2.2279/tests/test_client_training.py +149 -0
  129. featrixsphere-0.2.2279/tests/test_local_integration.py +270 -0
  130. featrixsphere-0.2.1637/VERSION +0 -1
  131. featrixsphere-0.2.1637/src/lib/es_training_wrapper.py +0 -51
  132. featrixsphere-0.2.1637/src/lib/featrix/neural/MetaDataCache.py +0 -203
  133. featrixsphere-0.2.1637/src/lib/featrix/neural/device.py +0 -40
  134. featrixsphere-0.2.1637/src/lib/featrix/neural/io_utils.py +0 -822
  135. featrixsphere-0.2.1637/src/lib/featrix/neural/logging_config.py +0 -67
  136. featrixsphere-0.2.1637/src/start_celery_gpu_worker.sh +0 -39
  137. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/MANIFEST.in +0 -0
  138. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/README.md +0 -0
  139. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrixsphere/test_client.py +0 -0
  140. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrixsphere.egg-info/dependency_links.txt +0 -0
  141. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrixsphere.egg-info/entry_points.txt +0 -0
  142. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrixsphere.egg-info/not-zip-safe +0 -0
  143. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrixsphere.egg-info/requires.txt +0 -0
  144. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrixsphere.egg-info/top_level.txt +0 -0
  145. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/nv-install.sh +0 -0
  146. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/setup.cfg +0 -0
  147. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/setup.py +0 -0
  148. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/auto_upgrade_monitor.py +0 -0
  149. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/build_version.py +0 -0
  150. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/demo_existing_model.py +0 -0
  151. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/demo_label_updates.py +0 -0
  152. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/deploy.py +0 -0
  153. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/deploy_cache_debug.sh +0 -0
  154. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/ensure_watchdog_running.sh +0 -0
  155. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/error_tracker.py +0 -0
  156. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/example_api_usage.py +0 -0
  157. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/example_prediction_feedback.py +0 -0
  158. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/example_train_predictor.py +0 -0
  159. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/api_event_retry.py +0 -0
  160. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/dropout_scheduler.py +0 -0
  161. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/hubspot_free_domains_list_may_2025.py +0 -0
  162. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/demo_advisor_decisions.py +0 -0
  163. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/example_complete_workflow.py +0 -0
  164. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/generate_focal_report.py +0 -0
  165. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/model_advisor.py +0 -0
  166. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/show_results.py +0 -0
  167. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_piecewise_epochs.py +0 -0
  168. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_predict_during_training.py +0 -0
  169. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_warning_tracking.py +0 -0
  170. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/visualize_training_timeline.py +0 -0
  171. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/single_predictor_mlp.py +0 -0
  172. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/string_list_codec.py +0 -0
  173. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/training_event.py +0 -0
  174. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/training_exceptions.py +0 -0
  175. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix_debug.py +0 -0
  176. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/queue_manager.py +0 -0
  177. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/sphere_config.py +0 -0
  178. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/vector_db.py +0 -0
  179. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/webhook_helpers.py +0 -0
  180. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/llm_client.py +0 -0
  181. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/manage_churro.sh +0 -0
  182. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/migrate_string_cache_naming.py +0 -0
  183. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/neural.py +0 -0
  184. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/prediction_drift_monitor.py +0 -0
  185. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/prediction_persistence_worker.py +0 -0
  186. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/quick_test_deployment.sh +0 -0
  187. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/recreate_session.py +0 -0
  188. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/redis_job_progress.py +0 -0
  189. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/redis_prediction_cli.py +0 -0
  190. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/redis_prediction_store.py +0 -0
  191. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/regenerate_training_movie.py +0 -0
  192. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/restart_celery_worker.sh +0 -0
  193. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/run_api_server.sh +0 -0
  194. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/send_email.py +0 -0
  195. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/slack.py +0 -0
  196. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/standalone_prediction.py +0 -0
  197. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/start_churro_server.sh +0 -0
  198. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/tail-watch.py +0 -0
  199. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/test_api_client.py +0 -0
  200. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/test_complete_workflow.py +0 -0
  201. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/test_json_tables_prediction.py +0 -0
  202. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/test_redis_predictions.py +0 -0
  203. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/test_server_connection.py +0 -0
  204. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/test_session_models.py +0 -0
  205. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/test_single_predictor_api.py +0 -0
  206. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/test_upload_endpoint.py +0 -0
  207. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/tree.py +0 -0
  208. {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: featrixsphere
3
- Version: 0.2.1637
3
+ Version: 0.2.2279
4
4
  Summary: Transform any CSV into a production-ready ML model in minutes, not months.
5
5
  Home-page: https://github.com/Featrix/sphere
6
6
  Author: Featrix
@@ -0,0 +1 @@
1
+ 0.2.2278
@@ -208,9 +208,13 @@ def find_newest_version(index: Dict[str, Any]) -> Optional[Dict[str, Any]]:
208
208
  print("⚠️ No files with version information found")
209
209
  return None
210
210
 
211
- # Sort by version (newest first)
211
+ # Sort by version (newest first), then by date_modified (newest first) as tiebreaker
212
+ # This ensures when multiple builds have the same version, we get the most recent one
212
213
  versioned_files.sort(
213
- key=lambda x: tuple(int(p) for p in x['version'].split('.')[:3]),
214
+ key=lambda x: (
215
+ tuple(int(p) for p in x['version'].split('.')[:3]),
216
+ x.get('date_modified', '')
217
+ ),
214
218
  reverse=True
215
219
  )
216
220
 
@@ -267,16 +271,62 @@ def install_package(package_file: Path, force: bool = False) -> bool:
267
271
  print(f" Package version: {package_version}")
268
272
  print(f" Package hash: {package_hash}")
269
273
 
270
- # Check if already deployed (unless forced)
271
- if not force:
272
- deployed_hash = None
273
- if Path("/sphere/app/VERSION_HASH").exists():
274
- deployed_hash = Path("/sphere/app/VERSION_HASH").read_text().strip()
275
-
276
- if deployed_hash and package_hash != "unknown" and package_hash == deployed_hash:
274
+ # Check if already deployed
275
+ deployed_hash = None
276
+ deployed_version = None
277
+ if Path("/sphere/app/VERSION_HASH").exists():
278
+ deployed_hash = Path("/sphere/app/VERSION_HASH").read_text().strip()
279
+ if Path("/sphere/app/VERSION").exists():
280
+ deployed_version = Path("/sphere/app/VERSION").read_text().strip()
281
+
282
+ same_hash = deployed_hash and package_hash != "unknown" and package_hash == deployed_hash
283
+ same_version = deployed_version and package_version != "unknown" and package_version == deployed_version
284
+
285
+ if same_hash and same_version:
286
+ if not force:
277
287
  print(f"\n⏭️ This package is already deployed (hash: {package_hash})")
278
288
  print(f" Skipping installation. Use --force to reinstall anyway.")
279
289
  return True
290
+ else:
291
+ # FORCE REINSTALL OF SAME BUILD - MAKE IT SUPER OBVIOUS
292
+ import time
293
+ print()
294
+ print()
295
+ print("\033[1;33m" + "╔" + "=" * 78 + "╗" + "\033[0m")
296
+ print("\033[1;33m" + "║" + " " * 78 + "║" + "\033[0m")
297
+ print("\033[1;33m" + "║" + " ⚠️ ⚠️ ⚠️ REINSTALLING THE EXACT SAME BUILD ⚠️ ⚠️ ⚠️".ljust(78) + "║" + "\033[0m")
298
+ print("\033[1;33m" + "║" + " " * 78 + "║" + "\033[0m")
299
+ print("\033[1;33m" + "╚" + "=" * 78 + "╝" + "\033[0m")
300
+ print()
301
+ print("\033[1;33m" + "⚠️ WARNING: You are using --force to reinstall the SAME build!" + "\033[0m")
302
+ print()
303
+ print(f" Currently installed:")
304
+ print(f" Version: {deployed_version}")
305
+ print(f" Hash: {deployed_hash}")
306
+ print()
307
+ print(f" Package to install:")
308
+ print(f" Version: {package_version}")
309
+ print(f" Hash: {package_hash}")
310
+ print()
311
+ print("\033[1;33m" + " 👉 THIS IS THE EXACT SAME BUILD (version AND hash match)" + "\033[0m")
312
+ print()
313
+ print(" This will:")
314
+ print(" • Kill and restart all services")
315
+ print(" • Copy the exact same files over existing files")
316
+ print(" • Take 2-3 minutes to complete")
317
+ print()
318
+ print(" Common reasons to do this:")
319
+ print(" • Testing deployment process")
320
+ print(" • Services are broken and need clean restart")
321
+ print(" • Files were manually modified and need to be restored")
322
+ print()
323
+ for i in range(10, 0, -1):
324
+ print(f"\r ⏳ Starting reinstall in {i} seconds... (Ctrl+C to abort)", end='', flush=True)
325
+ time.sleep(1)
326
+ print()
327
+ print()
328
+ print("\033[1;32m" + "▶️ Proceeding with reinstall..." + "\033[0m")
329
+ print()
280
330
 
281
331
  # Find node-install.sh
282
332
  install_script = None
@@ -306,10 +356,14 @@ def install_package(package_file: Path, force: bool = False) -> bool:
306
356
  # 1. We've already done version checking in featrix-update.py
307
357
  # 2. The package is a specific version we want to install
308
358
  # 3. node-install.sh checks git state from /home/mitch/sphere which may not match the package
359
+
360
+ # node-install.sh REQUIRES root (checked at line 326)
361
+ # It calls 'sbit fix-permissions' which needs sbit to have setuid bit
362
+ # The install script itself must run as root
309
363
  cmd = ["sudo", str(install_script), "--force"]
310
364
  print(f" Using --force flag (installing from package)")
311
365
 
312
- # Run the install script with sudo
366
+ # Run the install script
313
367
  result = subprocess.run(
314
368
  cmd,
315
369
  check=True,
@@ -409,10 +463,24 @@ def main():
409
463
  newest_version = newest['version']
410
464
  newest_filename = newest['filename']
411
465
  newest_hash = newest.get('hash')
466
+ newest_date = newest.get('date_modified')
412
467
  newest_url = f"{FIRMWARE_SERVER}/{newest_filename}"
413
468
 
469
+ # Format date if available
470
+ date_str = ""
471
+ if newest_date:
472
+ try:
473
+ # Parse ISO format date and format nicely
474
+ date_obj = datetime.fromisoformat(newest_date.replace('Z', '+00:00'))
475
+ date_str = date_obj.strftime("%Y-%m-%d %H:%M:%S")
476
+ except Exception:
477
+ # Fallback to raw date if parsing fails
478
+ date_str = newest_date
479
+
414
480
  print(f"\n📊 Available versions:")
415
481
  print(f" Newest: {newest_version} ({newest_filename})")
482
+ if date_str:
483
+ print(f" Date: {date_str}")
416
484
  if newest_hash:
417
485
  print(f" Hash: {newest_hash[:16]}...")
418
486
 
@@ -426,12 +494,19 @@ def main():
426
494
  print(f"\n✅ Update available: {current_version} → {newest_version}")
427
495
  should_update = True
428
496
  elif comparison == 0:
429
- print(f"\n✅ Already on latest version: {current_version}")
430
- if args.force:
431
- print(" --force flag set, will reinstall anyway")
497
+ # Same version - check if hash is different (newer build of same version)
498
+ current_hash = get_current_version_hash()
499
+ if current_hash and newest_hash and current_hash != newest_hash:
500
+ print(f"\n✅ Newer build available: {current_version} ({current_hash} → {newest_hash[:8]})")
501
+ print(f" Same version number but different hash (newer build)")
432
502
  should_update = True
433
503
  else:
434
- should_update = False
504
+ print(f"\n✅ Already on latest version: {current_version}")
505
+ if args.force:
506
+ print(" --force flag set, will reinstall anyway")
507
+ should_update = True
508
+ else:
509
+ should_update = False
435
510
  else:
436
511
  print(f"\n⚠️ Current version ({current_version}) is newer than available ({newest_version})")
437
512
  if args.force:
@@ -38,7 +38,7 @@ Example:
38
38
  ... labels=['Experiment A', 'Experiment B'])
39
39
  """
40
40
 
41
- __version__ = "0.2.1637"
41
+ __version__ = "0.2.2279"
42
42
  __author__ = "Featrix"
43
43
  __email__ = "support@featrix.com"
44
44
  __license__ = "MIT"