featrixsphere 0.2.6708__tar.gz → 0.2.6710__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.6708 → featrixsphere-0.2.6710}/PKG-INFO +1 -1
- featrixsphere-0.2.6710/VERSION +1 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/featrixsphere/__init__.py +1 -1
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/featrixsphere/api/client.py +28 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/featrixsphere/api/foundational_model.py +110 -24
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/featrixsphere.egg-info/PKG-INFO +1 -1
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/embedded_space.py +120 -2
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/sphere_config.py +28 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/training_history_db.py +49 -26
- featrixsphere-0.2.6708/VERSION +0 -1
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/MANIFEST.in +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/README.md +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/featrix-update.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/featrixsphere/api/__init__.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/featrixsphere/api/api_endpoint.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/featrixsphere/api/http_client.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/featrixsphere/api/notebook_helper.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/featrixsphere/api/prediction_result.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/featrixsphere/api/predictor.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/featrixsphere/api/reference_record.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/featrixsphere/api/vector_database.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/featrixsphere/client.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/featrixsphere.egg-info/SOURCES.txt +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/featrixsphere.egg-info/dependency_links.txt +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/featrixsphere.egg-info/entry_points.txt +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/featrixsphere.egg-info/not-zip-safe +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/featrixsphere.egg-info/requires.txt +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/featrixsphere.egg-info/top_level.txt +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/nv-install.sh +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/requirements.txt +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/setup.cfg +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/setup.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/api.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/auto_upgrade_monitor.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/build_version.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/celery_app.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/cluster_movie_renderer.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/config.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/demo_existing_model.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/demo_label_updates.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/deploy.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/deploy_cache_debug.sh +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/ensure_watchdog_running.sh +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/error_tracker.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/event_log.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/example_api_usage.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/example_prediction_feedback.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/example_train_predictor.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/featrix_watchdog.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/gc_cleanup.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/api_event_retry.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/backing_db.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/celery_job_recovery.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/convergence_monitor.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/crash_tracker.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/distribution_shift_detector.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/embedding_space_io.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/epoch_projections.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/es_projections.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/es_training.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/es_training_wrapper.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/__init__.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/auto_calibrate.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/download-data/build_geo_weather_db.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/download-data/download_geographic_data.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/download-data/download_road_data.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/download-data/download_weather_data.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/download-data/install-data.sh +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/__init__.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/adaptive_event_log.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/auc_animation.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/calibration_utils.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/causal_relationship_scorer.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/charting.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/checkpoint_validation.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/classification_metrics.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/cluster_cohesion_tracker.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/config.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/constants.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/curve_plots_example.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/customer_quality_tracker.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/data_fips.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/data_frame_data_set.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/data_free_email_domains.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/dataloader_utils.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/default_training_rules.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/detect.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/dimension_validator.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/domain_codec.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/dropout_scheduler.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/duration_ops.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/dynamic_relationship_extractor.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/email_codec.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/email_domain_ops.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/embedding_lr_scheduler.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/embedding_quality.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/embedding_space_utils.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/embedding_utils.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/encoders.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/enrich.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/es_projection.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/es_training_callbacks.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/exceptions.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/featrix_csv.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/featrix_json.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/featrix_module_dict.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/featrix_token.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/feature_effectiveness_tracker.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/feature_engineer.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/feature_suggestion_tracker.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/fips_codec.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/foundation_input_data.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/geo_foundation.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/geo_json_codec.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/geo_json_ops.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/geo_ops.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/geo_spread.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/geocode.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/gpu_utils.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/gradient_flow.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/graph_encoder.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/graph_encoder_training.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/guardrails.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/host_memory_tracker.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/hubspot_free_domains_list_may_2025.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/hybrid_column_detector.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/hybrid_encoders.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/hybrid_scalar_set_codec.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/hyperparam_search.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/input_data_file.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/input_data_set.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/integrity.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/io_utils.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/ip_address_ops.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/json_cache.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/json_codec.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/junction_adapter.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/llm/__init__.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/llm/schema_analyzer.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/local_string_cache.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/logging_config.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/loss_framework.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/loss_functions/__init__.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/loss_functions/list_versions.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/loss_functions/loss_functions_01Jan2026.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/loss_functions/loss_functions_01Jul2025.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/loss_functions/loss_functions_21Jan2026.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/loss_short_embedding.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/lr_timeline.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/mask_bias_tracker.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/mask_tracker.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/model_config.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/model_hash.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/movie_frame_task.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/multi_table_dataset.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/multi_table_embedding_space.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/network_viz.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/pair_scorer.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/per_epoch_quality.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/phone_codec.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/platform_utils.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/prng_control.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/demo_advisor_decisions.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/example_complete_workflow.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/generate_focal_report.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/model_advisor.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/show_results.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_adaptive_loss_benchmark.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_adaptive_training.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_all_codecs.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_checkpoint_dict_reconstruction.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_cls_vs_mean_pooling.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_confusion_matrix_metadata.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_data_timestamps.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_embedding_quality.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_embedding_space.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_epoch_class_separation.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_extend_embedding_space.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_feature_engineering_prediction.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_focal_comparison.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_focal_comparison_enhanced.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_focal_loss_single_predictor.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_hybrid_columns.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_label_smoothing.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_lift_measurement_validation.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_lr_timeline_smoothness.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_min_support_rank_scaling.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_monitor_integration.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_multi_dataset.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_phone_zip_geo.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_piecewise_epochs.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_predict_during_training.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_relationship_extractor_integration.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_relationship_extractor_mixed_types.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_set_encoder_strategies.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_temporal_relationships.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_timeline_quick.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_training_data_timeline.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_training_monitor.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/test_warning_tracking.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/qa/visualize_training_timeline.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/relationship_complexity.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/relationship_estimator.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/relationship_extractor.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/relationship_importance_validator.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/relationship_ops_base.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/relationship_performance.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/relationship_preanalysis.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/relationship_search.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/scalar_codec.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/scalar_scalar_ops.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/scalar_timestamp_ops.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/schema_history.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/set_codec.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/set_scalar_ops.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/set_set_ops.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/set_timestamp_ops.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/setlist_codec.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/simple_mlp.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/simple_string_cache.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/single_predictor.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/single_predictor_mlp.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/sphere_init.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/sqlite_utils.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/stopwatch.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/strategy_ops_base.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/strategy_scalar_scalar_ops.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/strategy_set_scalar_ops.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/strategy_string_scalar_ops.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/string_analysis.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/string_cache.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/string_codec.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/string_list_codec.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/string_scalar_ops.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/string_set_ops.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/temporal_relationship_ops.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/tensor_utils.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/timeline_events.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/timestamp_codec.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/tools/__init__.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/tools/compare_clusters.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/training_banner.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/training_context_manager.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/training_data_timeline.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/training_event.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/training_exceptions.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/training_logger.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/training_movie_writer.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/training_rules.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/training_timeline.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/transformer_encoder.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/type_aware_ops_config.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/url_codec.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/url_ops.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/url_parser.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/us_holidays.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/utils.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/vector_codec.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/webhooks.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/weight_timeline.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/world_data.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/xgboost_classifier.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/year_json_codec.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/year_json_ops.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/zip_codec.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix_debug.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/job_manager.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/json_encoder_cache.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/knn_training.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/meta_learning_client.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/model_card_repair.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/model_repair.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/pre_analysis_wrapper.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/queue_manager.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/quick_architecture_search.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/runtime_version_manager.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/session_chains.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/session_manager.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/single_predictor_cv.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/single_predictor_training.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/sp_training_wrapper.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/sphere_config.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/structureddata.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/system_health_monitor.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/training_monitor.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/utils.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/vector_db.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/webhook_helpers.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/weightwatcher_tracking.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/llm_client.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/load_and_test_model.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/manage_churro.sh +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/migrate_string_cache_naming.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/neural.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/node-install.sh +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/prediction_client.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/prediction_drift_monitor.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/prediction_persistence_worker.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/prediction_server.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/query_schema_worker.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/quick_test_deployment.sh +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/recreate_session.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/redis_job_progress.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/redis_prediction_cli.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/redis_prediction_store.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/regenerate_training_movie.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/render_sphere.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/repair_checkpoint.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/repair_model.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/resubmit_es_completion.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/run_api_server.sh +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/send_email.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/slack.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/standalone_prediction.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/start_celery_cpu_worker.sh +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/start_celery_gpu_worker.sh +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/start_celery_movie_worker.sh +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/tail-watch.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/test_api_client.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/tree.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/upgrade-taco-python312.sh +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/utils.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/version.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/system_monitor.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/tests/test_checkpoint_on_taco.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/tests/test_foundation_mode_local.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/tests/test_local_checkpoint.py +0 -0
- {featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/tests/test_runtime_version_manager.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.2.6710
|
|
@@ -342,6 +342,34 @@ class FeatrixSphere(HTTPClientMixin):
|
|
|
342
342
|
ground_truth=ground_truth
|
|
343
343
|
)
|
|
344
344
|
|
|
345
|
+
def list_sessions(
|
|
346
|
+
self,
|
|
347
|
+
name_prefix: str = "",
|
|
348
|
+
) -> List[str]:
|
|
349
|
+
"""
|
|
350
|
+
List sessions matching a name prefix/search term.
|
|
351
|
+
|
|
352
|
+
Searches session directory names on the compute cluster for
|
|
353
|
+
partial matches (not just prefix).
|
|
354
|
+
|
|
355
|
+
Args:
|
|
356
|
+
name_prefix: Term to match in session names
|
|
357
|
+
|
|
358
|
+
Returns:
|
|
359
|
+
List of matching session ID strings
|
|
360
|
+
|
|
361
|
+
Example:
|
|
362
|
+
sessions = featrix.list_sessions(name_prefix="customer")
|
|
363
|
+
for sid in sessions:
|
|
364
|
+
fm = featrix.foundational_model(sid)
|
|
365
|
+
print(f"{sid}: {fm.status}")
|
|
366
|
+
"""
|
|
367
|
+
params = {}
|
|
368
|
+
if name_prefix:
|
|
369
|
+
params['name_prefix'] = name_prefix
|
|
370
|
+
response = self._get_json("/compute/sessions-for-org", params=params)
|
|
371
|
+
return response.get('sessions', [])
|
|
372
|
+
|
|
345
373
|
def health_check(self) -> Dict[str, Any]:
|
|
346
374
|
"""
|
|
347
375
|
Check if the API server is healthy.
|
|
@@ -22,6 +22,21 @@ from .reference_record import ReferenceRecord
|
|
|
22
22
|
logger = logging.getLogger(__name__)
|
|
23
23
|
|
|
24
24
|
|
|
25
|
+
def _parse_datetime(value) -> Optional[datetime]:
|
|
26
|
+
"""Parse a datetime from ISO string or return as-is if already datetime."""
|
|
27
|
+
if value is None:
|
|
28
|
+
return None
|
|
29
|
+
if isinstance(value, datetime):
|
|
30
|
+
return value
|
|
31
|
+
if isinstance(value, str):
|
|
32
|
+
try:
|
|
33
|
+
# Handle ISO format with or without timezone
|
|
34
|
+
return datetime.fromisoformat(value.replace('Z', '+00:00'))
|
|
35
|
+
except (ValueError, AttributeError):
|
|
36
|
+
return None
|
|
37
|
+
return None
|
|
38
|
+
|
|
39
|
+
|
|
25
40
|
@dataclass
|
|
26
41
|
class FoundationalModel:
|
|
27
42
|
"""
|
|
@@ -68,6 +83,11 @@ class FoundationalModel:
|
|
|
68
83
|
epochs: Optional[int] = None
|
|
69
84
|
final_loss: Optional[float] = None
|
|
70
85
|
created_at: Optional[datetime] = None
|
|
86
|
+
updated_at: Optional[datetime] = None
|
|
87
|
+
session_type: Optional[str] = None
|
|
88
|
+
compute_cluster: Optional[str] = None
|
|
89
|
+
error_message: Optional[str] = None
|
|
90
|
+
training_progress: Optional[Dict[str, Any]] = None
|
|
71
91
|
|
|
72
92
|
# Internal
|
|
73
93
|
_ctx: Optional['ClientContext'] = field(default=None, repr=False)
|
|
@@ -88,7 +108,9 @@ class FoundationalModel:
|
|
|
88
108
|
dimensions=response.get('d_model') or response.get('dimensions'),
|
|
89
109
|
epochs=response.get('epochs') or response.get('final_epoch'),
|
|
90
110
|
final_loss=response.get('final_loss'),
|
|
91
|
-
created_at=
|
|
111
|
+
created_at=_parse_datetime(response.get('created_at')),
|
|
112
|
+
session_type=response.get('session_type'),
|
|
113
|
+
compute_cluster=response.get('compute_cluster'),
|
|
92
114
|
_ctx=ctx,
|
|
93
115
|
)
|
|
94
116
|
|
|
@@ -99,19 +121,22 @@ class FoundationalModel:
|
|
|
99
121
|
ctx: 'ClientContext'
|
|
100
122
|
) -> 'FoundationalModel':
|
|
101
123
|
"""Load FoundationalModel from session ID."""
|
|
102
|
-
# Get session info
|
|
103
|
-
|
|
124
|
+
# Get session info - response has {"session": {...}, "jobs": {...}}
|
|
125
|
+
response_data = ctx.get_json(f"/compute/session/{session_id}")
|
|
126
|
+
session = response_data.get('session', response_data)
|
|
104
127
|
|
|
105
128
|
fm = cls(
|
|
106
129
|
id=session_id,
|
|
107
|
-
name=
|
|
108
|
-
status=
|
|
109
|
-
created_at=
|
|
130
|
+
name=session.get('name'),
|
|
131
|
+
status=session.get('status'),
|
|
132
|
+
created_at=_parse_datetime(session.get('created_at')),
|
|
133
|
+
session_type=session.get('session_type'),
|
|
134
|
+
compute_cluster=session.get('compute_cluster'),
|
|
110
135
|
_ctx=ctx,
|
|
111
136
|
)
|
|
112
137
|
|
|
113
|
-
#
|
|
114
|
-
fm._update_from_session(
|
|
138
|
+
# Extract model info, training stats, jobs, error_message
|
|
139
|
+
fm._update_from_session(response_data)
|
|
115
140
|
|
|
116
141
|
return fm
|
|
117
142
|
|
|
@@ -439,10 +464,11 @@ class FoundationalModel:
|
|
|
439
464
|
last_status = None
|
|
440
465
|
|
|
441
466
|
while time.time() - start_time < max_wait_time:
|
|
442
|
-
# Get session status
|
|
443
|
-
|
|
467
|
+
# Get session status - response has {"session": {...}, "jobs": {...}}
|
|
468
|
+
response_data = self._ctx.get_json(f"/compute/session/{self.id}")
|
|
469
|
+
session_data = response_data.get('session', response_data)
|
|
444
470
|
status = session_data.get('status', 'unknown')
|
|
445
|
-
jobs =
|
|
471
|
+
jobs = response_data.get('jobs', {})
|
|
446
472
|
|
|
447
473
|
# Look for ES training job
|
|
448
474
|
es_job = None
|
|
@@ -475,7 +501,7 @@ class FoundationalModel:
|
|
|
475
501
|
# Check completion
|
|
476
502
|
if job_status == 'done' or status == 'done':
|
|
477
503
|
self.status = 'done'
|
|
478
|
-
self._update_from_session(
|
|
504
|
+
self._update_from_session(response_data)
|
|
479
505
|
if show_progress:
|
|
480
506
|
print(f"Training complete!")
|
|
481
507
|
if self.dimensions:
|
|
@@ -627,27 +653,73 @@ class FoundationalModel:
|
|
|
627
653
|
|
|
628
654
|
return predictors
|
|
629
655
|
|
|
630
|
-
def _update_from_session(self,
|
|
631
|
-
"""Update fields from session
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
656
|
+
def _update_from_session(self, response_data: Dict[str, Any]) -> None:
|
|
657
|
+
"""Update fields from session API response.
|
|
658
|
+
|
|
659
|
+
The response from GET /session/{id} has structure:
|
|
660
|
+
{"session": {...}, "jobs": {...}, ...}
|
|
661
|
+
"""
|
|
662
|
+
# Handle both nested and flat response formats
|
|
663
|
+
session = response_data.get('session', response_data)
|
|
664
|
+
jobs = response_data.get('jobs', {})
|
|
665
|
+
|
|
666
|
+
# Core session fields
|
|
667
|
+
if session.get('name') and not self.name:
|
|
668
|
+
self.name = session['name']
|
|
669
|
+
if session.get('status'):
|
|
670
|
+
self.status = session['status']
|
|
671
|
+
if session.get('session_type'):
|
|
672
|
+
self.session_type = session['session_type']
|
|
673
|
+
if session.get('compute_cluster'):
|
|
674
|
+
self.compute_cluster = session['compute_cluster']
|
|
675
|
+
if session.get('created_at') and not self.created_at:
|
|
676
|
+
self.created_at = _parse_datetime(session['created_at'])
|
|
677
|
+
if session.get('finished_at'):
|
|
678
|
+
self.updated_at = _parse_datetime(session['finished_at'])
|
|
679
|
+
elif session.get('started_at'):
|
|
680
|
+
self.updated_at = _parse_datetime(session['started_at'])
|
|
681
|
+
|
|
682
|
+
# Model info from session
|
|
683
|
+
model_info = session.get('model_info', {})
|
|
684
|
+
training_stats = session.get('training_stats', {})
|
|
635
685
|
|
|
636
686
|
self.dimensions = (
|
|
637
687
|
model_info.get('d_model') or
|
|
638
688
|
model_info.get('embedding_dim') or
|
|
639
|
-
|
|
689
|
+
session.get('d_model')
|
|
640
690
|
)
|
|
641
691
|
self.epochs = (
|
|
642
692
|
training_stats.get('final_epoch') or
|
|
643
693
|
training_stats.get('epochs_trained') or
|
|
644
|
-
|
|
694
|
+
session.get('epochs')
|
|
645
695
|
)
|
|
646
696
|
self.final_loss = (
|
|
647
697
|
training_stats.get('final_loss') or
|
|
648
|
-
|
|
698
|
+
session.get('final_loss')
|
|
649
699
|
)
|
|
650
700
|
|
|
701
|
+
# Extract error_message and training_progress from jobs
|
|
702
|
+
for job_id, job in jobs.items():
|
|
703
|
+
job_type = job.get('job_type', '')
|
|
704
|
+
job_status = job.get('status', '')
|
|
705
|
+
|
|
706
|
+
# Training progress from ES training job
|
|
707
|
+
if job_type in ('train_embedding_space', 'train_es', 'training'):
|
|
708
|
+
current_epoch = job.get('current_epoch') or job.get('epoch')
|
|
709
|
+
total_epochs = job.get('total_epochs') or job.get('epochs')
|
|
710
|
+
if current_epoch or total_epochs:
|
|
711
|
+
self.training_progress = {
|
|
712
|
+
'current_epoch': current_epoch,
|
|
713
|
+
'total_epochs': total_epochs,
|
|
714
|
+
'job_status': job_status,
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
# Error message from any failed job
|
|
718
|
+
if job_status in ('failed', 'error'):
|
|
719
|
+
err = job.get('error') or job.get('error_message')
|
|
720
|
+
if err:
|
|
721
|
+
self.error_message = err
|
|
722
|
+
|
|
651
723
|
def _clean_record(self, record: Dict[str, Any]) -> Dict[str, Any]:
|
|
652
724
|
"""Clean a record for API submission."""
|
|
653
725
|
import math
|
|
@@ -684,6 +756,17 @@ class FoundationalModel:
|
|
|
684
756
|
"""Column names in this foundational model's embedding space."""
|
|
685
757
|
return self.get_columns()
|
|
686
758
|
|
|
759
|
+
@property
|
|
760
|
+
def schema_metadata(self) -> Dict[str, Any]:
|
|
761
|
+
"""Get schema metadata including column names and types.
|
|
762
|
+
|
|
763
|
+
Returns:
|
|
764
|
+
Dict with 'column_names', 'column_types', and 'num_columns'
|
|
765
|
+
"""
|
|
766
|
+
if not self._ctx:
|
|
767
|
+
raise ValueError("FoundationalModel not connected to client")
|
|
768
|
+
return self._ctx.get_json(f"/compute/session/{self.id}/columns")
|
|
769
|
+
|
|
687
770
|
def clone(
|
|
688
771
|
self,
|
|
689
772
|
target_compute_cluster: Optional[str] = None,
|
|
@@ -749,7 +832,6 @@ class FoundationalModel:
|
|
|
749
832
|
|
|
750
833
|
data = self._ctx.get_json(f"/compute/session/{self.id}")
|
|
751
834
|
self._update_from_session(data)
|
|
752
|
-
self.status = data.get('status', self.status)
|
|
753
835
|
return data
|
|
754
836
|
|
|
755
837
|
def is_ready(self) -> bool:
|
|
@@ -767,9 +849,8 @@ class FoundationalModel:
|
|
|
767
849
|
raise ValueError("FoundationalModel not connected to client")
|
|
768
850
|
|
|
769
851
|
data = self._ctx.get_json(f"/compute/session/{self.id}")
|
|
770
|
-
|
|
771
|
-
self.status
|
|
772
|
-
return status == 'done'
|
|
852
|
+
self._update_from_session(data)
|
|
853
|
+
return self.status == 'done'
|
|
773
854
|
|
|
774
855
|
def publish(
|
|
775
856
|
self,
|
|
@@ -938,6 +1019,11 @@ class FoundationalModel:
|
|
|
938
1019
|
'epochs': self.epochs,
|
|
939
1020
|
'final_loss': self.final_loss,
|
|
940
1021
|
'created_at': self.created_at.isoformat() if self.created_at else None,
|
|
1022
|
+
'updated_at': self.updated_at.isoformat() if self.updated_at else None,
|
|
1023
|
+
'session_type': self.session_type,
|
|
1024
|
+
'compute_cluster': self.compute_cluster,
|
|
1025
|
+
'error_message': self.error_message,
|
|
1026
|
+
'training_progress': self.training_progress,
|
|
941
1027
|
}
|
|
942
1028
|
|
|
943
1029
|
def __repr__(self) -> str:
|
|
@@ -6615,6 +6615,25 @@ class EmbeddingSpace(object):
|
|
|
6615
6615
|
'pct_rank_top10': float((ranks_arr <= 10).sum() / len(ranks_arr) * 100),
|
|
6616
6616
|
}
|
|
6617
6617
|
|
|
6618
|
+
# Aggregate ranking metrics (AUC, Recall@1, etc.) from batch collapse_diagnostics
|
|
6619
|
+
if batch_loss_dicts:
|
|
6620
|
+
ranking_accum = {}
|
|
6621
|
+
ranking_count = 0
|
|
6622
|
+
for loss_dict in batch_loss_dicts:
|
|
6623
|
+
cd = loss_dict.get('collapse_diagnostics', {})
|
|
6624
|
+
rm = cd.get('ranking_metrics') if isinstance(cd, dict) else None
|
|
6625
|
+
if rm and isinstance(rm, dict):
|
|
6626
|
+
ranking_count += 1
|
|
6627
|
+
for key in ('auc', 'recall_at_1', 'recall_at_5', 'recall_at_10',
|
|
6628
|
+
'positive_rank_mean', 'diagonal_cosine_mean', 'margin_mean'):
|
|
6629
|
+
if rm.get(key) is not None:
|
|
6630
|
+
ranking_accum.setdefault(key, 0.0)
|
|
6631
|
+
ranking_accum[key] += float(rm[key])
|
|
6632
|
+
if ranking_count > 0:
|
|
6633
|
+
components['ranking_metrics'] = {
|
|
6634
|
+
k: v / ranking_count for k, v in ranking_accum.items()
|
|
6635
|
+
}
|
|
6636
|
+
|
|
6618
6637
|
# Return both total loss and components
|
|
6619
6638
|
return combined_loss / n_batches, components
|
|
6620
6639
|
|
|
@@ -7600,6 +7619,7 @@ class EmbeddingSpace(object):
|
|
|
7600
7619
|
"epoch": best_epoch_idx,
|
|
7601
7620
|
"train_loss": best_entry.get('train_loss'),
|
|
7602
7621
|
"val_loss": best_entry.get('val_loss'),
|
|
7622
|
+
"test_loss": best_entry.get('test_loss'),
|
|
7603
7623
|
"spread": best_entry.get('spread'),
|
|
7604
7624
|
"joint": best_entry.get('joint'),
|
|
7605
7625
|
"marginal": best_entry.get('marginal'),
|
|
@@ -7786,9 +7806,36 @@ class EmbeddingSpace(object):
|
|
|
7786
7806
|
"created_at": datetime.now().isoformat(),
|
|
7787
7807
|
"training_duration_minutes": self.training_info.get('duration_minutes', 0),
|
|
7788
7808
|
"version_info": self.version_info or {},
|
|
7809
|
+
},
|
|
7810
|
+
|
|
7811
|
+
"test_set_monitoring": {
|
|
7812
|
+
"description": "Held-out test loss recorded periodically during training (observation only, never used for training decisions)",
|
|
7813
|
+
"entries": [
|
|
7814
|
+
{
|
|
7815
|
+
"epoch": entry["epoch"],
|
|
7816
|
+
"test_loss": entry.get("test_loss"),
|
|
7817
|
+
"test_auc": entry.get("test_auc"),
|
|
7818
|
+
"test_recall_at_1": entry.get("test_recall_at_1"),
|
|
7819
|
+
}
|
|
7820
|
+
for entry in loss_history
|
|
7821
|
+
if entry.get("test_loss") is not None
|
|
7822
|
+
],
|
|
7823
|
+
},
|
|
7824
|
+
|
|
7825
|
+
"ranking_metrics_history": {
|
|
7826
|
+
"description": "Validation AUC and Recall@1 per epoch",
|
|
7827
|
+
"entries": [
|
|
7828
|
+
{
|
|
7829
|
+
"epoch": entry["epoch"],
|
|
7830
|
+
"val_auc": entry.get("val_auc"),
|
|
7831
|
+
"val_recall_at_1": entry.get("val_recall_at_1"),
|
|
7832
|
+
}
|
|
7833
|
+
for entry in loss_history
|
|
7834
|
+
if entry.get("val_auc") is not None
|
|
7835
|
+
],
|
|
7789
7836
|
}
|
|
7790
7837
|
}
|
|
7791
|
-
|
|
7838
|
+
|
|
7792
7839
|
return model_card
|
|
7793
7840
|
|
|
7794
7841
|
def _get_feature_inventory(self):
|
|
@@ -18715,6 +18762,39 @@ class EmbeddingSpace(object):
|
|
|
18715
18762
|
self._current_val_dataloader = val_dataloader
|
|
18716
18763
|
logger.info(f"✅ Validation DataLoader created with num_workers={val_dl_kwargs.get('num_workers', 0)}, persistent_workers={val_dl_kwargs.get('persistent_workers', False)}")
|
|
18717
18764
|
|
|
18765
|
+
# --- Test set monitoring (observability only, never used for training decisions) ---
|
|
18766
|
+
test_dataloader = None
|
|
18767
|
+
_test_monitor_epochs = set()
|
|
18768
|
+
if get_config().get_enable_test_set_monitoring() and hasattr(self, '_timeline') and self._timeline is not None:
|
|
18769
|
+
test_input_data = self._timeline.get_test_set()
|
|
18770
|
+
if test_input_data is not None:
|
|
18771
|
+
test_dataset = SuperSimpleSelfSupervisedDataset(
|
|
18772
|
+
test_input_data.df,
|
|
18773
|
+
codecs=self.col_codecs,
|
|
18774
|
+
row_meta_data=test_input_data.project_row_meta_data_list,
|
|
18775
|
+
casted_df=test_input_data.casted_df,
|
|
18776
|
+
)
|
|
18777
|
+
test_dl_kwargs = create_dataloader_kwargs(
|
|
18778
|
+
batch_size=batch_size,
|
|
18779
|
+
shuffle=False,
|
|
18780
|
+
drop_last=True,
|
|
18781
|
+
num_workers=0,
|
|
18782
|
+
dataset_size=len(test_input_data.df),
|
|
18783
|
+
num_columns=len(test_input_data.df.columns),
|
|
18784
|
+
)
|
|
18785
|
+
test_dataloader = DataLoader(
|
|
18786
|
+
test_dataset,
|
|
18787
|
+
collate_fn=collate_tokens,
|
|
18788
|
+
**test_dl_kwargs
|
|
18789
|
+
)
|
|
18790
|
+
interval_pct = get_config().get_test_set_monitoring_interval_pct()
|
|
18791
|
+
for pct in range(interval_pct, 101, interval_pct):
|
|
18792
|
+
ep = max(0, int(round(n_epochs * pct / 100.0)) - 1)
|
|
18793
|
+
_test_monitor_epochs.add(ep)
|
|
18794
|
+
# Always include final epoch
|
|
18795
|
+
_test_monitor_epochs.add(n_epochs - 1)
|
|
18796
|
+
logger.info(f"🧪 Test set monitoring enabled: {len(test_input_data.df)} rows, eval at epochs {sorted(_test_monitor_epochs)}")
|
|
18797
|
+
|
|
18718
18798
|
batches_per_epoch = len(data_loader)
|
|
18719
18799
|
else:
|
|
18720
18800
|
logger.info("Using batch sampler data loader for multi-dataset training with multiprocess support")
|
|
@@ -21360,10 +21440,48 @@ class EmbeddingSpace(object):
|
|
|
21360
21440
|
loss_entry_with_components["marginal"] = val_components.get('marginal')
|
|
21361
21441
|
loss_entry_with_components["marginal_weighted"] = val_components.get('marginal_weighted')
|
|
21362
21442
|
|
|
21443
|
+
# Record validation ranking metrics (AUC, R@1)
|
|
21444
|
+
if val_components:
|
|
21445
|
+
val_rm = val_components.get('ranking_metrics', {})
|
|
21446
|
+
if val_rm:
|
|
21447
|
+
loss_entry_with_components["val_auc"] = val_rm.get('auc')
|
|
21448
|
+
loss_entry_with_components["val_recall_at_1"] = val_rm.get('recall_at_1')
|
|
21449
|
+
|
|
21450
|
+
# --- Test set monitoring (observation only, never affects training) ---
|
|
21451
|
+
if test_dataloader is not None and epoch_idx in _test_monitor_epochs:
|
|
21452
|
+
logger.info(f" 🧪 Computing test loss for epoch {epoch_idx + 1}/{n_epochs} (observation only)...")
|
|
21453
|
+
test_loss, test_components = self.compute_val_loss(test_dataloader)
|
|
21454
|
+
loss_entry_with_components["test_loss"] = test_loss
|
|
21455
|
+
test_rm = test_components.get('ranking_metrics', {}) if test_components else {}
|
|
21456
|
+
test_auc = test_rm.get('auc')
|
|
21457
|
+
test_r1 = test_rm.get('recall_at_1')
|
|
21458
|
+
loss_entry_with_components["test_auc"] = test_auc
|
|
21459
|
+
loss_entry_with_components["test_recall_at_1"] = test_r1
|
|
21460
|
+
parts = [f" 🧪 Test set epoch {epoch_idx + 1}: loss={test_loss:.6f}"]
|
|
21461
|
+
if test_auc is not None:
|
|
21462
|
+
parts.append(f"AUC={test_auc:.4f}")
|
|
21463
|
+
if test_r1 is not None:
|
|
21464
|
+
parts.append(f"R@1={test_r1:.4f}")
|
|
21465
|
+
parts.append("(observation only)")
|
|
21466
|
+
logger.info(", ".join(parts))
|
|
21467
|
+
# Post to training timeline
|
|
21468
|
+
from featrix.neural.timeline_events import post_timeline_event
|
|
21469
|
+
post_timeline_event({
|
|
21470
|
+
'epoch': epoch_idx,
|
|
21471
|
+
'event_type': 'test_set_monitor',
|
|
21472
|
+
'test_loss': test_loss,
|
|
21473
|
+
'test_auc': test_auc,
|
|
21474
|
+
'test_recall_at_1': test_r1,
|
|
21475
|
+
'test_recall_at_5': test_rm.get('recall_at_5'),
|
|
21476
|
+
'test_recall_at_10': test_rm.get('recall_at_10'),
|
|
21477
|
+
'test_diagonal_cosine_mean': test_rm.get('diagonal_cosine_mean'),
|
|
21478
|
+
'test_positive_rank_mean': test_rm.get('positive_rank_mean'),
|
|
21479
|
+
})
|
|
21480
|
+
|
|
21363
21481
|
# Update the loss_history entry (INSERT OR REPLACE) with components
|
|
21364
21482
|
if hasattr(self, 'history_db') and self.history_db:
|
|
21365
21483
|
self.history_db.push_loss_history(loss_entry_with_components)
|
|
21366
|
-
|
|
21484
|
+
|
|
21367
21485
|
# Check for OOM events after validation
|
|
21368
21486
|
self._check_oom_after_validation()
|
|
21369
21487
|
|
|
@@ -149,6 +149,9 @@ DEFAULT_CONFIG = {
|
|
|
149
149
|
"runtime_cleanup_age_days": 30, # Delete cached versions not used in this many days
|
|
150
150
|
# === XGBOOST RAW FEATURES ===
|
|
151
151
|
"xgb_include_raw_features": False, # When True, XGBoost classifier concatenates raw DataFrame columns with embeddings
|
|
152
|
+
# === TEST SET MONITORING (observability only — never used for training decisions) ===
|
|
153
|
+
"enable_test_set_monitoring": True, # Record test loss periodically during foundation training for post-hoc analysis
|
|
154
|
+
"test_set_monitoring_interval_pct": 10, # Evaluate test set every N% of total epochs (10 = every 10%)
|
|
152
155
|
}
|
|
153
156
|
|
|
154
157
|
|
|
@@ -1604,6 +1607,31 @@ class SphereConfig:
|
|
|
1604
1607
|
return False
|
|
1605
1608
|
return self._config.get("xgb_include_raw_features", DEFAULT_CONFIG.get("xgb_include_raw_features", False))
|
|
1606
1609
|
|
|
1610
|
+
# === TEST SET MONITORING GETTERS ===
|
|
1611
|
+
|
|
1612
|
+
def get_enable_test_set_monitoring(self) -> bool:
|
|
1613
|
+
"""
|
|
1614
|
+
Get whether to periodically evaluate the held-out test set during foundation training.
|
|
1615
|
+
|
|
1616
|
+
Test loss is recorded for post-hoc analysis only. It is NEVER used for early stopping,
|
|
1617
|
+
learning rate scheduling, or any other training decision.
|
|
1618
|
+
|
|
1619
|
+
Only effective during foundation training (simple mode has no separate test set).
|
|
1620
|
+
|
|
1621
|
+
Default: True
|
|
1622
|
+
"""
|
|
1623
|
+
return self._config.get("enable_test_set_monitoring", DEFAULT_CONFIG.get("enable_test_set_monitoring", True))
|
|
1624
|
+
|
|
1625
|
+
def get_test_set_monitoring_interval_pct(self) -> int:
|
|
1626
|
+
"""
|
|
1627
|
+
Get the interval (as percentage of total epochs) at which test set loss is evaluated.
|
|
1628
|
+
|
|
1629
|
+
For example, 10 means evaluate at 10%, 20%, ..., 100% of training.
|
|
1630
|
+
|
|
1631
|
+
Default: 10
|
|
1632
|
+
"""
|
|
1633
|
+
return self._config.get("test_set_monitoring_interval_pct", DEFAULT_CONFIG.get("test_set_monitoring_interval_pct", 10))
|
|
1634
|
+
|
|
1607
1635
|
def log_config(self, prefix: str = ""):
|
|
1608
1636
|
"""
|
|
1609
1637
|
Log all configuration parameters.
|
{featrixsphere-0.2.6708 → featrixsphere-0.2.6710}/src/lib/featrix/neural/training_history_db.py
RENAMED
|
@@ -51,6 +51,7 @@ class TrainingHistoryDB:
|
|
|
51
51
|
current_learning_rate REAL,
|
|
52
52
|
loss REAL,
|
|
53
53
|
validation_loss REAL,
|
|
54
|
+
test_loss REAL,
|
|
54
55
|
time_now REAL,
|
|
55
56
|
duration REAL,
|
|
56
57
|
spread REAL,
|
|
@@ -60,13 +61,18 @@ class TrainingHistoryDB:
|
|
|
60
61
|
diversity REAL,
|
|
61
62
|
reconstruction REAL,
|
|
62
63
|
separation REAL,
|
|
63
|
-
metric REAL
|
|
64
|
+
metric REAL,
|
|
65
|
+
val_auc REAL,
|
|
66
|
+
val_recall_at_1 REAL,
|
|
67
|
+
test_auc REAL,
|
|
68
|
+
test_recall_at_1 REAL
|
|
64
69
|
)
|
|
65
70
|
""")
|
|
66
71
|
cursor.execute("CREATE INDEX IF NOT EXISTS idx_loss_history_epoch ON loss_history(epoch)")
|
|
67
72
|
|
|
68
73
|
# Add new columns for existing databases (backward compatibility)
|
|
69
|
-
for col_name in ['diversity', 'reconstruction', 'separation', 'metric'
|
|
74
|
+
for col_name in ['diversity', 'reconstruction', 'separation', 'metric', 'test_loss',
|
|
75
|
+
'val_auc', 'val_recall_at_1', 'test_auc', 'test_recall_at_1']:
|
|
70
76
|
try:
|
|
71
77
|
cursor.execute(f"ALTER TABLE loss_history ADD COLUMN {col_name} REAL")
|
|
72
78
|
except sqlite3.OperationalError:
|
|
@@ -138,15 +144,16 @@ class TrainingHistoryDB:
|
|
|
138
144
|
cursor = self.conn.cursor()
|
|
139
145
|
cursor.execute("""
|
|
140
146
|
INSERT OR REPLACE INTO loss_history
|
|
141
|
-
(epoch, current_learning_rate, loss, validation_loss, time_now, duration,
|
|
147
|
+
(epoch, current_learning_rate, loss, validation_loss, test_loss, time_now, duration,
|
|
142
148
|
spread, joint, marginal, marginal_weighted, diversity, reconstruction,
|
|
143
|
-
separation, metric)
|
|
144
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
149
|
+
separation, metric, val_auc, val_recall_at_1, test_auc, test_recall_at_1)
|
|
150
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
145
151
|
""", (
|
|
146
152
|
loss_entry.get("epoch"),
|
|
147
153
|
loss_entry.get("current_learning_rate"),
|
|
148
154
|
loss_entry.get("loss"),
|
|
149
155
|
loss_entry.get("validation_loss"),
|
|
156
|
+
loss_entry.get("test_loss"),
|
|
150
157
|
loss_entry.get("time_now"),
|
|
151
158
|
loss_entry.get("duration"),
|
|
152
159
|
loss_entry.get("spread"),
|
|
@@ -156,7 +163,11 @@ class TrainingHistoryDB:
|
|
|
156
163
|
loss_entry.get("diversity"),
|
|
157
164
|
loss_entry.get("reconstruction"),
|
|
158
165
|
loss_entry.get("separation"),
|
|
159
|
-
loss_entry.get("metric")
|
|
166
|
+
loss_entry.get("metric"),
|
|
167
|
+
loss_entry.get("val_auc"),
|
|
168
|
+
loss_entry.get("val_recall_at_1"),
|
|
169
|
+
loss_entry.get("test_auc"),
|
|
170
|
+
loss_entry.get("test_recall_at_1"),
|
|
160
171
|
))
|
|
161
172
|
self.conn.commit()
|
|
162
173
|
|
|
@@ -226,8 +237,9 @@ class TrainingHistoryDB:
|
|
|
226
237
|
num_epochs = self.memory_cache_size
|
|
227
238
|
cursor = self.conn.cursor()
|
|
228
239
|
cursor.execute("""
|
|
229
|
-
SELECT epoch, current_learning_rate, loss, validation_loss, time_now, duration,
|
|
230
|
-
spread, joint, marginal, marginal_weighted, diversity, reconstruction
|
|
240
|
+
SELECT epoch, current_learning_rate, loss, validation_loss, test_loss, time_now, duration,
|
|
241
|
+
spread, joint, marginal, marginal_weighted, diversity, reconstruction,
|
|
242
|
+
val_auc, val_recall_at_1, test_auc, test_recall_at_1
|
|
231
243
|
FROM loss_history
|
|
232
244
|
ORDER BY epoch DESC
|
|
233
245
|
LIMIT ?
|
|
@@ -241,14 +253,19 @@ class TrainingHistoryDB:
|
|
|
241
253
|
"current_learning_rate": row[1],
|
|
242
254
|
"loss": row[2],
|
|
243
255
|
"validation_loss": row[3],
|
|
244
|
-
"
|
|
245
|
-
"
|
|
246
|
-
"
|
|
247
|
-
"
|
|
248
|
-
"
|
|
249
|
-
"
|
|
250
|
-
"
|
|
251
|
-
"
|
|
256
|
+
"test_loss": row[4],
|
|
257
|
+
"time_now": row[5],
|
|
258
|
+
"duration": row[6],
|
|
259
|
+
"spread": row[7],
|
|
260
|
+
"joint": row[8],
|
|
261
|
+
"marginal": row[9],
|
|
262
|
+
"marginal_weighted": row[10],
|
|
263
|
+
"diversity": row[11] if len(row) > 11 else None,
|
|
264
|
+
"reconstruction": row[12] if len(row) > 12 else None,
|
|
265
|
+
"val_auc": row[13] if len(row) > 13 else None,
|
|
266
|
+
"val_recall_at_1": row[14] if len(row) > 14 else None,
|
|
267
|
+
"test_auc": row[15] if len(row) > 15 else None,
|
|
268
|
+
"test_recall_at_1": row[16] if len(row) > 16 else None,
|
|
252
269
|
})
|
|
253
270
|
return result
|
|
254
271
|
|
|
@@ -261,8 +278,9 @@ class TrainingHistoryDB:
|
|
|
261
278
|
|
|
262
279
|
cursor = self.conn.cursor()
|
|
263
280
|
cursor.execute("""
|
|
264
|
-
SELECT epoch, current_learning_rate, loss, validation_loss, time_now, duration,
|
|
265
|
-
spread, joint, marginal, marginal_weighted, diversity, reconstruction
|
|
281
|
+
SELECT epoch, current_learning_rate, loss, validation_loss, test_loss, time_now, duration,
|
|
282
|
+
spread, joint, marginal, marginal_weighted, diversity, reconstruction,
|
|
283
|
+
val_auc, val_recall_at_1, test_auc, test_recall_at_1
|
|
266
284
|
FROM loss_history
|
|
267
285
|
ORDER BY epoch ASC
|
|
268
286
|
""")
|
|
@@ -274,14 +292,19 @@ class TrainingHistoryDB:
|
|
|
274
292
|
"current_learning_rate": row[1],
|
|
275
293
|
"loss": row[2],
|
|
276
294
|
"validation_loss": row[3],
|
|
277
|
-
"
|
|
278
|
-
"
|
|
279
|
-
"
|
|
280
|
-
"
|
|
281
|
-
"
|
|
282
|
-
"
|
|
283
|
-
"
|
|
284
|
-
"
|
|
295
|
+
"test_loss": row[4],
|
|
296
|
+
"time_now": row[5],
|
|
297
|
+
"duration": row[6],
|
|
298
|
+
"spread": row[7],
|
|
299
|
+
"joint": row[8],
|
|
300
|
+
"marginal": row[9],
|
|
301
|
+
"marginal_weighted": row[10],
|
|
302
|
+
"diversity": row[11] if len(row) > 11 else None,
|
|
303
|
+
"reconstruction": row[12] if len(row) > 12 else None,
|
|
304
|
+
"val_auc": row[13] if len(row) > 13 else None,
|
|
305
|
+
"val_recall_at_1": row[14] if len(row) > 14 else None,
|
|
306
|
+
"test_auc": row[15] if len(row) > 15 else None,
|
|
307
|
+
"test_recall_at_1": row[16] if len(row) > 16 else None,
|
|
285
308
|
})
|
|
286
309
|
return result
|
|
287
310
|
|
featrixsphere-0.2.6708/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0.2.6708
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|