featrixsphere 0.2.6127__tar.gz → 0.2.6379__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 (307) hide show
  1. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/PKG-INFO +1 -1
  2. featrixsphere-0.2.6379/VERSION +1 -0
  3. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/featrixsphere/__init__.py +1 -1
  4. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/featrixsphere/client.py +54 -42
  5. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/featrixsphere.egg-info/PKG-INFO +1 -1
  6. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/featrixsphere.egg-info/SOURCES.txt +17 -2
  7. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/api.py +3 -2
  8. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/celery_app.py +3 -2
  9. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/celery_job_recovery.py +113 -4
  10. featrixsphere-0.2.6379/src/lib/featrix/auto_calibrate.py +924 -0
  11. featrixsphere-0.2.6379/src/lib/featrix/neural/auc_animation.py +423 -0
  12. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/calibration_utils.py +218 -146
  13. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/charting.py +139 -37
  14. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/cluster_cohesion_tracker.py +307 -4
  15. featrixsphere-0.2.6379/src/lib/featrix/neural/default_training_rules.py +127 -0
  16. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/detect.py +65 -0
  17. featrixsphere-0.2.6379/src/lib/featrix/neural/domain_codec.py +504 -0
  18. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/dropout_scheduler.py +4 -4
  19. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/dynamic_relationship_extractor.py +1528 -47
  20. featrixsphere-0.2.6379/src/lib/featrix/neural/email_codec.py +455 -0
  21. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/email_domain_ops.py +227 -0
  22. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/embedded_space.py +1674 -495
  23. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/embedding_utils.py +5 -2
  24. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/encoders.py +909 -142
  25. featrixsphere-0.2.6379/src/lib/featrix/neural/es_training_callbacks.py +353 -0
  26. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/foundation_input_data.py +150 -54
  27. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/gpu_utils.py +22 -3
  28. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/hybrid_encoders.py +3 -3
  29. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/input_data_set.py +53 -0
  30. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/io_utils.py +13 -0
  31. featrixsphere-0.2.6379/src/lib/featrix/neural/junction_adapter.py +108 -0
  32. featrixsphere-0.2.6379/src/lib/featrix/neural/loss_framework.py +1294 -0
  33. featrixsphere-0.2.6379/src/lib/featrix/neural/loss_functions/__init__.py +12 -0
  34. featrixsphere-0.2.6379/src/lib/featrix/neural/loss_functions/list_versions.py +95 -0
  35. featrixsphere-0.2.6379/src/lib/featrix/neural/loss_functions/loss_functions_01Jan2026.py +585 -0
  36. featrixsphere-0.2.6379/src/lib/featrix/neural/loss_functions/loss_functions_01Jul2025.py +633 -0
  37. featrixsphere-0.2.6379/src/lib/featrix/neural/loss_functions/loss_functions_21Jan2026.py +592 -0
  38. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/loss_short_embedding.py +241 -10
  39. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/lr_timeline.py +6 -3
  40. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/mask_bias_tracker.py +93 -25
  41. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/model_config.py +4 -1
  42. featrixsphere-0.2.6379/src/lib/featrix/neural/qa/test_all_codecs.py +663 -0
  43. featrixsphere-0.2.6379/src/lib/featrix/neural/qa/test_cls_vs_mean_pooling.py +259 -0
  44. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/scalar_codec.py +71 -19
  45. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/set_codec.py +45 -20
  46. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/setlist_codec.py +3 -2
  47. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/simple_mlp.py +98 -22
  48. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/single_predictor.py +1174 -256
  49. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/sphere_config.py +82 -19
  50. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/sqlite_utils.py +64 -3
  51. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/string_codec.py +46 -19
  52. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/timestamp_codec.py +8 -6
  53. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/training_banner.py +19 -21
  54. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/training_context_manager.py +33 -0
  55. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/training_data_timeline.py +39 -0
  56. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/training_history_db.py +10 -5
  57. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/training_logger.py +3 -3
  58. featrixsphere-0.2.6379/src/lib/featrix/neural/training_rules.py +672 -0
  59. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/transformer_encoder.py +350 -31
  60. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/vector_codec.py +3 -2
  61. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/weight_timeline.py +210 -13
  62. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/world_data.py +108 -0
  63. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/xgboost_classifier.py +88 -15
  64. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/structureddata.py +26 -0
  65. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/weightwatcher_tracking.py +18 -1
  66. featrixsphere-0.2.6379/tests/test_foundation_mode_local.py +374 -0
  67. featrixsphere-0.2.6127/VERSION +0 -1
  68. featrixsphere-0.2.6127/src/lib/featrix/neural/domain_codec.py +0 -471
  69. featrixsphere-0.2.6127/src/lib/featrix/neural/random_utils.py +0 -412
  70. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/MANIFEST.in +0 -0
  71. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/README.md +0 -0
  72. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/featrix-update.py +0 -0
  73. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/featrixsphere/api/__init__.py +0 -0
  74. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/featrixsphere/api/api_endpoint.py +0 -0
  75. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/featrixsphere/api/client.py +0 -0
  76. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/featrixsphere/api/foundational_model.py +0 -0
  77. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/featrixsphere/api/http_client.py +0 -0
  78. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/featrixsphere/api/notebook_helper.py +0 -0
  79. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/featrixsphere/api/prediction_result.py +0 -0
  80. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/featrixsphere/api/predictor.py +0 -0
  81. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/featrixsphere/api/reference_record.py +0 -0
  82. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/featrixsphere/api/vector_database.py +0 -0
  83. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/featrixsphere.egg-info/dependency_links.txt +0 -0
  84. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/featrixsphere.egg-info/entry_points.txt +0 -0
  85. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/featrixsphere.egg-info/not-zip-safe +0 -0
  86. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/featrixsphere.egg-info/requires.txt +0 -0
  87. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/featrixsphere.egg-info/top_level.txt +0 -0
  88. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/nv-install.sh +0 -0
  89. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/requirements.txt +0 -0
  90. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/setup.cfg +0 -0
  91. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/setup.py +0 -0
  92. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/auto_upgrade_monitor.py +0 -0
  93. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/build_version.py +0 -0
  94. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/cluster_movie_renderer.py +0 -0
  95. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/config.py +0 -0
  96. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/demo_existing_model.py +0 -0
  97. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/demo_label_updates.py +0 -0
  98. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/deploy.py +0 -0
  99. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/deploy_cache_debug.sh +0 -0
  100. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/ensure_watchdog_running.sh +0 -0
  101. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/error_tracker.py +0 -0
  102. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/event_log.py +0 -0
  103. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/example_api_usage.py +0 -0
  104. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/example_prediction_feedback.py +0 -0
  105. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/example_train_predictor.py +0 -0
  106. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/featrix_watchdog.py +0 -0
  107. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/gc_cleanup.py +0 -0
  108. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/api_event_retry.py +0 -0
  109. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/backing_db.py +0 -0
  110. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/convergence_monitor.py +0 -0
  111. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/crash_tracker.py +0 -0
  112. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/distribution_shift_detector.py +0 -0
  113. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/embedding_space_io.py +0 -0
  114. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/epoch_projections.py +0 -0
  115. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/es_projections.py +0 -0
  116. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/es_training.py +0 -0
  117. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/es_training_wrapper.py +0 -0
  118. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/__init__.py +0 -0
  119. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/download-data/build_geo_weather_db.py +0 -0
  120. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/download-data/download_geographic_data.py +0 -0
  121. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/download-data/download_road_data.py +0 -0
  122. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/download-data/download_weather_data.py +0 -0
  123. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/download-data/install-data.sh +0 -0
  124. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/__init__.py +0 -0
  125. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/adaptive_event_log.py +0 -0
  126. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/causal_relationship_scorer.py +0 -0
  127. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/classification_metrics.py +0 -0
  128. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/config.py +0 -0
  129. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/curve_plots_example.py +0 -0
  130. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/customer_quality_tracker.py +0 -0
  131. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/data_frame_data_set.py +0 -0
  132. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/dataloader_utils.py +0 -0
  133. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/dimension_validator.py +0 -0
  134. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/duration_ops.py +0 -0
  135. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/embedding_lr_scheduler.py +0 -0
  136. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/embedding_quality.py +0 -0
  137. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/embedding_space_utils.py +0 -0
  138. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/enrich.py +0 -0
  139. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/es_projection.py +0 -0
  140. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/exceptions.py +0 -0
  141. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/featrix_csv.py +0 -0
  142. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/featrix_json.py +0 -0
  143. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/featrix_module_dict.py +0 -0
  144. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/featrix_token.py +0 -0
  145. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/feature_effectiveness_tracker.py +0 -0
  146. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/feature_engineer.py +0 -0
  147. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/feature_suggestion_tracker.py +0 -0
  148. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/geo_foundation.py +0 -0
  149. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/geo_ops.py +0 -0
  150. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/gradient_flow.py +0 -0
  151. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/graph_encoder.py +0 -0
  152. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/graph_encoder_training.py +0 -0
  153. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/guardrails.py +0 -0
  154. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/host_memory_tracker.py +0 -0
  155. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/hubspot_free_domains_list_may_2025.py +0 -0
  156. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/hybrid_column_detector.py +0 -0
  157. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/hyperparam_search.py +0 -0
  158. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/input_data_file.py +0 -0
  159. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/integrity.py +0 -0
  160. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/ip_address_ops.py +0 -0
  161. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/json_cache.py +0 -0
  162. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/json_codec.py +0 -0
  163. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/llm/__init__.py +0 -0
  164. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/llm/schema_analyzer.py +0 -0
  165. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/local_string_cache.py +0 -0
  166. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/logging_config.py +0 -0
  167. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/mask_tracker.py +0 -0
  168. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/model_hash.py +0 -0
  169. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/movie_frame_task.py +0 -0
  170. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/multi_table_dataset.py +0 -0
  171. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/multi_table_embedding_space.py +0 -0
  172. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/network_viz.py +0 -0
  173. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/pair_scorer.py +0 -0
  174. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/per_epoch_quality.py +0 -0
  175. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/platform_utils.py +0 -0
  176. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/prng_control.py +0 -0
  177. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/demo_advisor_decisions.py +0 -0
  178. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/example_complete_workflow.py +0 -0
  179. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/generate_focal_report.py +0 -0
  180. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/model_advisor.py +0 -0
  181. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/show_results.py +0 -0
  182. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_adaptive_loss_benchmark.py +0 -0
  183. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_adaptive_training.py +0 -0
  184. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_checkpoint_dict_reconstruction.py +0 -0
  185. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_confusion_matrix_metadata.py +0 -0
  186. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_data_timestamps.py +0 -0
  187. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_embedding_quality.py +0 -0
  188. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_embedding_space.py +0 -0
  189. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_epoch_class_separation.py +0 -0
  190. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_extend_embedding_space.py +0 -0
  191. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_feature_engineering_prediction.py +0 -0
  192. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_focal_comparison.py +0 -0
  193. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_focal_comparison_enhanced.py +0 -0
  194. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_focal_loss_single_predictor.py +0 -0
  195. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_hybrid_columns.py +0 -0
  196. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_label_smoothing.py +0 -0
  197. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_lift_measurement_validation.py +0 -0
  198. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_lr_timeline_smoothness.py +0 -0
  199. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_min_support_rank_scaling.py +0 -0
  200. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_monitor_integration.py +0 -0
  201. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_multi_dataset.py +0 -0
  202. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_piecewise_epochs.py +0 -0
  203. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_predict_during_training.py +0 -0
  204. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_relationship_extractor_integration.py +0 -0
  205. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_relationship_extractor_mixed_types.py +0 -0
  206. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_set_encoder_strategies.py +0 -0
  207. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_temporal_relationships.py +0 -0
  208. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_timeline_quick.py +0 -0
  209. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_training_data_timeline.py +0 -0
  210. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_training_monitor.py +0 -0
  211. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/test_warning_tracking.py +0 -0
  212. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/qa/visualize_training_timeline.py +0 -0
  213. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/relationship_complexity.py +0 -0
  214. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/relationship_estimator.py +0 -0
  215. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/relationship_extractor.py +0 -0
  216. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/relationship_importance_validator.py +0 -0
  217. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/relationship_performance.py +0 -0
  218. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/relationship_preanalysis.py +0 -0
  219. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/relationship_search.py +0 -0
  220. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/scalar_scalar_ops.py +0 -0
  221. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/scalar_timestamp_ops.py +0 -0
  222. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/schema_history.py +0 -0
  223. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/set_scalar_ops.py +0 -0
  224. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/set_set_ops.py +0 -0
  225. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/set_timestamp_ops.py +0 -0
  226. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/simple_string_cache.py +0 -0
  227. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/single_predictor_mlp.py +0 -0
  228. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/stopwatch.py +0 -0
  229. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/strategy_scalar_scalar_ops.py +0 -0
  230. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/strategy_set_scalar_ops.py +0 -0
  231. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/strategy_string_scalar_ops.py +0 -0
  232. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/string_analysis.py +0 -0
  233. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/string_cache.py +0 -0
  234. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/string_list_codec.py +0 -0
  235. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/string_scalar_ops.py +0 -0
  236. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/string_set_ops.py +0 -0
  237. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/temporal_relationship_ops.py +0 -0
  238. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/timeline_events.py +0 -0
  239. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/tools/__init__.py +0 -0
  240. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/tools/compare_clusters.py +0 -0
  241. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/training_event.py +0 -0
  242. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/training_exceptions.py +0 -0
  243. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/training_movie_writer.py +0 -0
  244. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/training_timeline.py +0 -0
  245. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/type_aware_ops_config.py +0 -0
  246. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/url_codec.py +0 -0
  247. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/url_ops.py +0 -0
  248. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/url_parser.py +0 -0
  249. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/us_holidays.py +0 -0
  250. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/utils.py +0 -0
  251. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix/neural/webhooks.py +0 -0
  252. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/featrix_debug.py +0 -0
  253. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/job_manager.py +0 -0
  254. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/json_encoder_cache.py +0 -0
  255. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/knn_training.py +0 -0
  256. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/meta_learning_client.py +0 -0
  257. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/model_card_repair.py +0 -0
  258. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/model_repair.py +0 -0
  259. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/pre_analysis_wrapper.py +0 -0
  260. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/queue_manager.py +0 -0
  261. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/quick_architecture_search.py +0 -0
  262. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/session_chains.py +0 -0
  263. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/session_manager.py +0 -0
  264. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/single_predictor_cv.py +0 -0
  265. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/single_predictor_training.py +0 -0
  266. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/sp_training_wrapper.py +0 -0
  267. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/sphere_config.py +0 -0
  268. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/system_health_monitor.py +0 -0
  269. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/training_monitor.py +0 -0
  270. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/utils.py +0 -0
  271. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/vector_db.py +0 -0
  272. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/lib/webhook_helpers.py +0 -0
  273. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/llm_client.py +0 -0
  274. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/load_and_test_model.py +0 -0
  275. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/manage_churro.sh +0 -0
  276. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/migrate_string_cache_naming.py +0 -0
  277. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/neural.py +0 -0
  278. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/node-install.sh +0 -0
  279. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/prediction_client.py +0 -0
  280. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/prediction_drift_monitor.py +0 -0
  281. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/prediction_persistence_worker.py +0 -0
  282. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/prediction_server.py +0 -0
  283. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/query_schema_worker.py +0 -0
  284. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/quick_test_deployment.sh +0 -0
  285. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/recreate_session.py +0 -0
  286. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/redis_job_progress.py +0 -0
  287. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/redis_prediction_cli.py +0 -0
  288. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/redis_prediction_store.py +0 -0
  289. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/regenerate_training_movie.py +0 -0
  290. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/render_sphere.py +0 -0
  291. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/repair_checkpoint.py +0 -0
  292. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/repair_model.py +0 -0
  293. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/resubmit_es_completion.py +0 -0
  294. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/run_api_server.sh +0 -0
  295. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/send_email.py +0 -0
  296. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/slack.py +0 -0
  297. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/standalone_prediction.py +0 -0
  298. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/start_celery_cpu_worker.sh +0 -0
  299. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/start_celery_gpu_worker.sh +0 -0
  300. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/start_celery_movie_worker.sh +0 -0
  301. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/tail-watch.py +0 -0
  302. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/test_api_client.py +0 -0
  303. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/tree.py +0 -0
  304. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/upgrade-taco-python312.sh +0 -0
  305. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/utils.py +0 -0
  306. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/src/version.py +0 -0
  307. {featrixsphere-0.2.6127 → featrixsphere-0.2.6379}/system_monitor.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: featrixsphere
3
- Version: 0.2.6127
3
+ Version: 0.2.6379
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.6379
@@ -57,7 +57,7 @@ TWO API OPTIONS:
57
57
  >>> print(result['prediction'])
58
58
  """
59
59
 
60
- __version__ = "0.2.6127"
60
+ __version__ = "0.2.6379"
61
61
  __author__ = "Featrix"
62
62
  __email__ = "support@featrix.com"
63
63
  __license__ = "MIT"
@@ -137,22 +137,24 @@ class SessionInfo:
137
137
  class PredictionBatch:
138
138
  """
139
139
  Cached prediction batch that allows instant lookups after initial batch processing.
140
-
140
+
141
141
  Usage:
142
142
  # First run - populate cache
143
143
  batch = client.predict_batch(session_id, records)
144
-
144
+
145
145
  # Second run - instant cache lookups
146
146
  for i in values1:
147
147
  for j in values2:
148
148
  record = {"param1": i, "param2": j}
149
149
  result = batch.predict(record) # Instant!
150
150
  """
151
-
152
- def __init__(self, session_id: str, client: 'FeatrixSphereClient', target_column: str = None):
151
+
152
+ def __init__(self, session_id: str, client: 'FeatrixSphereClient', target_column: str = None,
153
+ best_metric_preference: str = None):
153
154
  self.session_id = session_id
154
155
  self.client = client
155
156
  self.target_column = target_column
157
+ self.best_metric_preference = best_metric_preference
156
158
  self._cache = {} # record_hash -> prediction_result
157
159
  self._stats = {'hits': 0, 'misses': 0, 'populated': 0}
158
160
 
@@ -203,14 +205,15 @@ class PredictionBatch:
203
205
  """Populate the cache with batch predictions."""
204
206
  if not records:
205
207
  return {'summary': {'total_records': 0, 'successful': 0, 'failed': 0}}
206
-
208
+
207
209
  print(f"🚀 Creating prediction batch for {len(records)} records...")
208
-
210
+
209
211
  # Use existing batch prediction system
210
212
  batch_results = self.client.predict_records(
211
213
  session_id=self.session_id,
212
214
  records=records,
213
215
  target_column=self.target_column,
216
+ best_metric_preference=self.best_metric_preference,
214
217
  show_progress_bar=True
215
218
  )
216
219
 
@@ -7744,23 +7747,25 @@ class FeatrixSphereClient:
7744
7747
  else:
7745
7748
  return data
7746
7749
 
7747
- def predict_csv_file(self, session_id: str, file_path: Path) -> Dict[str, Any]:
7750
+ def predict_csv_file(self, session_id: str, file_path: Path,
7751
+ best_metric_preference: str = None) -> Dict[str, Any]:
7748
7752
  """
7749
7753
  Make batch predictions on a CSV file.
7750
-
7754
+
7751
7755
  Args:
7752
7756
  session_id: ID of session with trained predictor
7753
7757
  file_path: Path to CSV file
7754
-
7758
+ best_metric_preference: Which metric checkpoint to use: "roc_auc", "pr_auc", or None (default)
7759
+
7755
7760
  Returns:
7756
7761
  Batch prediction results
7757
7762
  """
7758
7763
  import pandas as pd
7759
7764
  from jsontables import JSONTablesEncoder
7760
-
7765
+
7761
7766
  if not file_path.exists():
7762
7767
  raise FileNotFoundError(f"File not found: {file_path}")
7763
-
7768
+
7764
7769
  # Support CSV, Parquet, JSON, and JSONL files
7765
7770
  file_path_str = str(file_path).lower()
7766
7771
  if file_path_str.endswith('.parquet'):
@@ -7779,29 +7784,31 @@ class FeatrixSphereClient:
7779
7784
  df = pd.read_json(file_path)
7780
7785
  else:
7781
7786
  df = pd.read_csv(file_path)
7782
-
7787
+
7783
7788
  # Convert to JSON Tables format and clean NaNs
7784
7789
  table_data = JSONTablesEncoder.from_dataframe(df)
7785
7790
  cleaned_table_data = self.replace_nans_with_nulls(table_data)
7786
-
7787
- return self.predict_table(session_id, cleaned_table_data)
7788
7791
 
7789
- def run_predictions(self, session_id: str, records: List[Dict[str, Any]]) -> Dict[str, Any]:
7792
+ return self.predict_table(session_id, cleaned_table_data, best_metric_preference=best_metric_preference)
7793
+
7794
+ def run_predictions(self, session_id: str, records: List[Dict[str, Any]],
7795
+ best_metric_preference: str = None) -> Dict[str, Any]:
7790
7796
  """
7791
7797
  Run predictions on provided records. Clean and fast for production use.
7792
-
7798
+
7793
7799
  Args:
7794
7800
  session_id: ID of session with trained predictor
7795
7801
  records: List of record dictionaries
7796
-
7802
+ best_metric_preference: Which metric checkpoint to use: "roc_auc", "pr_auc", or None (default)
7803
+
7797
7804
  Returns:
7798
7805
  Dictionary with prediction results
7799
7806
  """
7800
7807
  # Clean NaNs for JSON encoding
7801
7808
  cleaned_records = self.replace_nans_with_nulls(records)
7802
-
7809
+
7803
7810
  # Make batch predictions
7804
- batch_results = self.predict_records(session_id, cleaned_records)
7811
+ batch_results = self.predict_records(session_id, cleaned_records, best_metric_preference=best_metric_preference)
7805
7812
  predictions = batch_results['predictions']
7806
7813
 
7807
7814
  # Process predictions into clean format
@@ -8517,32 +8524,33 @@ class FeatrixSphereClient:
8517
8524
 
8518
8525
  return cleared_counts
8519
8526
 
8520
- def predict_batch(self, session_id: str, records: List[Dict[str, Any]],
8521
- target_column: str = None) -> PredictionBatch:
8527
+ def predict_batch(self, session_id: str, records: List[Dict[str, Any]],
8528
+ target_column: str = None, best_metric_preference: str = None) -> PredictionBatch:
8522
8529
  """
8523
8530
  Create a prediction batch for instant cached lookups.
8524
-
8531
+
8525
8532
  Perfect for parameter sweeps, grid searches, and exploring prediction surfaces.
8526
8533
  Run your loops twice with identical code - first populates cache, second gets instant results.
8527
-
8534
+
8528
8535
  Args:
8529
8536
  session_id: ID of session with trained predictor
8530
8537
  records: List of all records you'll want to predict on
8531
8538
  target_column: Specific target column predictor to use
8532
-
8539
+ best_metric_preference: Which metric checkpoint to use: "roc_auc", "pr_auc", or None (default)
8540
+
8533
8541
  Returns:
8534
8542
  PredictionBatch object with instant predict() method
8535
-
8543
+
8536
8544
  Example:
8537
8545
  # Generate all combinations you'll need
8538
8546
  records = []
8539
8547
  for i in range(10):
8540
8548
  for j in range(10):
8541
8549
  records.append({"param1": i, "param2": j})
8542
-
8550
+
8543
8551
  # First run - populate cache with batch processing
8544
8552
  batch = client.predict_batch(session_id, records)
8545
-
8553
+
8546
8554
  # Second run - same loops but instant cache lookups
8547
8555
  results = []
8548
8556
  for i in range(10):
@@ -8552,50 +8560,52 @@ class FeatrixSphereClient:
8552
8560
  results.append(result)
8553
8561
  """
8554
8562
  # Create batch object
8555
- batch = PredictionBatch(session_id, self, target_column)
8556
-
8563
+ batch = PredictionBatch(session_id, self, target_column, best_metric_preference)
8564
+
8557
8565
  # Populate cache with batch predictions
8558
8566
  batch._populate_cache(records)
8559
-
8567
+
8560
8568
  return batch
8561
8569
 
8562
- def predict_grid(self, session_id: str, degrees_of_freedom: int,
8563
- grid_shape: tuple = None, target_column: str = None) -> 'PredictionGrid':
8570
+ def predict_grid(self, session_id: str, degrees_of_freedom: int,
8571
+ grid_shape: tuple = None, target_column: str = None,
8572
+ best_metric_preference: str = None) -> 'PredictionGrid':
8564
8573
  """
8565
8574
  Create a prediction grid for exploring parameter surfaces with automatic visualization.
8566
-
8575
+
8567
8576
  Perfect for 1D curves, 2D heatmaps, and 3D surfaces with built-in plotting functions.
8568
-
8577
+
8569
8578
  Args:
8570
8579
  session_id: ID of session with trained predictor
8571
8580
  degrees_of_freedom: Number of dimensions (1, 2, or 3)
8572
8581
  grid_shape: Custom grid shape tuple (default: auto-sized)
8573
8582
  target_column: Specific target column predictor to use
8574
-
8583
+ best_metric_preference: Which metric checkpoint to use: "roc_auc", "pr_auc", or None (default)
8584
+
8575
8585
  Returns:
8576
8586
  PredictionGrid object with predict() and plotting methods
8577
-
8587
+
8578
8588
  Example:
8579
8589
  # 2D parameter sweep with automatic plotting
8580
8590
  grid = client.predict_grid(session_id, degrees_of_freedom=2)
8581
8591
  grid.set_axis_labels(["Spend", "Campaign Type"])
8582
8592
  grid.set_axis_values(0, [100, 250, 500])
8583
8593
  grid.set_axis_values(1, ["search", "display", "social"])
8584
-
8594
+
8585
8595
  for i, spend in enumerate([100, 250, 500]):
8586
8596
  for j, campaign in enumerate(["search", "display", "social"]):
8587
8597
  record = {"spend": spend, "campaign_type": campaign}
8588
8598
  grid.predict(record, grid_position=(i, j))
8589
-
8599
+
8590
8600
  # Automatic visualization
8591
8601
  grid.plot_heatmap() # 2D heatmap
8592
8602
  grid.plot_3d() # 3D surface
8593
-
8603
+
8594
8604
  # Find optimal parameters
8595
8605
  optimal_pos = grid.get_optimal_position()
8596
8606
  print(f"Optimal parameters at grid position: {optimal_pos}")
8597
8607
  """
8598
- return PredictionGrid(session_id, self, degrees_of_freedom, grid_shape, target_column)
8608
+ return PredictionGrid(session_id, self, degrees_of_freedom, grid_shape, target_column, best_metric_preference)
8599
8609
 
8600
8610
  def get_embedding_space_columns(self, session_id: str) -> Dict[str, Any]:
8601
8611
  """
@@ -8672,12 +8682,13 @@ class PredictionGrid:
8672
8682
  grid.plot_3d() # 3D surface plot
8673
8683
  """
8674
8684
 
8675
- def __init__(self, session_id: str, client: 'FeatrixSphereClient', degrees_of_freedom: int,
8676
- grid_shape: tuple = None, target_column: str = None):
8685
+ def __init__(self, session_id: str, client: 'FeatrixSphereClient', degrees_of_freedom: int,
8686
+ grid_shape: tuple = None, target_column: str = None, best_metric_preference: str = None):
8677
8687
  self.session_id = session_id
8678
8688
  self.client = client
8679
8689
  self.degrees_of_freedom = degrees_of_freedom
8680
8690
  self.target_column = target_column
8691
+ self.best_metric_preference = best_metric_preference
8681
8692
 
8682
8693
  # Initialize grid matrix based on degrees of freedom
8683
8694
  if grid_shape:
@@ -8769,6 +8780,7 @@ class PredictionGrid:
8769
8780
  session_id=self.session_id,
8770
8781
  records=records_list,
8771
8782
  target_column=self.target_column,
8783
+ best_metric_preference=self.best_metric_preference,
8772
8784
  show_progress_bar=show_progress
8773
8785
  )
8774
8786
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: featrixsphere
3
- Version: 0.2.6127
3
+ Version: 0.2.6379
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
@@ -112,6 +112,7 @@ src/lib/vector_db.py
112
112
  src/lib/webhook_helpers.py
113
113
  src/lib/weightwatcher_tracking.py
114
114
  src/lib/featrix/__init__.py
115
+ src/lib/featrix/auto_calibrate.py
115
116
  src/lib/featrix/download-data/build_geo_weather_db.py
116
117
  src/lib/featrix/download-data/download_geographic_data.py
117
118
  src/lib/featrix/download-data/download_road_data.py
@@ -119,6 +120,7 @@ src/lib/featrix/download-data/download_weather_data.py
119
120
  src/lib/featrix/download-data/install-data.sh
120
121
  src/lib/featrix/neural/__init__.py
121
122
  src/lib/featrix/neural/adaptive_event_log.py
123
+ src/lib/featrix/neural/auc_animation.py
122
124
  src/lib/featrix/neural/calibration_utils.py
123
125
  src/lib/featrix/neural/causal_relationship_scorer.py
124
126
  src/lib/featrix/neural/charting.py
@@ -129,12 +131,14 @@ src/lib/featrix/neural/curve_plots_example.py
129
131
  src/lib/featrix/neural/customer_quality_tracker.py
130
132
  src/lib/featrix/neural/data_frame_data_set.py
131
133
  src/lib/featrix/neural/dataloader_utils.py
134
+ src/lib/featrix/neural/default_training_rules.py
132
135
  src/lib/featrix/neural/detect.py
133
136
  src/lib/featrix/neural/dimension_validator.py
134
137
  src/lib/featrix/neural/domain_codec.py
135
138
  src/lib/featrix/neural/dropout_scheduler.py
136
139
  src/lib/featrix/neural/duration_ops.py
137
140
  src/lib/featrix/neural/dynamic_relationship_extractor.py
141
+ src/lib/featrix/neural/email_codec.py
138
142
  src/lib/featrix/neural/email_domain_ops.py
139
143
  src/lib/featrix/neural/embedded_space.py
140
144
  src/lib/featrix/neural/embedding_lr_scheduler.py
@@ -144,6 +148,7 @@ src/lib/featrix/neural/embedding_utils.py
144
148
  src/lib/featrix/neural/encoders.py
145
149
  src/lib/featrix/neural/enrich.py
146
150
  src/lib/featrix/neural/es_projection.py
151
+ src/lib/featrix/neural/es_training_callbacks.py
147
152
  src/lib/featrix/neural/exceptions.py
148
153
  src/lib/featrix/neural/featrix_csv.py
149
154
  src/lib/featrix/neural/featrix_json.py
@@ -172,8 +177,10 @@ src/lib/featrix/neural/io_utils.py
172
177
  src/lib/featrix/neural/ip_address_ops.py
173
178
  src/lib/featrix/neural/json_cache.py
174
179
  src/lib/featrix/neural/json_codec.py
180
+ src/lib/featrix/neural/junction_adapter.py
175
181
  src/lib/featrix/neural/local_string_cache.py
176
182
  src/lib/featrix/neural/logging_config.py
183
+ src/lib/featrix/neural/loss_framework.py
177
184
  src/lib/featrix/neural/loss_short_embedding.py
178
185
  src/lib/featrix/neural/lr_timeline.py
179
186
  src/lib/featrix/neural/mask_bias_tracker.py
@@ -188,7 +195,6 @@ src/lib/featrix/neural/pair_scorer.py
188
195
  src/lib/featrix/neural/per_epoch_quality.py
189
196
  src/lib/featrix/neural/platform_utils.py
190
197
  src/lib/featrix/neural/prng_control.py
191
- src/lib/featrix/neural/random_utils.py
192
198
  src/lib/featrix/neural/relationship_complexity.py
193
199
  src/lib/featrix/neural/relationship_estimator.py
194
200
  src/lib/featrix/neural/relationship_extractor.py
@@ -232,6 +238,7 @@ src/lib/featrix/neural/training_exceptions.py
232
238
  src/lib/featrix/neural/training_history_db.py
233
239
  src/lib/featrix/neural/training_logger.py
234
240
  src/lib/featrix/neural/training_movie_writer.py
241
+ src/lib/featrix/neural/training_rules.py
235
242
  src/lib/featrix/neural/training_timeline.py
236
243
  src/lib/featrix/neural/transformer_encoder.py
237
244
  src/lib/featrix/neural/type_aware_ops_config.py
@@ -247,6 +254,11 @@ src/lib/featrix/neural/world_data.py
247
254
  src/lib/featrix/neural/xgboost_classifier.py
248
255
  src/lib/featrix/neural/llm/__init__.py
249
256
  src/lib/featrix/neural/llm/schema_analyzer.py
257
+ src/lib/featrix/neural/loss_functions/__init__.py
258
+ src/lib/featrix/neural/loss_functions/list_versions.py
259
+ src/lib/featrix/neural/loss_functions/loss_functions_01Jan2026.py
260
+ src/lib/featrix/neural/loss_functions/loss_functions_01Jul2025.py
261
+ src/lib/featrix/neural/loss_functions/loss_functions_21Jan2026.py
250
262
  src/lib/featrix/neural/qa/demo_advisor_decisions.py
251
263
  src/lib/featrix/neural/qa/example_complete_workflow.py
252
264
  src/lib/featrix/neural/qa/generate_focal_report.py
@@ -254,7 +266,9 @@ src/lib/featrix/neural/qa/model_advisor.py
254
266
  src/lib/featrix/neural/qa/show_results.py
255
267
  src/lib/featrix/neural/qa/test_adaptive_loss_benchmark.py
256
268
  src/lib/featrix/neural/qa/test_adaptive_training.py
269
+ src/lib/featrix/neural/qa/test_all_codecs.py
257
270
  src/lib/featrix/neural/qa/test_checkpoint_dict_reconstruction.py
271
+ src/lib/featrix/neural/qa/test_cls_vs_mean_pooling.py
258
272
  src/lib/featrix/neural/qa/test_confusion_matrix_metadata.py
259
273
  src/lib/featrix/neural/qa/test_data_timestamps.py
260
274
  src/lib/featrix/neural/qa/test_embedding_quality.py
@@ -284,4 +298,5 @@ src/lib/featrix/neural/qa/test_training_monitor.py
284
298
  src/lib/featrix/neural/qa/test_warning_tracking.py
285
299
  src/lib/featrix/neural/qa/visualize_training_timeline.py
286
300
  src/lib/featrix/neural/tools/__init__.py
287
- src/lib/featrix/neural/tools/compare_clusters.py
301
+ src/lib/featrix/neural/tools/compare_clusters.py
302
+ tests/test_foundation_mode_local.py
@@ -3031,10 +3031,11 @@ def create_app() -> FastAPI:
3031
3031
  predictor_dir = Path(predictor_path).parent
3032
3032
  if predictor_dir.exists():
3033
3033
  # Look for best checkpoint files
3034
+ # Filename format: {timestamp}_best_single_predictor_auc_roc_{value}_epoch_{N}.pickle
3034
3035
  if best_metric_preference.lower() in ['roc_auc', 'roc-auc', 'auc']:
3035
3036
  # Look for ROC-AUC best checkpoint
3036
3037
  roc_auc_checkpoints = sorted(
3037
- predictor_dir.glob("best_single_predictor_roc_auc*.pickle"),
3038
+ predictor_dir.glob("*best_single_predictor_auc_roc*.pickle"),
3038
3039
  key=lambda p: p.stat().st_mtime,
3039
3040
  reverse=True
3040
3041
  )
@@ -3046,7 +3047,7 @@ def create_app() -> FastAPI:
3046
3047
  elif best_metric_preference.lower() in ['pr_auc', 'pr-auc', 'precision_recall']:
3047
3048
  # Look for PR-AUC best checkpoint
3048
3049
  pr_auc_checkpoints = sorted(
3049
- predictor_dir.glob("best_single_predictor_pr_auc*.pickle"),
3050
+ predictor_dir.glob("*best_single_predictor_auc_pr*.pickle"),
3050
3051
  key=lambda p: p.stat().st_mtime,
3051
3052
  reverse=True
3052
3053
  )
@@ -2123,9 +2123,10 @@ def create_structured_data(self, job_spec: dict, job_id: str, data_file: str = N
2123
2123
  logger.info(f"📊 Processing data file (reading, parsing, cleaning, expanding JSON columns, writing to SQLite)...")
2124
2124
  logger.info(f" This may take a while for large files - watch for progress updates below...")
2125
2125
 
2126
- # Check if we should use foundation mode (large datasets >= 100k rows)
2126
+ # Check if we should use foundation mode (large datasets >= 50k rows)
2127
2127
  # Foundation mode creates train/validation/test/warmup splits directly in SQLite
2128
- FOUNDATION_THRESHOLD = 100_000
2128
+ # This enables chunked iteration, SQLite-backed splits, and better memory efficiency
2129
+ FOUNDATION_THRESHOLD = 50_000
2129
2130
  foundation_mode_setting = job_spec.get("foundation_mode") # None = auto-detect, True = force, False = disable
2130
2131
  use_foundation_mode = foundation_mode_setting is True # Explicitly True means force it
2131
2132
 
@@ -6,11 +6,12 @@ This replaces the old file-based worker recovery mechanism.
6
6
  """
7
7
  import json
8
8
  import logging
9
+ import os
9
10
  import time
10
11
  import traceback
11
12
  from datetime import datetime, timedelta
12
13
  from pathlib import Path
13
- from typing import List, Dict, Any, Optional
14
+ from typing import List, Dict, Any, Optional, Tuple
14
15
  from zoneinfo import ZoneInfo
15
16
 
16
17
  import redis
@@ -30,6 +31,92 @@ logger = logging.getLogger(__name__)
30
31
  CANCELLED_JOBS_DIR = Path("/tmp/featrix_cancelled_jobs")
31
32
 
32
33
 
34
+ def _check_running_job_state(job: dict) -> Tuple[str, bool, Optional[str]]:
35
+ """
36
+ Check the actual state of a RUNNING job by examining:
37
+ 1. Control files (ABORT, PAUSE, CRASH, FAILURE)
38
+ 2. PID from .job.lock file (is process still alive?)
39
+
40
+ Returns:
41
+ (state, should_recover, reason)
42
+
43
+ States and actions:
44
+ - "running_will_abort" - ABORT file exists, process running → don't recover, will finish soon
45
+ - "running_paused" - PAUSE file exists, process running → don't recover, paused
46
+ - "running_healthy" - process running, no control files → don't recover
47
+ - "dead_aborted" - ABORT file exists, process dead → mark FAILED, don't recover
48
+ - "dead_crashed" - CRASH/FAILURE file exists, process dead → mark FAILED, don't recover
49
+ - "dead_needs_recovery" - process dead, no markers → needs recovery
50
+ - "unknown" - can't determine (no job dir, etc.) → recover to be safe
51
+ """
52
+ job_id = job.get('job_id')
53
+ job_type = job.get('job_type')
54
+ session_id = job.get('session_id')
55
+
56
+ # Get job output directory
57
+ try:
58
+ job_output_dir = get_job_output_path(job_id, session_id=session_id, job_type=job_type)
59
+ if not job_output_dir or not job_output_dir.exists():
60
+ return ("unknown", True, "job output directory not found")
61
+ except Exception as e:
62
+ logger.debug(f"Could not get job output path for {job_id}: {e}")
63
+ return ("unknown", True, f"could not get job output path: {e}")
64
+
65
+ # Check for control files
66
+ abort_file = job_output_dir / "ABORT"
67
+ pause_file = job_output_dir / "PAUSE"
68
+ crash_file = job_output_dir / "CRASH.log"
69
+ failure_file = job_output_dir / "FAILURE"
70
+
71
+ has_abort = abort_file.exists()
72
+ has_pause = pause_file.exists()
73
+ has_crash = crash_file.exists()
74
+ has_failure = failure_file.exists()
75
+
76
+ # Check if process is still running via .job.lock file
77
+ lock_file = job_output_dir / ".job.lock"
78
+ pid = None
79
+ process_running = False
80
+
81
+ if lock_file.exists():
82
+ try:
83
+ lock_content = lock_file.read_text()
84
+ for line in lock_content.split('\n'):
85
+ if line.startswith('pid:'):
86
+ pid = int(line.split(':', 1)[1].strip())
87
+ break
88
+
89
+ if pid:
90
+ # Check if process is still running
91
+ try:
92
+ os.kill(pid, 0) # Signal 0 just checks if process exists
93
+ process_running = True
94
+ except OSError:
95
+ process_running = False
96
+ except Exception as e:
97
+ logger.debug(f"Could not read lock file for job {job_id}: {e}")
98
+
99
+ # Determine state based on control files and process status
100
+ if process_running:
101
+ if has_abort:
102
+ return ("running_will_abort", False, f"ABORT file exists, PID {pid} still running - will finish cleanly soon")
103
+ elif has_pause:
104
+ return ("running_paused", False, f"PAUSE file exists, PID {pid} still running - paused")
105
+ else:
106
+ return ("running_healthy", False, f"PID {pid} still running - healthy")
107
+ else:
108
+ # Process is dead
109
+ if has_abort:
110
+ return ("dead_aborted", False, f"ABORT file exists, process dead - mark as FAILED")
111
+ elif has_crash:
112
+ return ("dead_crashed", False, f"CRASH.log exists, process dead - mark as FAILED")
113
+ elif has_failure:
114
+ return ("dead_failed", False, f"FAILURE file exists, process dead - mark as FAILED")
115
+ else:
116
+ pid_info = f" (was PID {pid})" if pid else ""
117
+ return ("dead_needs_recovery", True, f"process dead{pid_info}, no failure markers - needs recovery")
118
+
119
+
33
120
  def _mark_job_cancelled(job_id: str, replaced_by: str, reason: str) -> bool:
34
121
  """
35
122
  Mark a job as CANCELLED so it won't be picked up by recovery again.
@@ -1598,10 +1685,32 @@ def recover_interrupted_jobs() -> Dict[str, Any]:
1598
1685
  logger.debug(f"⏭️ Skipping movie frame job {job_id} - movie generation disabled")
1599
1686
  continue
1600
1687
 
1601
- # Include RUNNING jobs
1688
+ # Include RUNNING jobs - but check actual state first
1602
1689
  if status == JobStatus.RUNNING.value:
1603
- jobs_to_recover.append(job)
1604
- logger.info(f"🔄 Found RUNNING job {job_id} (type: {job.get('job_type')})")
1690
+ state, should_recover, reason = _check_running_job_state(job)
1691
+ job_type = job.get('job_type')
1692
+
1693
+ if state == "running_healthy":
1694
+ logger.info(f"✅ RUNNING job {job_id} (type: {job_type}) - {reason}")
1695
+ elif state == "running_will_abort":
1696
+ logger.info(f"⏳ RUNNING job {job_id} (type: {job_type}) - {reason}")
1697
+ elif state == "running_paused":
1698
+ logger.info(f"⏸️ RUNNING job {job_id} (type: {job_type}) - {reason}")
1699
+ elif state in ("dead_aborted", "dead_crashed", "dead_failed"):
1700
+ # Process is dead with failure markers - mark as FAILED in Redis
1701
+ logger.warning(f"💀 RUNNING job {job_id} (type: {job_type}) - {reason}")
1702
+ try:
1703
+ update_job_status(job_id, JobStatus.FAILED, metadata={'error': reason})
1704
+ logger.info(f" ✅ Updated job status to FAILED in Redis")
1705
+ except Exception as e:
1706
+ logger.warning(f" ⚠️ Failed to update job status: {e}")
1707
+ elif state == "dead_needs_recovery":
1708
+ logger.info(f"🔄 RUNNING job {job_id} (type: {job_type}) - {reason}")
1709
+ jobs_to_recover.append(job)
1710
+ else: # unknown state
1711
+ logger.info(f"🔄 RUNNING job {job_id} (type: {job_type}) - {reason}")
1712
+ if should_recover:
1713
+ jobs_to_recover.append(job)
1605
1714
 
1606
1715
  # Include recently FAILED jobs
1607
1716
  elif status == JobStatus.FAILED.value: