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.
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/PKG-INFO +1 -1
- featrixsphere-0.2.2279/VERSION +1 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrix-update.py +89 -14
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrixsphere/__init__.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrixsphere/client.py +431 -65
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrixsphere.egg-info/PKG-INFO +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrixsphere.egg-info/SOURCES.txt +24 -3
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/requirements.txt +0 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/api.py +1147 -79
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/celery_app.py +1232 -262
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/config.py +9 -5
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/event_log.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/featrix_watchdog.py +94 -2
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/gc_cleanup.py +39 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/celery_job_recovery.py +133 -6
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/convergence_monitor.py +43 -0
- featrixsphere-0.2.2279/src/lib/crash_tracker.py +283 -0
- featrixsphere-0.2.2279/src/lib/distribution_shift_detector.py +693 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/epoch_projections.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/es_projections.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/es_training.py +54 -20
- featrixsphere-0.2.2279/src/lib/es_training_wrapper.py +131 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/__init__.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/__init__.py +2 -2
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/calibration_utils.py +8 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/classification_metrics.py +13 -12
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/config.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/data_frame_data_set.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/dataloader_utils.py +87 -26
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/detect.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/domain_codec.py +3 -3
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/embedded_space.py +1660 -518
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/embedding_lr_scheduler.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/embedding_space_utils.py +6 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/embedding_utils.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/encoders.py +148 -43
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/enrich.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/es_projection.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/exceptions.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/featrix_csv.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/featrix_json.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/featrix_module_dict.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/featrix_token.py +7 -5
- featrixsphere-0.2.2279/src/lib/featrix/neural/feature_engineer.py +306 -0
- featrixsphere-0.2.2279/src/lib/featrix/neural/feature_suggestion_tracker.py +372 -0
- featrixsphere-0.2.2279/src/lib/featrix/neural/gpu_utils.py +724 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/guardrails.py +1 -1
- featrixsphere-0.2.2279/src/lib/featrix/neural/hybrid_column_detector.py +466 -0
- featrixsphere-0.2.2279/src/lib/featrix/neural/hybrid_encoders.py +344 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/input_data_file.py +15 -8
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/input_data_set.py +419 -44
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/integrity.py +1 -1
- featrixsphere-0.2.2279/src/lib/featrix/neural/io_utils.py +1380 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/json_cache.py +2 -2
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/json_codec.py +2 -2
- featrixsphere-0.2.2279/src/lib/featrix/neural/llm/__init__.py +6 -0
- featrixsphere-0.2.2279/src/lib/featrix/neural/llm/schema_analyzer.py +143 -0
- featrixsphere-0.2.2279/src/lib/featrix/neural/logging_config.py +135 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/mask_tracker.py +18 -10
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/model_config.py +53 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/model_hash.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/movie_frame_task.py +3 -6
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/network_viz.py +1 -1
- featrixsphere-0.2.2279/src/lib/featrix/neural/platform_utils.py +84 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/prng_control.py +6 -6
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_adaptive_training.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_checkpoint_dict_reconstruction.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_confusion_matrix_metadata.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_embedding_quality.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_embedding_space.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_extend_embedding_space.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_focal_comparison.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_focal_comparison_enhanced.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_focal_loss_single_predictor.py +1 -1
- featrixsphere-0.2.2279/src/lib/featrix/neural/qa/test_hybrid_columns.py +481 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_label_smoothing.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_monitor_integration.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_timeline_quick.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_training_monitor.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/scalar_codec.py +5 -4
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/set_codec.py +31 -16
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/setlist_codec.py +10 -4
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/simple_mlp.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/single_predictor.py +1575 -427
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/sphere_config.py +37 -5
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/sqlite_utils.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/stopwatch.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/string_analysis.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/string_cache.py +350 -195
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/string_codec.py +599 -307
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/timestamp_codec.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/training_context_manager.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/training_history_db.py +1 -1
- featrixsphere-0.2.2279/src/lib/featrix/neural/training_logger.py +974 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/transformer_encoder.py +50 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/url_codec.py +3 -3
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/url_parser.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/utils.py +58 -22
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/vector_codec.py +4 -4
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/world_data.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/job_manager.py +55 -20
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/json_encoder_cache.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/knn_training.py +7 -4
- featrixsphere-0.2.2279/src/lib/meta_learning_client.py +339 -0
- featrixsphere-0.2.2279/src/lib/quick_architecture_search.py +292 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/session_chains.py +185 -37
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/session_manager.py +483 -81
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/single_predictor_cv.py +5 -4
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/single_predictor_training.py +562 -216
- featrixsphere-0.2.2279/src/lib/sp_training_wrapper.py +99 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/structureddata.py +2 -4
- featrixsphere-0.2.2279/src/lib/system_health_monitor.py +465 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/training_monitor.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/utils.py +1 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/weightwatcher_tracking.py +70 -10
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/node-install.sh +463 -58
- featrixsphere-0.2.2279/src/query_schema_worker.py +255 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/render_sphere.py +1 -1
- featrixsphere-0.2.2279/src/repair_checkpoint.py +246 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/start_celery_cpu_worker.sh +0 -1
- featrixsphere-0.2.2279/src/start_celery_gpu_worker.sh +142 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/start_celery_worker.sh +0 -1
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/version.py +24 -9
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/system_monitor.py +524 -94
- featrixsphere-0.2.2279/tests/test_client_data.py +145 -0
- featrixsphere-0.2.2279/tests/test_client_predictions.py +266 -0
- featrixsphere-0.2.2279/tests/test_client_sessions.py +268 -0
- featrixsphere-0.2.2279/tests/test_client_training.py +149 -0
- featrixsphere-0.2.2279/tests/test_local_integration.py +270 -0
- featrixsphere-0.2.1637/VERSION +0 -1
- featrixsphere-0.2.1637/src/lib/es_training_wrapper.py +0 -51
- featrixsphere-0.2.1637/src/lib/featrix/neural/MetaDataCache.py +0 -203
- featrixsphere-0.2.1637/src/lib/featrix/neural/device.py +0 -40
- featrixsphere-0.2.1637/src/lib/featrix/neural/io_utils.py +0 -822
- featrixsphere-0.2.1637/src/lib/featrix/neural/logging_config.py +0 -67
- featrixsphere-0.2.1637/src/start_celery_gpu_worker.sh +0 -39
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/MANIFEST.in +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/README.md +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrixsphere/test_client.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrixsphere.egg-info/dependency_links.txt +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrixsphere.egg-info/entry_points.txt +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrixsphere.egg-info/not-zip-safe +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrixsphere.egg-info/requires.txt +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/featrixsphere.egg-info/top_level.txt +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/nv-install.sh +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/setup.cfg +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/setup.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/auto_upgrade_monitor.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/build_version.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/demo_existing_model.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/demo_label_updates.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/deploy.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/deploy_cache_debug.sh +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/ensure_watchdog_running.sh +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/error_tracker.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/example_api_usage.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/example_prediction_feedback.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/example_train_predictor.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/api_event_retry.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/dropout_scheduler.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/hubspot_free_domains_list_may_2025.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/demo_advisor_decisions.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/example_complete_workflow.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/generate_focal_report.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/model_advisor.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/show_results.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_piecewise_epochs.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_predict_during_training.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/test_warning_tracking.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/qa/visualize_training_timeline.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/single_predictor_mlp.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/string_list_codec.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/training_event.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix/neural/training_exceptions.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/featrix_debug.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/queue_manager.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/sphere_config.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/vector_db.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/lib/webhook_helpers.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/llm_client.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/manage_churro.sh +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/migrate_string_cache_naming.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/neural.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/prediction_drift_monitor.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/prediction_persistence_worker.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/quick_test_deployment.sh +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/recreate_session.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/redis_job_progress.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/redis_prediction_cli.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/redis_prediction_store.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/regenerate_training_movie.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/restart_celery_worker.sh +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/run_api_server.sh +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/send_email.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/slack.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/standalone_prediction.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/start_churro_server.sh +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/tail-watch.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/test_api_client.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/test_complete_workflow.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/test_json_tables_prediction.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/test_redis_predictions.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/test_server_connection.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/test_session_models.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/test_single_predictor_api.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/test_upload_endpoint.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/tree.py +0 -0
- {featrixsphere-0.2.1637 → featrixsphere-0.2.2279}/src/utils.py +0 -0
|
@@ -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:
|
|
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
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
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
|
|
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
|
-
|
|
430
|
-
|
|
431
|
-
|
|
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
|
-
|
|
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:
|