featrixsphere 0.2.1462__tar.gz → 0.2.1830__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.1462 → featrixsphere-0.2.1830}/PKG-INFO +1 -1
- featrixsphere-0.2.1830/VERSION +1 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/featrix-update.py +14 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/featrixsphere/__init__.py +1 -1
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/featrixsphere/client.py +300 -11
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/featrixsphere.egg-info/PKG-INFO +1 -1
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/featrixsphere.egg-info/SOURCES.txt +16 -3
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/api.py +3829 -3930
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/auto_upgrade_monitor.py +95 -25
- featrixsphere-0.2.1830/src/celery_app.py +2686 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/example_train_predictor.py +7 -6
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/featrix_watchdog.py +118 -3
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/gc_cleanup.py +247 -13
- featrixsphere-0.2.1830/src/lib/api_event_retry.py +442 -0
- featrixsphere-0.2.1830/src/lib/celery_job_recovery.py +560 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/convergence_monitor.py +43 -0
- featrixsphere-0.2.1830/src/lib/crash_tracker.py +283 -0
- featrixsphere-0.2.1830/src/lib/distribution_shift_detector.py +481 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/es_projections.py +1 -1
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/es_training.py +233 -111
- featrixsphere-0.2.1830/src/lib/es_training_wrapper.py +60 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/dataloader_utils.py +125 -23
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/embedded_space.py +1667 -507
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/embedding_space_utils.py +5 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/encoders.py +100 -31
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/es_projection.py +6 -4
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/input_data_file.py +24 -4
- featrixsphere-0.2.1830/src/lib/featrix/neural/io_utils.py +1010 -0
- featrixsphere-0.2.1830/src/lib/featrix/neural/logging_config.py +118 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/mask_tracker.py +23 -6
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/model_config.py +1 -0
- featrixsphere-0.2.1830/src/lib/featrix/neural/qa/test_checkpoint_dict_reconstruction.py +212 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/qa/test_extend_embedding_space.py +1 -1
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/set_codec.py +1 -1
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/single_predictor.py +871 -297
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/sphere_config.py +37 -5
- featrixsphere-0.2.1830/src/lib/featrix/neural/stopwatch.py +80 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/string_cache.py +238 -182
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/string_codec.py +369 -335
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/utils.py +29 -8
- featrixsphere-0.2.1830/src/lib/job_manager.py +632 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/knn_training.py +1 -1
- featrixsphere-0.2.1830/src/lib/queue_manager.py +114 -0
- featrixsphere-0.2.1830/src/lib/session_chains.py +613 -0
- featrixsphere-0.2.1830/src/lib/session_manager.py +1452 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/single_predictor_cv.py +5 -3
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/single_predictor_training.py +284 -420
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/structureddata.py +162 -29
- featrixsphere-0.2.1830/src/lib/system_health_monitor.py +465 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/training_monitor.py +101 -11
- featrixsphere-0.2.1830/src/lib/utils.py +125 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/vector_db.py +26 -6
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/webhook_helpers.py +21 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/weightwatcher_tracking.py +70 -10
- featrixsphere-0.2.1830/src/migrate_string_cache_naming.py +197 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/node-install.sh +1007 -296
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/prediction_drift_monitor.py +5 -5
- featrixsphere-0.2.1830/src/redis_job_progress.py +391 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/run_api_server.sh +6 -1
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/send_email.py +1 -1
- featrixsphere-0.2.1830/src/start_celery_cpu_worker.sh +20 -0
- featrixsphere-0.2.1830/src/start_celery_gpu_worker.sh +38 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/start_celery_worker.sh +1 -2
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/start_churro_server.sh +12 -18
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/test_api_client.py +81 -0
- featrixsphere-0.2.1830/src/utils.py +65 -0
- featrixsphere-0.2.1830/system_monitor.py +1847 -0
- featrixsphere-0.2.1462/VERSION +0 -1
- featrixsphere-0.2.1462/featrixsphere/cli.py +0 -338
- featrixsphere-0.2.1462/src/celery_app.py +0 -987
- featrixsphere-0.2.1462/src/cli.py +0 -5853
- featrixsphere-0.2.1462/src/featrix_queue.py +0 -7206
- featrixsphere-0.2.1462/src/lib/featrix/neural/logging_config.py +0 -52
- featrixsphere-0.2.1462/src/lib/featrix/neural/stopwatch.py +0 -202
- featrixsphere-0.2.1462/src/lib/utils.py +0 -157
- featrixsphere-0.2.1462/src/utils.py +0 -14
- featrixsphere-0.2.1462/system_monitor.py +0 -1047
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/MANIFEST.in +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/README.md +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/featrixsphere/test_client.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/featrixsphere.egg-info/dependency_links.txt +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/featrixsphere.egg-info/entry_points.txt +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/featrixsphere.egg-info/not-zip-safe +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/featrixsphere.egg-info/requires.txt +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/featrixsphere.egg-info/top_level.txt +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/nv-install.sh +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/requirements.txt +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/setup.cfg +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/setup.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/build_version.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/config.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/demo_existing_model.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/demo_label_updates.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/deploy.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/deploy_cache_debug.sh +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/ensure_watchdog_running.sh +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/error_tracker.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/event_log.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/example_api_usage.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/example_prediction_feedback.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/epoch_projections.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/__init__.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/MetaDataCache.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/__init__.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/calibration_utils.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/classification_metrics.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/config.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/data_frame_data_set.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/detect.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/device.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/domain_codec.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/dropout_scheduler.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/embedding_lr_scheduler.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/embedding_utils.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/enrich.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/exceptions.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/featrix_csv.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/featrix_json.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/featrix_module_dict.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/featrix_token.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/guardrails.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/hubspot_free_domains_list_may_2025.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/input_data_set.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/integrity.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/json_cache.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/json_codec.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/model_hash.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/movie_frame_task.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/network_viz.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/prng_control.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/qa/demo_advisor_decisions.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/qa/example_complete_workflow.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/qa/generate_focal_report.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/qa/model_advisor.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/qa/show_results.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/qa/test_adaptive_training.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/qa/test_confusion_matrix_metadata.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/qa/test_embedding_quality.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/qa/test_embedding_space.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/qa/test_focal_comparison.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/qa/test_focal_comparison_enhanced.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/qa/test_focal_loss_single_predictor.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/qa/test_label_smoothing.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/qa/test_monitor_integration.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/qa/test_piecewise_epochs.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/qa/test_predict_during_training.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/qa/test_timeline_quick.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/qa/test_training_monitor.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/qa/test_warning_tracking.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/qa/visualize_training_timeline.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/scalar_codec.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/setlist_codec.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/simple_mlp.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/single_predictor_mlp.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/sqlite_utils.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/string_analysis.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/string_list_codec.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/timestamp_codec.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/training_context_manager.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/training_event.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/training_exceptions.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/training_history_db.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/transformer_encoder.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/url_codec.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/url_parser.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/vector_codec.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix/neural/world_data.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/featrix_debug.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/json_encoder_cache.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/lib/sphere_config.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/llm_client.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/manage_churro.sh +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/neural.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/prediction_persistence_worker.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/quick_test_deployment.sh +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/recreate_session.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/redis_prediction_cli.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/redis_prediction_store.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/regenerate_training_movie.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/render_sphere.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/restart_celery_worker.sh +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/slack.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/standalone_prediction.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/tail-watch.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/test_complete_workflow.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/test_json_tables_prediction.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/test_redis_predictions.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/test_server_connection.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/test_session_models.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/test_single_predictor_api.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/test_upload_endpoint.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/tree.py +0 -0
- {featrixsphere-0.2.1462 → featrixsphere-0.2.1830}/src/version.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.2.1830
|
|
@@ -409,10 +409,24 @@ def main():
|
|
|
409
409
|
newest_version = newest['version']
|
|
410
410
|
newest_filename = newest['filename']
|
|
411
411
|
newest_hash = newest.get('hash')
|
|
412
|
+
newest_date = newest.get('date_modified')
|
|
412
413
|
newest_url = f"{FIRMWARE_SERVER}/{newest_filename}"
|
|
413
414
|
|
|
415
|
+
# Format date if available
|
|
416
|
+
date_str = ""
|
|
417
|
+
if newest_date:
|
|
418
|
+
try:
|
|
419
|
+
# Parse ISO format date and format nicely
|
|
420
|
+
date_obj = datetime.fromisoformat(newest_date.replace('Z', '+00:00'))
|
|
421
|
+
date_str = date_obj.strftime("%Y-%m-%d %H:%M:%S")
|
|
422
|
+
except Exception:
|
|
423
|
+
# Fallback to raw date if parsing fails
|
|
424
|
+
date_str = newest_date
|
|
425
|
+
|
|
414
426
|
print(f"\n📊 Available versions:")
|
|
415
427
|
print(f" Newest: {newest_version} ({newest_filename})")
|
|
428
|
+
if date_str:
|
|
429
|
+
print(f" Date: {date_str}")
|
|
416
430
|
if newest_hash:
|
|
417
431
|
print(f" Hash: {newest_hash[:16]}...")
|
|
418
432
|
|
|
@@ -281,9 +281,20 @@ class FeatrixSphereClient:
|
|
|
281
281
|
max_retries = self.default_max_retries
|
|
282
282
|
|
|
283
283
|
# Special handling for session endpoints - longer retry window for 504 errors
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
284
|
+
# Session endpoints include /session/ and /upload_with_new_session/ (creates session)
|
|
285
|
+
is_session_endpoint = '/session/' in endpoint or '/upload_with_new_session' in endpoint
|
|
286
|
+
|
|
287
|
+
# For upload endpoints, use a much longer timeout (10 minutes for large files)
|
|
288
|
+
# This MUST happen before setting max_retry_time to ensure uploads get proper timeout
|
|
289
|
+
if '/upload_with_new_session' in endpoint:
|
|
290
|
+
# Override timeout if not explicitly set in kwargs
|
|
291
|
+
if 'timeout' not in kwargs:
|
|
292
|
+
kwargs['timeout'] = 600 # 10 minutes for file uploads
|
|
293
|
+
# Also set a longer max_retry_time for upload endpoints (10 minutes)
|
|
294
|
+
if max_retry_time is None:
|
|
295
|
+
max_retry_time = 600.0 # 10 minutes for upload endpoints
|
|
296
|
+
elif max_retry_time is None and is_session_endpoint:
|
|
297
|
+
max_retry_time = 120.0 # 120 seconds for other session endpoints
|
|
287
298
|
|
|
288
299
|
# Auto-add /compute prefix for session endpoints
|
|
289
300
|
if endpoint.startswith('/session/') and not endpoint.startswith('/compute/session/'):
|
|
@@ -323,7 +334,8 @@ class FeatrixSphereClient:
|
|
|
323
334
|
else:
|
|
324
335
|
# Out of retry time
|
|
325
336
|
print(f"API request failed: {method} {url}")
|
|
326
|
-
|
|
337
|
+
max_retry_time_str = f"{max_retry_time}s" if max_retry_time else "None"
|
|
338
|
+
print(f"504 Gateway Timeout - exceeded max retry time ({max_retry_time_str})")
|
|
327
339
|
raise
|
|
328
340
|
|
|
329
341
|
# Check for server restart patterns in 500 errors
|
|
@@ -1082,19 +1094,29 @@ class FeatrixSphereClient:
|
|
|
1082
1094
|
"""
|
|
1083
1095
|
|
|
1084
1096
|
if session_info.jobs:
|
|
1097
|
+
# Human-readable job type descriptions
|
|
1098
|
+
JOB_TYPE_NAMES = {
|
|
1099
|
+
'create_structured_data': 'Creating Structured Data',
|
|
1100
|
+
'train_es': 'Training Embedding Space',
|
|
1101
|
+
'train_knn': 'Training KNN Index',
|
|
1102
|
+
'run_clustering': 'Running Clustering',
|
|
1103
|
+
'train_single_predictor': 'Training Predictor',
|
|
1104
|
+
}
|
|
1105
|
+
|
|
1085
1106
|
html_content += "<h4>Jobs:</h4><ul>"
|
|
1086
1107
|
for job_id, job in session_info.jobs.items():
|
|
1087
1108
|
job_status = job.get('status', 'unknown')
|
|
1088
1109
|
progress = job.get('progress')
|
|
1089
1110
|
job_type = job.get('type', job_id.split('_')[0])
|
|
1111
|
+
job_display_name = JOB_TYPE_NAMES.get(job_type, job_type)
|
|
1090
1112
|
|
|
1091
1113
|
if progress is not None:
|
|
1092
1114
|
progress_pct = progress * 100
|
|
1093
1115
|
progress_bar = "▓" * int(progress_pct / 5) + "░" * (20 - int(progress_pct / 5))
|
|
1094
|
-
html_content += f"<li><strong>{
|
|
1116
|
+
html_content += f"<li><strong>{job_display_name}:</strong> {job_status} [{progress_bar}] {progress_pct:.1f}%</li>"
|
|
1095
1117
|
else:
|
|
1096
1118
|
status_emoji = "✅" if job_status == "done" else "🔄" if job_status == "running" else "❌"
|
|
1097
|
-
html_content += f"<li>{status_emoji} <strong>{
|
|
1119
|
+
html_content += f"<li>{status_emoji} <strong>{job_display_name}:</strong> {job_status}</li>"
|
|
1098
1120
|
html_content += "</ul>"
|
|
1099
1121
|
|
|
1100
1122
|
display(HTML(html_content))
|
|
@@ -1149,6 +1171,15 @@ class FeatrixSphereClient:
|
|
|
1149
1171
|
from rich.text import Text
|
|
1150
1172
|
import time
|
|
1151
1173
|
|
|
1174
|
+
# Human-readable job type descriptions
|
|
1175
|
+
JOB_TYPE_NAMES = {
|
|
1176
|
+
'create_structured_data': 'Creating Structured Data',
|
|
1177
|
+
'train_es': 'Training Embedding Space',
|
|
1178
|
+
'train_knn': 'Training KNN Index',
|
|
1179
|
+
'run_clustering': 'Running Clustering',
|
|
1180
|
+
'train_single_predictor': 'Training Predictor',
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1152
1183
|
start_time = time.time()
|
|
1153
1184
|
job_tasks = {} # Track progress tasks for each job
|
|
1154
1185
|
|
|
@@ -1180,15 +1211,18 @@ class FeatrixSphereClient:
|
|
|
1180
1211
|
for job_id, job in session_info.jobs.items():
|
|
1181
1212
|
if job_id not in job_tasks:
|
|
1182
1213
|
job_type = job.get('type', job_id.split('_')[0])
|
|
1183
|
-
|
|
1214
|
+
job_display_name = JOB_TYPE_NAMES.get(job_type, job_type)
|
|
1215
|
+
job_tasks[job_id] = progress.add_task(f"[cyan]{job_display_name}", total=100)
|
|
1184
1216
|
|
|
1185
1217
|
# Update job progress
|
|
1186
1218
|
job_status = job.get('status', 'unknown')
|
|
1187
1219
|
raw_progress = job.get('progress', 0)
|
|
1188
1220
|
job_progress = 100 if job_status == 'done' else (raw_progress * 100 if raw_progress else 0)
|
|
1189
1221
|
|
|
1222
|
+
job_type = job.get('type', job_id.split('_')[0])
|
|
1223
|
+
job_display_name = JOB_TYPE_NAMES.get(job_type, job_type)
|
|
1190
1224
|
progress.update(job_tasks[job_id], completed=job_progress,
|
|
1191
|
-
description=f"[cyan]{
|
|
1225
|
+
description=f"[cyan]{job_display_name} ({job_status})")
|
|
1192
1226
|
|
|
1193
1227
|
# Check completion
|
|
1194
1228
|
if session_info.status in ['done', 'failed', 'cancelled']:
|
|
@@ -1232,8 +1266,20 @@ class FeatrixSphereClient:
|
|
|
1232
1266
|
status_callback(session_info, elapsed)
|
|
1233
1267
|
|
|
1234
1268
|
# Check if completed
|
|
1269
|
+
# CRITICAL: Only return done if we actually have jobs that completed
|
|
1270
|
+
# If no jobs exist, session shouldn't be marked as done
|
|
1235
1271
|
if session_info.status in ['completed', 'done', 'DONE']:
|
|
1236
|
-
|
|
1272
|
+
# Verify that jobs actually exist and completed
|
|
1273
|
+
if session_info.jobs:
|
|
1274
|
+
# Check if all jobs are in terminal states
|
|
1275
|
+
terminal_states = {'done', 'failed', 'cancelled'}
|
|
1276
|
+
all_terminal = all(job.get('status') in terminal_states for job in session_info.jobs.values())
|
|
1277
|
+
if all_terminal:
|
|
1278
|
+
return session_info
|
|
1279
|
+
else:
|
|
1280
|
+
# No jobs but status is "done" - this is a bug, keep waiting
|
|
1281
|
+
logger.warning(f"⚠️ Session {session_id} status is 'done' but no jobs exist - this shouldn't happen, continuing to wait...")
|
|
1282
|
+
# Don't return - keep waiting for jobs to appear
|
|
1237
1283
|
|
|
1238
1284
|
time.sleep(check_interval)
|
|
1239
1285
|
|
|
@@ -2145,8 +2191,38 @@ class FeatrixSphereClient:
|
|
|
2145
2191
|
data['quick_run'] = 'true'
|
|
2146
2192
|
data['epochs'] = str(epochs)
|
|
2147
2193
|
print(f"Training epochs: {epochs} (quick_run mode enabled)")
|
|
2148
|
-
|
|
2149
|
-
|
|
2194
|
+
|
|
2195
|
+
# Check file size - warn if very large
|
|
2196
|
+
file_size_mb = len(file_content) / (1024 * 1024)
|
|
2197
|
+
CHUNK_SIZE_MB = 512 # 512 MB chunk size
|
|
2198
|
+
CHUNK_SIZE_BYTES = CHUNK_SIZE_MB * 1024 * 1024
|
|
2199
|
+
|
|
2200
|
+
if file_size_mb > CHUNK_SIZE_MB:
|
|
2201
|
+
print(f"⚠️ Warning: File size ({file_size_mb:.1f} MB) exceeds {CHUNK_SIZE_MB} MB threshold")
|
|
2202
|
+
print(f" Large uploads may timeout. Consider splitting the data or using smaller batches.")
|
|
2203
|
+
|
|
2204
|
+
# Try upload with retry on 504
|
|
2205
|
+
import time
|
|
2206
|
+
upload_trace_id = f"UPLOAD-{int(time.time()*1000)}"
|
|
2207
|
+
print(f"🔵 [CLIENT] {upload_trace_id} Starting upload request")
|
|
2208
|
+
print(f" Endpoint: /compute/upload_with_new_session/")
|
|
2209
|
+
print(f" File: {filename}, Size: {file_size_mb:.2f} MB")
|
|
2210
|
+
print(f" Form data keys: {list(data.keys())}")
|
|
2211
|
+
try:
|
|
2212
|
+
response = self._make_request("POST", "/compute/upload_with_new_session/", files=files, data=data)
|
|
2213
|
+
print(f"🔵 [CLIENT] {upload_trace_id} Received response: HTTP {response.status_code}")
|
|
2214
|
+
except requests.exceptions.HTTPError as e:
|
|
2215
|
+
# If we get a 504 and file is large, suggest chunking
|
|
2216
|
+
if e.response and e.response.status_code == 504 and file_size_mb > CHUNK_SIZE_MB:
|
|
2217
|
+
print(f"\n❌ 504 Gateway Timeout on large file upload ({file_size_mb:.1f} MB)")
|
|
2218
|
+
print(f" File exceeds {CHUNK_SIZE_MB} MB - chunking not yet implemented for regular uploads")
|
|
2219
|
+
print(f" Consider:")
|
|
2220
|
+
print(f" 1. Splitting your data into smaller files (< {CHUNK_SIZE_MB} MB each)")
|
|
2221
|
+
print(f" 2. Using the chunked upload endpoint (if available)")
|
|
2222
|
+
print(f" 3. Retrying the upload (server may have been temporarily busy)")
|
|
2223
|
+
raise
|
|
2224
|
+
else:
|
|
2225
|
+
raise
|
|
2150
2226
|
|
|
2151
2227
|
response_data = response.json()
|
|
2152
2228
|
session_id = response_data.get('session_id')
|
|
@@ -5296,6 +5372,219 @@ class FeatrixSphereClient:
|
|
|
5296
5372
|
if verbose:
|
|
5297
5373
|
print(f"❌ Error starting predictor continuation: {e}")
|
|
5298
5374
|
raise
|
|
5375
|
+
|
|
5376
|
+
def train_on_partial_foundation(
|
|
5377
|
+
self,
|
|
5378
|
+
foundation_session_id: str,
|
|
5379
|
+
local_data_file: str,
|
|
5380
|
+
target_column: str,
|
|
5381
|
+
target_column_type: str,
|
|
5382
|
+
checkpoint_epoch: int = None,
|
|
5383
|
+
epochs: int = 0,
|
|
5384
|
+
rare_label_value: str = None,
|
|
5385
|
+
use_class_weights: bool = True,
|
|
5386
|
+
class_imbalance: dict = None,
|
|
5387
|
+
cost_false_positive: float = None,
|
|
5388
|
+
cost_false_negative: float = None,
|
|
5389
|
+
name: str = None,
|
|
5390
|
+
session_name_prefix: str = None,
|
|
5391
|
+
webhooks: Dict[str, str] = None,
|
|
5392
|
+
poll_interval: int = 30,
|
|
5393
|
+
max_poll_time: int = 3600,
|
|
5394
|
+
verbose: bool = True
|
|
5395
|
+
) -> Dict[str, Any]:
|
|
5396
|
+
"""
|
|
5397
|
+
Train a predictor on a partial/in-progress foundation model.
|
|
5398
|
+
|
|
5399
|
+
Designed for use while the foundation model is STILL TRAINING. Test predictor
|
|
5400
|
+
performance on intermediate checkpoints without waiting for full ES training
|
|
5401
|
+
to complete. Also works with completed foundation training.
|
|
5402
|
+
|
|
5403
|
+
Creates a NEW session using:
|
|
5404
|
+
- Checkpoint from foundation's ES training (specific epoch or best/latest)
|
|
5405
|
+
- Your uploaded data file for predictor training
|
|
5406
|
+
- Metadata about foundation training progress at checkpoint time
|
|
5407
|
+
|
|
5408
|
+
Perfect for:
|
|
5409
|
+
- Testing predictor performance while ES is still training
|
|
5410
|
+
- Training on partially-trained foundation models
|
|
5411
|
+
- Running parallel experiments on different checkpoint epochs
|
|
5412
|
+
|
|
5413
|
+
Args:
|
|
5414
|
+
foundation_session_id: Session ID with ES training (in-progress or completed)
|
|
5415
|
+
local_data_file: Path to CSV file on YOUR MACHINE (will be uploaded)
|
|
5416
|
+
target_column: Column to predict
|
|
5417
|
+
target_column_type: "set" for classification, "scalar" for regression
|
|
5418
|
+
checkpoint_epoch: Which epoch checkpoint to use (None = best/latest available)
|
|
5419
|
+
epochs: Predictor training epochs (0 = auto-calculate based on data size)
|
|
5420
|
+
rare_label_value: Minority class label for binary classification
|
|
5421
|
+
use_class_weights: Enable class weighting for imbalanced data
|
|
5422
|
+
class_imbalance: Expected class distribution from real world
|
|
5423
|
+
cost_false_positive: Cost of false positive (classification only)
|
|
5424
|
+
cost_false_negative: Cost of false negative (classification only)
|
|
5425
|
+
name: Optional name for the new session
|
|
5426
|
+
session_name_prefix: Optional prefix for session ID
|
|
5427
|
+
webhooks: Webhook configuration dict
|
|
5428
|
+
poll_interval: Seconds between status checks (default: 30)
|
|
5429
|
+
max_poll_time: Maximum polling time in seconds (default: 3600 = 1 hour)
|
|
5430
|
+
verbose: Print status updates
|
|
5431
|
+
|
|
5432
|
+
Returns:
|
|
5433
|
+
dict with:
|
|
5434
|
+
- new_session_id: Created session ID
|
|
5435
|
+
- foundation_session_id: Original foundation session
|
|
5436
|
+
- checkpoint_epoch: Epoch used for checkpoint
|
|
5437
|
+
- foundation_training_metadata: Progress info when checkpoint was created
|
|
5438
|
+
- target_column: Column being predicted
|
|
5439
|
+
- predictor_epochs: Training epochs
|
|
5440
|
+
|
|
5441
|
+
Example:
|
|
5442
|
+
```python
|
|
5443
|
+
# Train on epoch 50 checkpoint while ES is still training
|
|
5444
|
+
result = client.train_on_partial_foundation(
|
|
5445
|
+
foundation_session_id="abc-def-ghi",
|
|
5446
|
+
local_data_file="my_data.csv",
|
|
5447
|
+
target_column="price",
|
|
5448
|
+
target_column_type="scalar",
|
|
5449
|
+
checkpoint_epoch=50,
|
|
5450
|
+
epochs=100
|
|
5451
|
+
)
|
|
5452
|
+
|
|
5453
|
+
print(f"New session: {result['new_session_id']}")
|
|
5454
|
+
print(f"Foundation was {result['foundation_training_metadata']['training_progress_percent']}% trained")
|
|
5455
|
+
```
|
|
5456
|
+
"""
|
|
5457
|
+
import os
|
|
5458
|
+
from pathlib import Path
|
|
5459
|
+
|
|
5460
|
+
# Validate inputs
|
|
5461
|
+
if not os.path.exists(local_data_file):
|
|
5462
|
+
raise FileNotFoundError(f"Local data file not found: {local_data_file}")
|
|
5463
|
+
|
|
5464
|
+
if target_column_type not in ["set", "scalar"]:
|
|
5465
|
+
raise ValueError("target_column_type must be 'set' or 'scalar'")
|
|
5466
|
+
|
|
5467
|
+
# Prepare form data
|
|
5468
|
+
form_data = {
|
|
5469
|
+
'target_column': target_column,
|
|
5470
|
+
'target_column_type': target_column_type,
|
|
5471
|
+
'epochs': str(epochs),
|
|
5472
|
+
'use_class_weights': str(use_class_weights).lower(),
|
|
5473
|
+
}
|
|
5474
|
+
|
|
5475
|
+
if checkpoint_epoch is not None:
|
|
5476
|
+
form_data['checkpoint_epoch'] = str(checkpoint_epoch)
|
|
5477
|
+
if rare_label_value:
|
|
5478
|
+
form_data['rare_label_value'] = rare_label_value
|
|
5479
|
+
if class_imbalance:
|
|
5480
|
+
import json
|
|
5481
|
+
form_data['class_imbalance'] = json.dumps(class_imbalance)
|
|
5482
|
+
if cost_false_positive is not None:
|
|
5483
|
+
form_data['cost_false_positive'] = str(cost_false_positive)
|
|
5484
|
+
if cost_false_negative is not None:
|
|
5485
|
+
form_data['cost_false_negative'] = str(cost_false_negative)
|
|
5486
|
+
if name:
|
|
5487
|
+
form_data['name'] = name
|
|
5488
|
+
if session_name_prefix:
|
|
5489
|
+
form_data['session_name_prefix'] = session_name_prefix
|
|
5490
|
+
if webhooks:
|
|
5491
|
+
import json
|
|
5492
|
+
form_data['webhooks'] = json.dumps(webhooks)
|
|
5493
|
+
|
|
5494
|
+
# Upload file
|
|
5495
|
+
try:
|
|
5496
|
+
with open(local_data_file, 'rb') as f:
|
|
5497
|
+
files = {'file': (Path(local_data_file).name, f, 'text/csv')}
|
|
5498
|
+
response_data = self._post_multipart(
|
|
5499
|
+
f"/compute/session/{foundation_session_id}/train_on_partial_foundation",
|
|
5500
|
+
data=form_data,
|
|
5501
|
+
files=files
|
|
5502
|
+
)
|
|
5503
|
+
|
|
5504
|
+
new_session_id = response_data.get('new_session_id')
|
|
5505
|
+
checkpoint_epoch_used = response_data.get('checkpoint_epoch')
|
|
5506
|
+
training_metadata = response_data.get('foundation_training_metadata', {})
|
|
5507
|
+
|
|
5508
|
+
if verbose:
|
|
5509
|
+
print(f"✅ {response_data.get('message')}")
|
|
5510
|
+
print(f" New session ID: {new_session_id}")
|
|
5511
|
+
print(f" Checkpoint epoch: {checkpoint_epoch_used}")
|
|
5512
|
+
if training_metadata.get('training_progress_percent'):
|
|
5513
|
+
print(f" Foundation training progress: {training_metadata['training_progress_percent']}%")
|
|
5514
|
+
if training_metadata.get('validation_loss_at_checkpoint'):
|
|
5515
|
+
print(f" Val loss at checkpoint: {training_metadata['validation_loss_at_checkpoint']:.4f}")
|
|
5516
|
+
|
|
5517
|
+
# Poll for completion if requested
|
|
5518
|
+
if poll_interval > 0 and max_poll_time > 0 and new_session_id:
|
|
5519
|
+
import time
|
|
5520
|
+
start_time = time.time()
|
|
5521
|
+
last_message = ""
|
|
5522
|
+
|
|
5523
|
+
while time.time() - start_time < max_poll_time:
|
|
5524
|
+
try:
|
|
5525
|
+
session_info = self.get_session_status(new_session_id)
|
|
5526
|
+
jobs = session_info.jobs if hasattr(session_info, 'jobs') else {}
|
|
5527
|
+
|
|
5528
|
+
# Find predictor training jobs
|
|
5529
|
+
sp_jobs = {j_id: j for j_id, j in jobs.items()
|
|
5530
|
+
if 'train_single_predictor' in j.get('type', '')}
|
|
5531
|
+
|
|
5532
|
+
if not sp_jobs:
|
|
5533
|
+
if verbose:
|
|
5534
|
+
print("⏳ Waiting for predictor job to start...")
|
|
5535
|
+
time.sleep(poll_interval)
|
|
5536
|
+
continue
|
|
5537
|
+
|
|
5538
|
+
# Check statuses
|
|
5539
|
+
running = [j_id for j_id, j in sp_jobs.items() if j.get('status') == 'running']
|
|
5540
|
+
done = [j_id for j_id, j in sp_jobs.items() if j.get('status') == 'done']
|
|
5541
|
+
failed = [j_id for j_id, j in sp_jobs.items() if j.get('status') == 'failed']
|
|
5542
|
+
|
|
5543
|
+
status_msg = f"Running: {len(running)}, Done: {len(done)}, Failed: {len(failed)}"
|
|
5544
|
+
if status_msg != last_message and verbose:
|
|
5545
|
+
print(f"📊 {status_msg}")
|
|
5546
|
+
last_message = status_msg
|
|
5547
|
+
|
|
5548
|
+
if not running and (done or failed):
|
|
5549
|
+
if done:
|
|
5550
|
+
if verbose:
|
|
5551
|
+
print(f"✅ Predictor training completed!")
|
|
5552
|
+
return {
|
|
5553
|
+
**response_data,
|
|
5554
|
+
"status": "completed",
|
|
5555
|
+
"poll_time": int(time.time() - start_time)
|
|
5556
|
+
}
|
|
5557
|
+
elif failed:
|
|
5558
|
+
if verbose:
|
|
5559
|
+
print(f"❌ Predictor training failed")
|
|
5560
|
+
return {
|
|
5561
|
+
**response_data,
|
|
5562
|
+
"status": "failed",
|
|
5563
|
+
"failed_jobs": failed,
|
|
5564
|
+
"poll_time": int(time.time() - start_time)
|
|
5565
|
+
}
|
|
5566
|
+
|
|
5567
|
+
time.sleep(poll_interval)
|
|
5568
|
+
except Exception as poll_error:
|
|
5569
|
+
if verbose:
|
|
5570
|
+
print(f"⚠️ Polling error: {poll_error}")
|
|
5571
|
+
time.sleep(poll_interval)
|
|
5572
|
+
|
|
5573
|
+
if verbose:
|
|
5574
|
+
print(f"⏰ Polling timeout ({max_poll_time}s). Training may still be in progress.")
|
|
5575
|
+
|
|
5576
|
+
return {
|
|
5577
|
+
**response_data,
|
|
5578
|
+
"status": "timeout",
|
|
5579
|
+
"poll_time": max_poll_time
|
|
5580
|
+
}
|
|
5581
|
+
|
|
5582
|
+
return response_data
|
|
5583
|
+
|
|
5584
|
+
except Exception as e:
|
|
5585
|
+
if verbose:
|
|
5586
|
+
print(f"❌ Error training on partial foundation: {e}")
|
|
5587
|
+
raise
|
|
5299
5588
|
|
|
5300
5589
|
def foundation_model_train_more(self, session_id: str, es_id: str = None, data_passes: int = None,
|
|
5301
5590
|
epochs: int = None, poll_interval: int = 30, max_poll_time: int = 3600,
|
|
@@ -7,7 +7,6 @@ requirements.txt
|
|
|
7
7
|
setup.py
|
|
8
8
|
system_monitor.py
|
|
9
9
|
featrixsphere/__init__.py
|
|
10
|
-
featrixsphere/cli.py
|
|
11
10
|
featrixsphere/client.py
|
|
12
11
|
featrixsphere/test_client.py
|
|
13
12
|
featrixsphere.egg-info/PKG-INFO
|
|
@@ -21,7 +20,6 @@ src/api.py
|
|
|
21
20
|
src/auto_upgrade_monitor.py
|
|
22
21
|
src/build_version.py
|
|
23
22
|
src/celery_app.py
|
|
24
|
-
src/cli.py
|
|
25
23
|
src/config.py
|
|
26
24
|
src/demo_existing_model.py
|
|
27
25
|
src/demo_label_updates.py
|
|
@@ -33,17 +31,18 @@ src/event_log.py
|
|
|
33
31
|
src/example_api_usage.py
|
|
34
32
|
src/example_prediction_feedback.py
|
|
35
33
|
src/example_train_predictor.py
|
|
36
|
-
src/featrix_queue.py
|
|
37
34
|
src/featrix_watchdog.py
|
|
38
35
|
src/gc_cleanup.py
|
|
39
36
|
src/llm_client.py
|
|
40
37
|
src/manage_churro.sh
|
|
38
|
+
src/migrate_string_cache_naming.py
|
|
41
39
|
src/neural.py
|
|
42
40
|
src/node-install.sh
|
|
43
41
|
src/prediction_drift_monitor.py
|
|
44
42
|
src/prediction_persistence_worker.py
|
|
45
43
|
src/quick_test_deployment.sh
|
|
46
44
|
src/recreate_session.py
|
|
45
|
+
src/redis_job_progress.py
|
|
47
46
|
src/redis_prediction_cli.py
|
|
48
47
|
src/redis_prediction_store.py
|
|
49
48
|
src/regenerate_training_movie.py
|
|
@@ -53,6 +52,8 @@ src/run_api_server.sh
|
|
|
53
52
|
src/send_email.py
|
|
54
53
|
src/slack.py
|
|
55
54
|
src/standalone_prediction.py
|
|
55
|
+
src/start_celery_cpu_worker.sh
|
|
56
|
+
src/start_celery_gpu_worker.sh
|
|
56
57
|
src/start_celery_worker.sh
|
|
57
58
|
src/start_churro_server.sh
|
|
58
59
|
src/tail-watch.py
|
|
@@ -67,17 +68,27 @@ src/test_upload_endpoint.py
|
|
|
67
68
|
src/tree.py
|
|
68
69
|
src/utils.py
|
|
69
70
|
src/version.py
|
|
71
|
+
src/lib/api_event_retry.py
|
|
72
|
+
src/lib/celery_job_recovery.py
|
|
70
73
|
src/lib/convergence_monitor.py
|
|
74
|
+
src/lib/crash_tracker.py
|
|
75
|
+
src/lib/distribution_shift_detector.py
|
|
71
76
|
src/lib/epoch_projections.py
|
|
72
77
|
src/lib/es_projections.py
|
|
73
78
|
src/lib/es_training.py
|
|
79
|
+
src/lib/es_training_wrapper.py
|
|
74
80
|
src/lib/featrix_debug.py
|
|
81
|
+
src/lib/job_manager.py
|
|
75
82
|
src/lib/json_encoder_cache.py
|
|
76
83
|
src/lib/knn_training.py
|
|
84
|
+
src/lib/queue_manager.py
|
|
85
|
+
src/lib/session_chains.py
|
|
86
|
+
src/lib/session_manager.py
|
|
77
87
|
src/lib/single_predictor_cv.py
|
|
78
88
|
src/lib/single_predictor_training.py
|
|
79
89
|
src/lib/sphere_config.py
|
|
80
90
|
src/lib/structureddata.py
|
|
91
|
+
src/lib/system_health_monitor.py
|
|
81
92
|
src/lib/training_monitor.py
|
|
82
93
|
src/lib/utils.py
|
|
83
94
|
src/lib/vector_db.py
|
|
@@ -112,6 +123,7 @@ src/lib/featrix/neural/hubspot_free_domains_list_may_2025.py
|
|
|
112
123
|
src/lib/featrix/neural/input_data_file.py
|
|
113
124
|
src/lib/featrix/neural/input_data_set.py
|
|
114
125
|
src/lib/featrix/neural/integrity.py
|
|
126
|
+
src/lib/featrix/neural/io_utils.py
|
|
115
127
|
src/lib/featrix/neural/json_cache.py
|
|
116
128
|
src/lib/featrix/neural/json_codec.py
|
|
117
129
|
src/lib/featrix/neural/logging_config.py
|
|
@@ -151,6 +163,7 @@ src/lib/featrix/neural/qa/generate_focal_report.py
|
|
|
151
163
|
src/lib/featrix/neural/qa/model_advisor.py
|
|
152
164
|
src/lib/featrix/neural/qa/show_results.py
|
|
153
165
|
src/lib/featrix/neural/qa/test_adaptive_training.py
|
|
166
|
+
src/lib/featrix/neural/qa/test_checkpoint_dict_reconstruction.py
|
|
154
167
|
src/lib/featrix/neural/qa/test_confusion_matrix_metadata.py
|
|
155
168
|
src/lib/featrix/neural/qa/test_embedding_quality.py
|
|
156
169
|
src/lib/featrix/neural/qa/test_embedding_space.py
|