featrixsphere 0.2.4984__tar.gz → 0.2.5182__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.4984 → featrixsphere-0.2.5182}/PKG-INFO +1 -1
- featrixsphere-0.2.5182/VERSION +1 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/featrixsphere/__init__.py +1 -1
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/featrixsphere/client.py +179 -111
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/featrixsphere.egg-info/PKG-INFO +1 -1
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/featrixsphere.egg-info/SOURCES.txt +10 -15
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/api.py +271 -726
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/celery_app.py +233 -7
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/featrix_watchdog.py +30 -4
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/celery_job_recovery.py +7 -5
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/embedding_space_io.py +5 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/es_training.py +1213 -996
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/es_training_wrapper.py +4 -0
- featrixsphere-0.2.5182/src/lib/featrix/neural/causal_relationship_scorer.py +416 -0
- featrixsphere-0.2.5182/src/lib/featrix/neural/charting.py +868 -0
- featrixsphere-0.2.5182/src/lib/featrix/neural/customer_quality_tracker.py +277 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/dataloader_utils.py +45 -8
- featrixsphere-0.2.5182/src/lib/featrix/neural/dynamic_relationship_extractor.py +4608 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/embedded_space.py +2273 -426
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/encoders.py +337 -28
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/feature_effectiveness_tracker.py +5 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/io_utils.py +92 -10
- featrixsphere-0.2.5182/src/lib/featrix/neural/lr_timeline.py +1198 -0
- featrixsphere-0.2.5182/src/lib/featrix/neural/mask_bias_tracker.py +344 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_adaptive_loss_benchmark.py +3 -1
- featrixsphere-0.2.5182/src/lib/featrix/neural/qa/test_lift_measurement_validation.py +465 -0
- featrixsphere-0.2.5182/src/lib/featrix/neural/qa/test_lr_timeline_smoothness.py +248 -0
- featrixsphere-0.2.5182/src/lib/featrix/neural/qa/test_min_support_rank_scaling.py +311 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_relationship_extractor_integration.py +6 -2
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_relationship_extractor_mixed_types.py +1 -1
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_set_encoder_strategies.py +3 -2
- featrixsphere-0.2.5182/src/lib/featrix/neural/relationship_importance_validator.py +427 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/single_predictor.py +2622 -540
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/sphere_config.py +1 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/string_cache.py +23 -17
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/string_codec.py +6 -4
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/training_logger.py +61 -1
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/training_timeline.py +24 -33
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/transformer_encoder.py +246 -50
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/utils.py +1 -4
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/meta_learning_client.py +2 -2
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/session_manager.py +282 -26
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/single_predictor_training.py +13 -7
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/weightwatcher_tracking.py +93 -2
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/prediction_client.py +20 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/test_api_client.py +32 -3
- featrixsphere-0.2.4984/VERSION +0 -1
- featrixsphere-0.2.4984/featrixsphere/test_client.py +0 -311
- featrixsphere-0.2.4984/src/lib/featrix/neural/dynamic_relationship_extractor.py +0 -1984
- featrixsphere-0.2.4984/src/lib/featrix/neural/test_graph_encoder.py +0 -170
- featrixsphere-0.2.4984/src/test_complete_workflow.py +0 -386
- featrixsphere-0.2.4984/src/test_json_tables_prediction.py +0 -314
- featrixsphere-0.2.4984/src/test_redis_predictions.py +0 -92
- featrixsphere-0.2.4984/src/test_server_connection.py +0 -132
- featrixsphere-0.2.4984/src/test_session_models.py +0 -170
- featrixsphere-0.2.4984/src/test_single_predictor_api.py +0 -267
- featrixsphere-0.2.4984/src/test_upload_endpoint.py +0 -131
- featrixsphere-0.2.4984/tests/test_client_data.py +0 -145
- featrixsphere-0.2.4984/tests/test_client_predictions.py +0 -266
- featrixsphere-0.2.4984/tests/test_client_sessions.py +0 -665
- featrixsphere-0.2.4984/tests/test_client_training.py +0 -149
- featrixsphere-0.2.4984/tests/test_local_integration.py +0 -270
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/MANIFEST.in +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/README.md +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/featrix-update.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/featrixsphere.egg-info/dependency_links.txt +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/featrixsphere.egg-info/entry_points.txt +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/featrixsphere.egg-info/not-zip-safe +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/featrixsphere.egg-info/requires.txt +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/featrixsphere.egg-info/top_level.txt +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/nv-install.sh +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/requirements.txt +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/setup.cfg +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/setup.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/auto_upgrade_monitor.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/build_version.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/config.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/demo_existing_model.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/demo_label_updates.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/deploy.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/deploy_cache_debug.sh +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/ensure_watchdog_running.sh +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/error_tracker.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/event_log.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/example_api_usage.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/example_prediction_feedback.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/example_train_predictor.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/gc_cleanup.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/api_event_retry.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/convergence_monitor.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/crash_tracker.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/distribution_shift_detector.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/epoch_projections.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/es_projections.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/__init__.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/__init__.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/calibration_utils.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/classification_metrics.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/config.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/data_frame_data_set.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/detect.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/domain_codec.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/dropout_scheduler.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/embedding_lr_scheduler.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/embedding_quality.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/embedding_space_utils.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/embedding_utils.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/enrich.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/es_projection.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/exceptions.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/featrix_csv.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/featrix_json.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/featrix_module_dict.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/featrix_token.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/feature_engineer.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/feature_suggestion_tracker.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/gpu_utils.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/graph_encoder.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/graph_encoder_training.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/guardrails.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/hubspot_free_domains_list_may_2025.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/hybrid_column_detector.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/hybrid_encoders.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/input_data_file.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/input_data_set.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/integrity.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/json_cache.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/json_codec.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/llm/__init__.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/llm/schema_analyzer.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/local_string_cache.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/logging_config.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/mask_tracker.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/model_config.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/model_hash.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/movie_frame_task.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/multi_table_dataset.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/multi_table_embedding_space.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/network_viz.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/platform_utils.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/prng_control.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/demo_advisor_decisions.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/example_complete_workflow.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/generate_focal_report.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/model_advisor.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/show_results.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_adaptive_training.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_checkpoint_dict_reconstruction.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_confusion_matrix_metadata.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_embedding_quality.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_embedding_space.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_extend_embedding_space.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_feature_engineering_prediction.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_focal_comparison.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_focal_comparison_enhanced.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_focal_loss_single_predictor.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_hybrid_columns.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_label_smoothing.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_monitor_integration.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_piecewise_epochs.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_predict_during_training.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_timeline_quick.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_training_monitor.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/test_warning_tracking.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/qa/visualize_training_timeline.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/relationship_complexity.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/relationship_estimator.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/relationship_extractor.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/relationship_performance.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/relationship_preanalysis.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/relationship_search.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/scalar_codec.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/schema_history.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/set_codec.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/setlist_codec.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/simple_mlp.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/simple_string_cache.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/single_predictor_mlp.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/sqlite_utils.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/stopwatch.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/string_analysis.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/string_list_codec.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/timestamp_codec.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/training_banner.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/training_context_manager.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/training_event.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/training_exceptions.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/training_history_db.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/url_codec.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/url_parser.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/vector_codec.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix/neural/world_data.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/featrix_debug.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/job_manager.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/json_encoder_cache.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/knn_training.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/model_card_repair.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/model_repair.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/pre_analysis_wrapper.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/queue_manager.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/quick_architecture_search.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/session_chains.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/single_predictor_cv.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/sp_training_wrapper.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/sphere_config.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/structureddata.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/system_health_monitor.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/training_monitor.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/utils.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/vector_db.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/lib/webhook_helpers.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/llm_client.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/load_and_test_model.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/manage_churro.sh +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/migrate_string_cache_naming.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/neural.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/node-install.sh +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/prediction_drift_monitor.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/prediction_persistence_worker.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/prediction_server.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/query_schema_worker.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/quick_test_deployment.sh +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/recreate_session.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/redis_job_progress.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/redis_prediction_cli.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/redis_prediction_store.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/regenerate_training_movie.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/render_sphere.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/repair_checkpoint.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/repair_model.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/resubmit_es_completion.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/run_api_server.sh +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/send_email.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/slack.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/standalone_prediction.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/start_celery_cpu_worker.sh +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/start_celery_gpu_worker.sh +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/start_celery_movie_worker.sh +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/tail-watch.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/tree.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/utils.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/src/version.py +0 -0
- {featrixsphere-0.2.4984 → featrixsphere-0.2.5182}/system_monitor.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.2.5182
|
|
@@ -877,24 +877,30 @@ class FeatrixSphereClient:
|
|
|
877
877
|
# Other HTTP errors - re-raise
|
|
878
878
|
raise
|
|
879
879
|
|
|
880
|
-
def publish_session(self, session_id: str) -> Dict[str, Any]:
|
|
880
|
+
def publish_session(self, session_id: str, org_id: str, name: str) -> Dict[str, Any]:
|
|
881
881
|
"""
|
|
882
|
-
Publish a session by moving it to /sphere/
|
|
882
|
+
Publish a session by moving it to /backplane/backplane1/sphere/PUBLISHED/<org_id>/<name>/<sessionId>.
|
|
883
883
|
Moves both the session file and output directory.
|
|
884
884
|
|
|
885
885
|
Args:
|
|
886
886
|
session_id: Session ID to publish
|
|
887
|
+
org_id: Organization ID for subdirectory organization
|
|
888
|
+
name: Name for the published session (creates subdirectory under org_id)
|
|
887
889
|
|
|
888
890
|
Returns:
|
|
889
891
|
Response with published_path, output_path, and status
|
|
890
892
|
|
|
891
893
|
Example:
|
|
892
894
|
```python
|
|
893
|
-
result = client.publish_session("abc123")
|
|
895
|
+
result = client.publish_session("abc123", org_id="org_123", name="production_model")
|
|
894
896
|
print(f"Published to: {result['published_path']}")
|
|
895
897
|
```
|
|
896
898
|
"""
|
|
897
|
-
|
|
899
|
+
data = {
|
|
900
|
+
"org_id": org_id,
|
|
901
|
+
"name": name
|
|
902
|
+
}
|
|
903
|
+
response_data = self._post_json(f"/compute/session/{session_id}/publish", data)
|
|
898
904
|
return response_data
|
|
899
905
|
|
|
900
906
|
def deprecate_session(self, session_id: str, warning_message: str, expiration_date: str) -> Dict[str, Any]:
|
|
@@ -1241,7 +1247,18 @@ class FeatrixSphereClient:
|
|
|
1241
1247
|
} if show_live_training_movie else None
|
|
1242
1248
|
|
|
1243
1249
|
while time.time() - start_time < max_wait_time:
|
|
1244
|
-
|
|
1250
|
+
try:
|
|
1251
|
+
session_info = self.get_session_status(session_id)
|
|
1252
|
+
except KeyboardInterrupt:
|
|
1253
|
+
print("\n\n⚠️ Interrupted by user (Ctrl+C)")
|
|
1254
|
+
print(f" Session {session_id} status check interrupted")
|
|
1255
|
+
print(" Returning current session status...")
|
|
1256
|
+
# Return last known status or get it one more time if possible
|
|
1257
|
+
try:
|
|
1258
|
+
return self.get_session_status(session_id)
|
|
1259
|
+
except:
|
|
1260
|
+
# If we can't get status, return a basic SessionInfo
|
|
1261
|
+
return SessionInfo(session_id=session_id, status="unknown", jobs={})
|
|
1245
1262
|
|
|
1246
1263
|
# Clear previous output and show updated status
|
|
1247
1264
|
clear_output(wait=True)
|
|
@@ -1357,7 +1374,19 @@ class FeatrixSphereClient:
|
|
|
1357
1374
|
session_task = progress.add_task(f"[bold green]Session {session_id}", total=100)
|
|
1358
1375
|
|
|
1359
1376
|
while time.time() - start_time < max_wait_time:
|
|
1360
|
-
|
|
1377
|
+
try:
|
|
1378
|
+
session_info = self.get_session_status(session_id)
|
|
1379
|
+
except KeyboardInterrupt:
|
|
1380
|
+
progress.console.print("\n\n[bold yellow]⚠️ Interrupted by user (Ctrl+C)[/bold yellow]")
|
|
1381
|
+
progress.console.print(f" Session {session_id} status check interrupted")
|
|
1382
|
+
progress.console.print(" Returning current session status...")
|
|
1383
|
+
# Return last known status or get it one more time if possible
|
|
1384
|
+
try:
|
|
1385
|
+
return self.get_session_status(session_id)
|
|
1386
|
+
except:
|
|
1387
|
+
# If we can't get status, return a basic SessionInfo
|
|
1388
|
+
from featrixsphere.client import SessionInfo
|
|
1389
|
+
return SessionInfo(session_id=session_id, status="unknown", jobs={})
|
|
1361
1390
|
|
|
1362
1391
|
# Update session progress
|
|
1363
1392
|
elapsed = time.time() - start_time
|
|
@@ -1426,7 +1455,19 @@ class FeatrixSphereClient:
|
|
|
1426
1455
|
jobs_appeared = False
|
|
1427
1456
|
|
|
1428
1457
|
while time.time() - initial_wait_start < initial_wait_timeout:
|
|
1429
|
-
|
|
1458
|
+
try:
|
|
1459
|
+
session_info = self.get_session_status(session_id)
|
|
1460
|
+
except KeyboardInterrupt:
|
|
1461
|
+
logger.info("\n⚠️ Interrupted by user (Ctrl+C)")
|
|
1462
|
+
logger.info(f" Session {session_id} status check interrupted")
|
|
1463
|
+
logger.info(" Returning current session status...")
|
|
1464
|
+
# Return last known status or get it one more time if possible
|
|
1465
|
+
try:
|
|
1466
|
+
return self.get_session_status(session_id)
|
|
1467
|
+
except:
|
|
1468
|
+
# If we can't get status, return a basic SessionInfo
|
|
1469
|
+
return SessionInfo(session_id=session_id, status="unknown", jobs={})
|
|
1470
|
+
|
|
1430
1471
|
if session_info.jobs:
|
|
1431
1472
|
jobs_appeared = True
|
|
1432
1473
|
break
|
|
@@ -1434,7 +1475,20 @@ class FeatrixSphereClient:
|
|
|
1434
1475
|
|
|
1435
1476
|
# Main monitoring loop
|
|
1436
1477
|
while time.time() - start_time < max_wait_time:
|
|
1437
|
-
|
|
1478
|
+
try:
|
|
1479
|
+
session_info = self.get_session_status(session_id)
|
|
1480
|
+
except KeyboardInterrupt:
|
|
1481
|
+
logger.info("\n⚠️ Interrupted by user (Ctrl+C)")
|
|
1482
|
+
logger.info(f" Session {session_id} status check interrupted")
|
|
1483
|
+
logger.info(" Returning current session status...")
|
|
1484
|
+
# Return last known status or get it one more time if possible
|
|
1485
|
+
try:
|
|
1486
|
+
return self.get_session_status(session_id)
|
|
1487
|
+
except:
|
|
1488
|
+
# If we can't get status, return a basic SessionInfo
|
|
1489
|
+
from featrixsphere.client import SessionInfo
|
|
1490
|
+
return SessionInfo(session_id=session_id, status="unknown", jobs={})
|
|
1491
|
+
|
|
1438
1492
|
elapsed = time.time() - start_time
|
|
1439
1493
|
|
|
1440
1494
|
# Call the callback with current status
|
|
@@ -1471,7 +1525,19 @@ class FeatrixSphereClient:
|
|
|
1471
1525
|
last_num_lines = 0
|
|
1472
1526
|
|
|
1473
1527
|
while time.time() - start_time < max_wait_time:
|
|
1474
|
-
|
|
1528
|
+
try:
|
|
1529
|
+
session_info = self.get_session_status(session_id)
|
|
1530
|
+
except KeyboardInterrupt:
|
|
1531
|
+
print("\n\n⚠️ Interrupted by user (Ctrl+C)")
|
|
1532
|
+
print(f" Session {session_id} status check interrupted")
|
|
1533
|
+
print(" Returning current session status...")
|
|
1534
|
+
# Return last known status or get it one more time if possible
|
|
1535
|
+
try:
|
|
1536
|
+
return self.get_session_status(session_id)
|
|
1537
|
+
except:
|
|
1538
|
+
# If we can't get status, return a basic SessionInfo
|
|
1539
|
+
from featrixsphere.client import SessionInfo
|
|
1540
|
+
return SessionInfo(session_id=session_id, status="unknown", jobs={})
|
|
1475
1541
|
|
|
1476
1542
|
# Clear previous lines if terminal supports it
|
|
1477
1543
|
if sys.stdout.isatty() and last_num_lines > 0:
|
|
@@ -2866,6 +2932,110 @@ class FeatrixSphereClient:
|
|
|
2866
2932
|
response_data = self._post_json(f"/session/{session_id}/predict", request_payload, max_retries=max_retries)
|
|
2867
2933
|
return response_data
|
|
2868
2934
|
|
|
2935
|
+
def explain(self, session_id: str, record, class_idx: int = None,
|
|
2936
|
+
target_column: str = None, predictor_id: str = None,
|
|
2937
|
+
record_b: Dict[str, Any] = None,
|
|
2938
|
+
max_retries: int = None) -> Dict[str, Any]:
|
|
2939
|
+
"""
|
|
2940
|
+
Explain a prediction using gradient attribution.
|
|
2941
|
+
|
|
2942
|
+
Supports multiple modes:
|
|
2943
|
+
- explain(record): Explain a single row
|
|
2944
|
+
- explain(record, record_b=other_record): Compare two rows
|
|
2945
|
+
- explain([record1, record2, ...]): Explain multiple rows
|
|
2946
|
+
|
|
2947
|
+
Returns what matters to Featrix in the given row(s):
|
|
2948
|
+
- Which features mattered for this prediction
|
|
2949
|
+
- Which relationships mattered for this prediction
|
|
2950
|
+
|
|
2951
|
+
Args:
|
|
2952
|
+
session_id: ID of session with trained predictor
|
|
2953
|
+
record: Record dictionary (without target column), or list of records
|
|
2954
|
+
class_idx: Target class index for attribution (default: predicted class)
|
|
2955
|
+
target_column: Specific target column predictor to use (optional)
|
|
2956
|
+
predictor_id: Specific predictor ID to use (optional)
|
|
2957
|
+
record_b: Optional second record for comparison
|
|
2958
|
+
max_retries: Number of retries for errors (default: uses client default)
|
|
2959
|
+
|
|
2960
|
+
Returns:
|
|
2961
|
+
For single record:
|
|
2962
|
+
Dictionary with:
|
|
2963
|
+
- feature_scores: {col_name: score} - gradient norm per feature
|
|
2964
|
+
- pair_scores: {(i, j): score} - gradient norm per relationship pair
|
|
2965
|
+
- target_class_idx: The class index used for attribution
|
|
2966
|
+
- logit: The prediction logit
|
|
2967
|
+
|
|
2968
|
+
For two records (record_b provided):
|
|
2969
|
+
Dictionary with:
|
|
2970
|
+
- record_a: Explanation for first record
|
|
2971
|
+
- record_b: Explanation for second record
|
|
2972
|
+
- difference: Difference in feature_scores and pair_scores
|
|
2973
|
+
|
|
2974
|
+
For list of records:
|
|
2975
|
+
Dictionary with:
|
|
2976
|
+
- explanations: List of explanation dictionaries, one per record
|
|
2977
|
+
"""
|
|
2978
|
+
# Clean NaN/Inf values
|
|
2979
|
+
if isinstance(record, list):
|
|
2980
|
+
cleaned_record = [self.replace_nans_with_nulls(self._clean_numpy_values(r)) for r in record]
|
|
2981
|
+
else:
|
|
2982
|
+
cleaned_record = self.replace_nans_with_nulls(self._clean_numpy_values(record))
|
|
2983
|
+
|
|
2984
|
+
cleaned_record_b = None
|
|
2985
|
+
if record_b is not None:
|
|
2986
|
+
cleaned_record_b = self.replace_nans_with_nulls(self._clean_numpy_values(record_b))
|
|
2987
|
+
|
|
2988
|
+
# Build request payload
|
|
2989
|
+
request_payload = {
|
|
2990
|
+
"query_record": cleaned_record,
|
|
2991
|
+
}
|
|
2992
|
+
|
|
2993
|
+
if class_idx is not None:
|
|
2994
|
+
request_payload["class_idx"] = class_idx
|
|
2995
|
+
if target_column:
|
|
2996
|
+
request_payload["target_column"] = target_column
|
|
2997
|
+
if predictor_id:
|
|
2998
|
+
request_payload["predictor_id"] = predictor_id
|
|
2999
|
+
if cleaned_record_b is not None:
|
|
3000
|
+
request_payload["query_record_b"] = cleaned_record_b
|
|
3001
|
+
|
|
3002
|
+
response_data = self._post_json(f"/session/{session_id}/explain", request_payload, max_retries=max_retries)
|
|
3003
|
+
|
|
3004
|
+
# Helper to convert pair_scores keys back to tuples
|
|
3005
|
+
def convert_pair_scores(ps_dict):
|
|
3006
|
+
if not isinstance(ps_dict, dict):
|
|
3007
|
+
return ps_dict
|
|
3008
|
+
result = {}
|
|
3009
|
+
for key, score in ps_dict.items():
|
|
3010
|
+
# Key format is "i_j"
|
|
3011
|
+
parts = key.split("_")
|
|
3012
|
+
if len(parts) == 2:
|
|
3013
|
+
try:
|
|
3014
|
+
i, j = int(parts[0]), int(parts[1])
|
|
3015
|
+
result[(i, j)] = score
|
|
3016
|
+
except ValueError:
|
|
3017
|
+
result[key] = score
|
|
3018
|
+
else:
|
|
3019
|
+
result[key] = score
|
|
3020
|
+
return result
|
|
3021
|
+
|
|
3022
|
+
# Convert pair_scores keys back to tuples for easier use
|
|
3023
|
+
if "pair_scores" in response_data:
|
|
3024
|
+
response_data["pair_scores"] = convert_pair_scores(response_data["pair_scores"])
|
|
3025
|
+
elif "explanations" in response_data:
|
|
3026
|
+
for expl in response_data["explanations"]:
|
|
3027
|
+
if "pair_scores" in expl:
|
|
3028
|
+
expl["pair_scores"] = convert_pair_scores(expl["pair_scores"])
|
|
3029
|
+
elif "record_a" in response_data:
|
|
3030
|
+
if "pair_scores" in response_data["record_a"]:
|
|
3031
|
+
response_data["record_a"]["pair_scores"] = convert_pair_scores(response_data["record_a"]["pair_scores"])
|
|
3032
|
+
if "pair_scores" in response_data["record_b"]:
|
|
3033
|
+
response_data["record_b"]["pair_scores"] = convert_pair_scores(response_data["record_b"]["pair_scores"])
|
|
3034
|
+
if "difference" in response_data and "pair_scores" in response_data["difference"]:
|
|
3035
|
+
response_data["difference"]["pair_scores"] = convert_pair_scores(response_data["difference"]["pair_scores"])
|
|
3036
|
+
|
|
3037
|
+
return response_data
|
|
3038
|
+
|
|
2869
3039
|
def get_training_metrics(self, session_id: str, max_retries: int = None) -> Dict[str, Any]:
|
|
2870
3040
|
"""
|
|
2871
3041
|
Get training metrics for a session's single predictor.
|
|
@@ -3985,108 +4155,6 @@ class FeatrixSphereClient:
|
|
|
3985
4155
|
|
|
3986
4156
|
return predictor_id
|
|
3987
4157
|
|
|
3988
|
-
def _resolve_predictor_id(self, session_id: str, predictor_id: str = None, target_column: str = None, debug: bool = False) -> Dict[str, Any]:
|
|
3989
|
-
"""
|
|
3990
|
-
Resolve predictor_id or target_column to predictor information.
|
|
3991
|
-
|
|
3992
|
-
Args:
|
|
3993
|
-
session_id: Session ID to check
|
|
3994
|
-
predictor_id: Specific predictor ID to resolve
|
|
3995
|
-
target_column: Target column name (fallback if predictor_id not provided)
|
|
3996
|
-
debug: Whether to print debug information
|
|
3997
|
-
|
|
3998
|
-
Returns:
|
|
3999
|
-
Dictionary with predictor info including target_column, path, predictor_id
|
|
4000
|
-
|
|
4001
|
-
Raises:
|
|
4002
|
-
ValueError: If predictor not found or ambiguous
|
|
4003
|
-
"""
|
|
4004
|
-
available_predictors = self._get_available_predictors(session_id, debug=debug)
|
|
4005
|
-
|
|
4006
|
-
if not available_predictors:
|
|
4007
|
-
# Don't fail here - let the server try to find/auto-discover the predictor
|
|
4008
|
-
# The server's /predict endpoint has smart fallback logic to find checkpoint files
|
|
4009
|
-
# even if the session file wasn't properly updated (e.g., training crashed)
|
|
4010
|
-
if debug:
|
|
4011
|
-
print(f"⚠️ No predictors found via models endpoint, letting server handle discovery")
|
|
4012
|
-
return {
|
|
4013
|
-
'target_column': target_column,
|
|
4014
|
-
'predictor_id': predictor_id,
|
|
4015
|
-
'path': None,
|
|
4016
|
-
'type': None,
|
|
4017
|
-
'server_discovery': True # Flag that server should auto-discover
|
|
4018
|
-
}
|
|
4019
|
-
|
|
4020
|
-
# If predictor_id is provided, find it directly (since it's now the key)
|
|
4021
|
-
if predictor_id:
|
|
4022
|
-
if predictor_id in available_predictors:
|
|
4023
|
-
predictor_info = available_predictors[predictor_id]
|
|
4024
|
-
return {
|
|
4025
|
-
'target_column': predictor_info.get('target_column'),
|
|
4026
|
-
'predictor_id': predictor_id,
|
|
4027
|
-
'path': predictor_info.get('path'),
|
|
4028
|
-
'type': predictor_info.get('type')
|
|
4029
|
-
}
|
|
4030
|
-
|
|
4031
|
-
# Predictor ID not found
|
|
4032
|
-
all_predictor_ids = list(available_predictors.keys())
|
|
4033
|
-
|
|
4034
|
-
raise ValueError(
|
|
4035
|
-
f"Predictor ID '{predictor_id}' not found for session {session_id}. "
|
|
4036
|
-
f"Available predictor IDs: {all_predictor_ids}"
|
|
4037
|
-
)
|
|
4038
|
-
|
|
4039
|
-
# Fallback to target_column validation (search through values)
|
|
4040
|
-
if target_column is None:
|
|
4041
|
-
# Auto-detect: only valid if there's exactly one predictor
|
|
4042
|
-
if len(available_predictors) == 1:
|
|
4043
|
-
predictor_id = list(available_predictors.keys())[0]
|
|
4044
|
-
predictor_info = available_predictors[predictor_id]
|
|
4045
|
-
return {
|
|
4046
|
-
'target_column': predictor_info.get('target_column'),
|
|
4047
|
-
'predictor_id': predictor_id,
|
|
4048
|
-
'path': predictor_info.get('path'),
|
|
4049
|
-
'type': predictor_info.get('type')
|
|
4050
|
-
}
|
|
4051
|
-
else:
|
|
4052
|
-
# Show unique target columns for clarity
|
|
4053
|
-
target_columns = list(set(pred.get('target_column') for pred in available_predictors.values()))
|
|
4054
|
-
raise ValueError(
|
|
4055
|
-
f"Multiple predictors found for session {session_id} with target columns: {target_columns}. "
|
|
4056
|
-
f"Please specify predictor_id parameter for precise selection."
|
|
4057
|
-
)
|
|
4058
|
-
else:
|
|
4059
|
-
# Find predictors by target column (there might be multiple)
|
|
4060
|
-
matching_predictors = {
|
|
4061
|
-
pred_id: pred_info for pred_id, pred_info in available_predictors.items()
|
|
4062
|
-
if pred_info.get('target_column') == target_column
|
|
4063
|
-
}
|
|
4064
|
-
|
|
4065
|
-
if not matching_predictors:
|
|
4066
|
-
target_columns = list(set(pred.get('target_column') for pred in available_predictors.values()))
|
|
4067
|
-
raise ValueError(
|
|
4068
|
-
f"No trained predictor found for target column '{target_column}' in session {session_id}. "
|
|
4069
|
-
f"Available target columns: {target_columns}"
|
|
4070
|
-
)
|
|
4071
|
-
|
|
4072
|
-
if len(matching_predictors) == 1:
|
|
4073
|
-
# Only one predictor for this target column
|
|
4074
|
-
predictor_id = list(matching_predictors.keys())[0]
|
|
4075
|
-
predictor_info = matching_predictors[predictor_id]
|
|
4076
|
-
return {
|
|
4077
|
-
'target_column': target_column,
|
|
4078
|
-
'predictor_id': predictor_id,
|
|
4079
|
-
'path': predictor_info.get('path'),
|
|
4080
|
-
'type': predictor_info.get('type')
|
|
4081
|
-
}
|
|
4082
|
-
else:
|
|
4083
|
-
# Multiple predictors for the same target column
|
|
4084
|
-
predictor_ids = list(matching_predictors.keys())
|
|
4085
|
-
raise ValueError(
|
|
4086
|
-
f"Multiple predictors found for target column '{target_column}' in session {session_id}: {predictor_ids}. "
|
|
4087
|
-
f"Please specify predictor_id parameter for precise selection."
|
|
4088
|
-
)
|
|
4089
|
-
|
|
4090
4158
|
def list_predictors(self, session_id: str, verbose: bool = True, debug: bool = False) -> Dict[str, Dict[str, Any]]:
|
|
4091
4159
|
"""
|
|
4092
4160
|
List all available predictors in a session and their target columns.
|
|
@@ -8,7 +8,6 @@ setup.py
|
|
|
8
8
|
system_monitor.py
|
|
9
9
|
featrixsphere/__init__.py
|
|
10
10
|
featrixsphere/client.py
|
|
11
|
-
featrixsphere/test_client.py
|
|
12
11
|
featrixsphere.egg-info/PKG-INFO
|
|
13
12
|
featrixsphere.egg-info/SOURCES.txt
|
|
14
13
|
featrixsphere.egg-info/dependency_links.txt
|
|
@@ -63,13 +62,6 @@ src/start_celery_gpu_worker.sh
|
|
|
63
62
|
src/start_celery_movie_worker.sh
|
|
64
63
|
src/tail-watch.py
|
|
65
64
|
src/test_api_client.py
|
|
66
|
-
src/test_complete_workflow.py
|
|
67
|
-
src/test_json_tables_prediction.py
|
|
68
|
-
src/test_redis_predictions.py
|
|
69
|
-
src/test_server_connection.py
|
|
70
|
-
src/test_session_models.py
|
|
71
|
-
src/test_single_predictor_api.py
|
|
72
|
-
src/test_upload_endpoint.py
|
|
73
65
|
src/tree.py
|
|
74
66
|
src/utils.py
|
|
75
67
|
src/version.py
|
|
@@ -109,8 +101,11 @@ src/lib/weightwatcher_tracking.py
|
|
|
109
101
|
src/lib/featrix/__init__.py
|
|
110
102
|
src/lib/featrix/neural/__init__.py
|
|
111
103
|
src/lib/featrix/neural/calibration_utils.py
|
|
104
|
+
src/lib/featrix/neural/causal_relationship_scorer.py
|
|
105
|
+
src/lib/featrix/neural/charting.py
|
|
112
106
|
src/lib/featrix/neural/classification_metrics.py
|
|
113
107
|
src/lib/featrix/neural/config.py
|
|
108
|
+
src/lib/featrix/neural/customer_quality_tracker.py
|
|
114
109
|
src/lib/featrix/neural/data_frame_data_set.py
|
|
115
110
|
src/lib/featrix/neural/dataloader_utils.py
|
|
116
111
|
src/lib/featrix/neural/detect.py
|
|
@@ -148,6 +143,8 @@ src/lib/featrix/neural/json_cache.py
|
|
|
148
143
|
src/lib/featrix/neural/json_codec.py
|
|
149
144
|
src/lib/featrix/neural/local_string_cache.py
|
|
150
145
|
src/lib/featrix/neural/logging_config.py
|
|
146
|
+
src/lib/featrix/neural/lr_timeline.py
|
|
147
|
+
src/lib/featrix/neural/mask_bias_tracker.py
|
|
151
148
|
src/lib/featrix/neural/mask_tracker.py
|
|
152
149
|
src/lib/featrix/neural/model_config.py
|
|
153
150
|
src/lib/featrix/neural/model_hash.py
|
|
@@ -160,6 +157,7 @@ src/lib/featrix/neural/prng_control.py
|
|
|
160
157
|
src/lib/featrix/neural/relationship_complexity.py
|
|
161
158
|
src/lib/featrix/neural/relationship_estimator.py
|
|
162
159
|
src/lib/featrix/neural/relationship_extractor.py
|
|
160
|
+
src/lib/featrix/neural/relationship_importance_validator.py
|
|
163
161
|
src/lib/featrix/neural/relationship_performance.py
|
|
164
162
|
src/lib/featrix/neural/relationship_preanalysis.py
|
|
165
163
|
src/lib/featrix/neural/relationship_search.py
|
|
@@ -178,7 +176,6 @@ src/lib/featrix/neural/string_analysis.py
|
|
|
178
176
|
src/lib/featrix/neural/string_cache.py
|
|
179
177
|
src/lib/featrix/neural/string_codec.py
|
|
180
178
|
src/lib/featrix/neural/string_list_codec.py
|
|
181
|
-
src/lib/featrix/neural/test_graph_encoder.py
|
|
182
179
|
src/lib/featrix/neural/timestamp_codec.py
|
|
183
180
|
src/lib/featrix/neural/training_banner.py
|
|
184
181
|
src/lib/featrix/neural/training_context_manager.py
|
|
@@ -213,6 +210,9 @@ src/lib/featrix/neural/qa/test_focal_comparison_enhanced.py
|
|
|
213
210
|
src/lib/featrix/neural/qa/test_focal_loss_single_predictor.py
|
|
214
211
|
src/lib/featrix/neural/qa/test_hybrid_columns.py
|
|
215
212
|
src/lib/featrix/neural/qa/test_label_smoothing.py
|
|
213
|
+
src/lib/featrix/neural/qa/test_lift_measurement_validation.py
|
|
214
|
+
src/lib/featrix/neural/qa/test_lr_timeline_smoothness.py
|
|
215
|
+
src/lib/featrix/neural/qa/test_min_support_rank_scaling.py
|
|
216
216
|
src/lib/featrix/neural/qa/test_monitor_integration.py
|
|
217
217
|
src/lib/featrix/neural/qa/test_piecewise_epochs.py
|
|
218
218
|
src/lib/featrix/neural/qa/test_predict_during_training.py
|
|
@@ -222,9 +222,4 @@ src/lib/featrix/neural/qa/test_set_encoder_strategies.py
|
|
|
222
222
|
src/lib/featrix/neural/qa/test_timeline_quick.py
|
|
223
223
|
src/lib/featrix/neural/qa/test_training_monitor.py
|
|
224
224
|
src/lib/featrix/neural/qa/test_warning_tracking.py
|
|
225
|
-
src/lib/featrix/neural/qa/visualize_training_timeline.py
|
|
226
|
-
tests/test_client_data.py
|
|
227
|
-
tests/test_client_predictions.py
|
|
228
|
-
tests/test_client_sessions.py
|
|
229
|
-
tests/test_client_training.py
|
|
230
|
-
tests/test_local_integration.py
|
|
225
|
+
src/lib/featrix/neural/qa/visualize_training_timeline.py
|