orca-sdk 0.0.97__py3-none-any.whl → 0.0.98__py3-none-any.whl
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.
- orca_sdk/__init__.py +1 -0
- orca_sdk/_shared/__init__.py +1 -0
- orca_sdk/_utils/analysis_ui.py +5 -5
- orca_sdk/_utils/auth.py +23 -33
- orca_sdk/_utils/pagination.py +126 -0
- orca_sdk/_utils/pagination_test.py +132 -0
- orca_sdk/classification_model.py +188 -126
- orca_sdk/classification_model_test.py +57 -8
- orca_sdk/client.py +3515 -0
- orca_sdk/conftest.py +10 -0
- orca_sdk/credentials.py +59 -21
- orca_sdk/credentials_test.py +20 -0
- orca_sdk/datasource.py +42 -76
- orca_sdk/embedding_model.py +225 -71
- orca_sdk/embedding_model_test.py +27 -36
- orca_sdk/job.py +49 -45
- orca_sdk/job_test.py +16 -0
- orca_sdk/memoryset.py +340 -353
- orca_sdk/memoryset_test.py +7 -11
- orca_sdk/regression_model.py +120 -111
- orca_sdk/regression_model_test.py +15 -0
- orca_sdk/telemetry.py +162 -139
- {orca_sdk-0.0.97.dist-info → orca_sdk-0.0.98.dist-info}/METADATA +2 -5
- orca_sdk-0.0.98.dist-info/RECORD +40 -0
- orca_sdk/_generated_api_client/__init__.py +0 -3
- orca_sdk/_generated_api_client/api/__init__.py +0 -307
- orca_sdk/_generated_api_client/api/auth/__init__.py +0 -0
- orca_sdk/_generated_api_client/api/auth/check_authentication_auth_get.py +0 -128
- orca_sdk/_generated_api_client/api/auth/create_api_key_auth_api_key_post.py +0 -170
- orca_sdk/_generated_api_client/api/auth/create_org_plan_auth_org_plan_post.py +0 -168
- orca_sdk/_generated_api_client/api/auth/delete_api_key_auth_api_key_name_or_id_delete.py +0 -156
- orca_sdk/_generated_api_client/api/auth/delete_org_auth_org_delete.py +0 -130
- orca_sdk/_generated_api_client/api/auth/get_org_plan_auth_org_plan_get.py +0 -122
- orca_sdk/_generated_api_client/api/auth/list_api_keys_auth_api_key_get.py +0 -127
- orca_sdk/_generated_api_client/api/auth/update_org_plan_auth_org_plan_put.py +0 -168
- orca_sdk/_generated_api_client/api/classification_model/__init__.py +0 -0
- orca_sdk/_generated_api_client/api/classification_model/create_classification_model_classification_model_post.py +0 -170
- orca_sdk/_generated_api_client/api/classification_model/delete_classification_model_classification_model_name_or_id_delete.py +0 -156
- orca_sdk/_generated_api_client/api/classification_model/delete_classification_model_evaluation_classification_model_model_name_or_id_evaluation_task_id_delete.py +0 -168
- orca_sdk/_generated_api_client/api/classification_model/evaluate_classification_model_classification_model_model_name_or_id_evaluation_post.py +0 -183
- orca_sdk/_generated_api_client/api/classification_model/get_classification_model_classification_model_name_or_id_get.py +0 -156
- orca_sdk/_generated_api_client/api/classification_model/get_classification_model_evaluation_classification_model_model_name_or_id_evaluation_task_id_get.py +0 -170
- orca_sdk/_generated_api_client/api/classification_model/list_classification_model_evaluations_classification_model_model_name_or_id_evaluation_get.py +0 -161
- orca_sdk/_generated_api_client/api/classification_model/list_classification_models_classification_model_get.py +0 -127
- orca_sdk/_generated_api_client/api/classification_model/predict_label_gpu_classification_model_name_or_id_prediction_post.py +0 -190
- orca_sdk/_generated_api_client/api/classification_model/update_classification_model_classification_model_name_or_id_patch.py +0 -183
- orca_sdk/_generated_api_client/api/datasource/__init__.py +0 -0
- orca_sdk/_generated_api_client/api/datasource/create_datasource_from_content_datasource_post.py +0 -224
- orca_sdk/_generated_api_client/api/datasource/create_datasource_from_files_datasource_upload_post.py +0 -229
- orca_sdk/_generated_api_client/api/datasource/create_embedding_evaluation_datasource_name_or_id_embedding_evaluation_post.py +0 -183
- orca_sdk/_generated_api_client/api/datasource/delete_datasource_datasource_name_or_id_delete.py +0 -156
- orca_sdk/_generated_api_client/api/datasource/download_datasource_datasource_name_or_id_download_get.py +0 -172
- orca_sdk/_generated_api_client/api/datasource/get_datasource_datasource_name_or_id_get.py +0 -156
- orca_sdk/_generated_api_client/api/datasource/get_embedding_evaluation_datasource_name_or_id_embedding_evaluation_task_id_get.py +0 -169
- orca_sdk/_generated_api_client/api/datasource/list_datasources_datasource_get.py +0 -127
- orca_sdk/_generated_api_client/api/datasource/list_embedding_evaluations_datasource_name_or_id_embedding_evaluation_get.py +0 -235
- orca_sdk/_generated_api_client/api/default/__init__.py +0 -0
- orca_sdk/_generated_api_client/api/default/healthcheck_get.py +0 -118
- orca_sdk/_generated_api_client/api/default/healthcheck_gpu_get.py +0 -118
- orca_sdk/_generated_api_client/api/finetuned_embedding_model/__init__.py +0 -0
- orca_sdk/_generated_api_client/api/finetuned_embedding_model/create_finetuned_embedding_model_finetuned_embedding_model_post.py +0 -168
- orca_sdk/_generated_api_client/api/finetuned_embedding_model/delete_finetuned_embedding_model_finetuned_embedding_model_name_or_id_delete.py +0 -156
- orca_sdk/_generated_api_client/api/finetuned_embedding_model/embed_with_finetuned_model_gpu_finetuned_embedding_model_name_or_id_embedding_post.py +0 -189
- orca_sdk/_generated_api_client/api/finetuned_embedding_model/get_finetuned_embedding_model_finetuned_embedding_model_name_or_id_get.py +0 -156
- orca_sdk/_generated_api_client/api/finetuned_embedding_model/list_finetuned_embedding_models_finetuned_embedding_model_get.py +0 -127
- orca_sdk/_generated_api_client/api/memoryset/__init__.py +0 -0
- orca_sdk/_generated_api_client/api/memoryset/analyze_memoryset_memoryset_name_or_id_analysis_post.py +0 -183
- orca_sdk/_generated_api_client/api/memoryset/batch_delete_memoryset_batch_delete_memoryset_post.py +0 -168
- orca_sdk/_generated_api_client/api/memoryset/clone_memoryset_memoryset_name_or_id_clone_post.py +0 -181
- orca_sdk/_generated_api_client/api/memoryset/create_memoryset_memoryset_post.py +0 -168
- orca_sdk/_generated_api_client/api/memoryset/delete_memories_memoryset_name_or_id_memories_delete_post.py +0 -181
- orca_sdk/_generated_api_client/api/memoryset/delete_memory_memoryset_name_or_id_memory_memory_id_delete.py +0 -167
- orca_sdk/_generated_api_client/api/memoryset/delete_memoryset_memoryset_name_or_id_delete.py +0 -156
- orca_sdk/_generated_api_client/api/memoryset/get_analysis_memoryset_name_or_id_analysis_analysis_task_id_get.py +0 -169
- orca_sdk/_generated_api_client/api/memoryset/get_memories_memoryset_name_or_id_memories_get_post.py +0 -210
- orca_sdk/_generated_api_client/api/memoryset/get_memory_memoryset_name_or_id_memory_memory_id_get.py +0 -186
- orca_sdk/_generated_api_client/api/memoryset/get_memoryset_memoryset_name_or_id_get.py +0 -156
- orca_sdk/_generated_api_client/api/memoryset/insert_memories_gpu_memoryset_name_or_id_memory_post.py +0 -188
- orca_sdk/_generated_api_client/api/memoryset/list_analyses_memoryset_name_or_id_analysis_get.py +0 -235
- orca_sdk/_generated_api_client/api/memoryset/list_memorysets_memoryset_get.py +0 -180
- orca_sdk/_generated_api_client/api/memoryset/memoryset_lookup_gpu_memoryset_name_or_id_lookup_post.py +0 -212
- orca_sdk/_generated_api_client/api/memoryset/potential_duplicate_groups_memoryset_name_or_id_potential_duplicate_groups_get.py +0 -195
- orca_sdk/_generated_api_client/api/memoryset/query_memoryset_memoryset_name_or_id_memories_post.py +0 -210
- orca_sdk/_generated_api_client/api/memoryset/suggest_cascading_edits_memoryset_name_or_id_memory_memory_id_cascading_edits_post.py +0 -233
- orca_sdk/_generated_api_client/api/memoryset/update_memories_gpu_memoryset_name_or_id_memories_patch.py +0 -216
- orca_sdk/_generated_api_client/api/memoryset/update_memory_gpu_memoryset_name_or_id_memory_patch.py +0 -205
- orca_sdk/_generated_api_client/api/memoryset/update_memoryset_memoryset_name_or_id_patch.py +0 -183
- orca_sdk/_generated_api_client/api/predictive_model/__init__.py +0 -0
- orca_sdk/_generated_api_client/api/predictive_model/list_predictive_models_predictive_model_get.py +0 -150
- orca_sdk/_generated_api_client/api/pretrained_embedding_model/__init__.py +0 -0
- orca_sdk/_generated_api_client/api/pretrained_embedding_model/embed_with_pretrained_model_gpu_pretrained_embedding_model_model_name_embedding_post.py +0 -192
- orca_sdk/_generated_api_client/api/pretrained_embedding_model/get_pretrained_embedding_model_pretrained_embedding_model_model_name_get.py +0 -161
- orca_sdk/_generated_api_client/api/pretrained_embedding_model/list_pretrained_embedding_models_pretrained_embedding_model_get.py +0 -127
- orca_sdk/_generated_api_client/api/regression_model/__init__.py +0 -0
- orca_sdk/_generated_api_client/api/regression_model/create_regression_model_regression_model_post.py +0 -170
- orca_sdk/_generated_api_client/api/regression_model/delete_regression_model_evaluation_regression_model_model_name_or_id_evaluation_task_id_delete.py +0 -168
- orca_sdk/_generated_api_client/api/regression_model/delete_regression_model_regression_model_name_or_id_delete.py +0 -154
- orca_sdk/_generated_api_client/api/regression_model/evaluate_regression_model_regression_model_model_name_or_id_evaluation_post.py +0 -183
- orca_sdk/_generated_api_client/api/regression_model/get_regression_model_evaluation_regression_model_model_name_or_id_evaluation_task_id_get.py +0 -170
- orca_sdk/_generated_api_client/api/regression_model/get_regression_model_regression_model_name_or_id_get.py +0 -156
- orca_sdk/_generated_api_client/api/regression_model/list_regression_model_evaluations_regression_model_model_name_or_id_evaluation_get.py +0 -161
- orca_sdk/_generated_api_client/api/regression_model/list_regression_models_regression_model_get.py +0 -127
- orca_sdk/_generated_api_client/api/regression_model/predict_score_gpu_regression_model_name_or_id_prediction_post.py +0 -190
- orca_sdk/_generated_api_client/api/regression_model/update_regression_model_regression_model_name_or_id_patch.py +0 -183
- orca_sdk/_generated_api_client/api/task/__init__.py +0 -0
- orca_sdk/_generated_api_client/api/task/abort_task_task_task_id_abort_delete.py +0 -154
- orca_sdk/_generated_api_client/api/task/get_task_status_task_task_id_status_get.py +0 -156
- orca_sdk/_generated_api_client/api/task/get_task_task_task_id_get.py +0 -156
- orca_sdk/_generated_api_client/api/task/list_tasks_task_get.py +0 -288
- orca_sdk/_generated_api_client/api/telemetry/__init__.py +0 -0
- orca_sdk/_generated_api_client/api/telemetry/count_predictions_telemetry_prediction_count_post.py +0 -168
- orca_sdk/_generated_api_client/api/telemetry/drop_feedback_category_with_data_telemetry_feedback_category_name_or_id_delete.py +0 -162
- orca_sdk/_generated_api_client/api/telemetry/explain_prediction_telemetry_prediction_prediction_id_explanation_get.py +0 -182
- orca_sdk/_generated_api_client/api/telemetry/generate_memory_suggestions_telemetry_prediction_prediction_id_memory_suggestions_post.py +0 -239
- orca_sdk/_generated_api_client/api/telemetry/get_action_recommendation_telemetry_prediction_prediction_id_action_get.py +0 -192
- orca_sdk/_generated_api_client/api/telemetry/get_feedback_category_telemetry_feedback_category_name_or_id_get.py +0 -156
- orca_sdk/_generated_api_client/api/telemetry/get_prediction_telemetry_prediction_prediction_id_get.py +0 -180
- orca_sdk/_generated_api_client/api/telemetry/list_feedback_categories_telemetry_feedback_category_get.py +0 -127
- orca_sdk/_generated_api_client/api/telemetry/list_memories_with_feedback_telemetry_memories_post.py +0 -198
- orca_sdk/_generated_api_client/api/telemetry/list_predictions_telemetry_prediction_post.py +0 -198
- orca_sdk/_generated_api_client/api/telemetry/record_prediction_feedback_telemetry_prediction_feedback_put.py +0 -171
- orca_sdk/_generated_api_client/api/telemetry/update_prediction_telemetry_prediction_prediction_id_patch.py +0 -181
- orca_sdk/_generated_api_client/client.py +0 -216
- orca_sdk/_generated_api_client/errors.py +0 -38
- orca_sdk/_generated_api_client/models/__init__.py +0 -345
- orca_sdk/_generated_api_client/models/action_recommendation.py +0 -82
- orca_sdk/_generated_api_client/models/action_recommendation_action.py +0 -11
- orca_sdk/_generated_api_client/models/add_memory_recommendations.py +0 -85
- orca_sdk/_generated_api_client/models/add_memory_suggestion.py +0 -79
- orca_sdk/_generated_api_client/models/analyze_neighbor_labels_result.py +0 -116
- orca_sdk/_generated_api_client/models/api_key_metadata.py +0 -137
- orca_sdk/_generated_api_client/models/api_key_metadata_scope_item.py +0 -9
- orca_sdk/_generated_api_client/models/base_label_prediction_result.py +0 -130
- orca_sdk/_generated_api_client/models/base_model.py +0 -55
- orca_sdk/_generated_api_client/models/base_score_prediction_result.py +0 -108
- orca_sdk/_generated_api_client/models/body_create_datasource_from_files_datasource_upload_post.py +0 -145
- orca_sdk/_generated_api_client/models/cascade_edit_suggestions_request.py +0 -154
- orca_sdk/_generated_api_client/models/cascading_edit_suggestion.py +0 -92
- orca_sdk/_generated_api_client/models/class_representatives.py +0 -92
- orca_sdk/_generated_api_client/models/classification_evaluation_request.py +0 -148
- orca_sdk/_generated_api_client/models/classification_metrics.py +0 -259
- orca_sdk/_generated_api_client/models/classification_model_metadata.py +0 -227
- orca_sdk/_generated_api_client/models/classification_prediction_request.py +0 -220
- orca_sdk/_generated_api_client/models/clone_memoryset_request.py +0 -210
- orca_sdk/_generated_api_client/models/cluster_metrics.py +0 -78
- orca_sdk/_generated_api_client/models/column_info.py +0 -145
- orca_sdk/_generated_api_client/models/column_type.py +0 -14
- orca_sdk/_generated_api_client/models/constraint_violation_error_response.py +0 -81
- orca_sdk/_generated_api_client/models/constraint_violation_error_response_status_code.py +0 -8
- orca_sdk/_generated_api_client/models/count_predictions_request.py +0 -195
- orca_sdk/_generated_api_client/models/create_api_key_request.py +0 -120
- orca_sdk/_generated_api_client/models/create_api_key_request_scope_item.py +0 -9
- orca_sdk/_generated_api_client/models/create_api_key_response.py +0 -145
- orca_sdk/_generated_api_client/models/create_api_key_response_scope_item.py +0 -9
- orca_sdk/_generated_api_client/models/create_classification_model_request.py +0 -237
- orca_sdk/_generated_api_client/models/create_datasource_from_content_request.py +0 -101
- orca_sdk/_generated_api_client/models/create_memoryset_request.py +0 -365
- orca_sdk/_generated_api_client/models/create_memoryset_request_index_params.py +0 -66
- orca_sdk/_generated_api_client/models/create_memoryset_request_index_type.py +0 -13
- orca_sdk/_generated_api_client/models/create_org_plan_request.py +0 -73
- orca_sdk/_generated_api_client/models/create_org_plan_request_tier.py +0 -11
- orca_sdk/_generated_api_client/models/create_regression_model_request.py +0 -157
- orca_sdk/_generated_api_client/models/datasource_metadata.py +0 -156
- orca_sdk/_generated_api_client/models/delete_memories_request.py +0 -70
- orca_sdk/_generated_api_client/models/delete_memorysets_request.py +0 -70
- orca_sdk/_generated_api_client/models/embed_request.py +0 -155
- orca_sdk/_generated_api_client/models/embedding_evaluation_payload.py +0 -205
- orca_sdk/_generated_api_client/models/embedding_evaluation_request.py +0 -197
- orca_sdk/_generated_api_client/models/embedding_evaluation_response.py +0 -158
- orca_sdk/_generated_api_client/models/embedding_evaluation_result.py +0 -86
- orca_sdk/_generated_api_client/models/embedding_finetuning_method.py +0 -9
- orca_sdk/_generated_api_client/models/embedding_model_result.py +0 -123
- orca_sdk/_generated_api_client/models/evaluation_response.py +0 -153
- orca_sdk/_generated_api_client/models/evaluation_response_classification_metrics.py +0 -140
- orca_sdk/_generated_api_client/models/evaluation_response_regression_metrics.py +0 -140
- orca_sdk/_generated_api_client/models/feedback_metrics.py +0 -85
- orca_sdk/_generated_api_client/models/feedback_type.py +0 -9
- orca_sdk/_generated_api_client/models/filter_item.py +0 -239
- orca_sdk/_generated_api_client/models/filter_item_field_type_0_item.py +0 -17
- orca_sdk/_generated_api_client/models/filter_item_field_type_1_item_type_0.py +0 -8
- orca_sdk/_generated_api_client/models/filter_item_field_type_2_item_type_0.py +0 -8
- orca_sdk/_generated_api_client/models/filter_item_field_type_2_item_type_1.py +0 -22
- orca_sdk/_generated_api_client/models/filter_item_op.py +0 -16
- orca_sdk/_generated_api_client/models/finetune_embedding_model_request.py +0 -259
- orca_sdk/_generated_api_client/models/finetune_embedding_model_request_training_args.py +0 -66
- orca_sdk/_generated_api_client/models/finetuned_embedding_model_metadata.py +0 -166
- orca_sdk/_generated_api_client/models/get_memories_request.py +0 -70
- orca_sdk/_generated_api_client/models/http_validation_error.py +0 -86
- orca_sdk/_generated_api_client/models/internal_server_error_response.py +0 -81
- orca_sdk/_generated_api_client/models/internal_server_error_response_status_code.py +0 -8
- orca_sdk/_generated_api_client/models/label_class_metrics.py +0 -108
- orca_sdk/_generated_api_client/models/label_prediction_memory_lookup.py +0 -210
- orca_sdk/_generated_api_client/models/label_prediction_memory_lookup_metadata.py +0 -68
- orca_sdk/_generated_api_client/models/label_prediction_with_memories_and_feedback.py +0 -288
- orca_sdk/_generated_api_client/models/labeled_memory.py +0 -186
- orca_sdk/_generated_api_client/models/labeled_memory_insert.py +0 -128
- orca_sdk/_generated_api_client/models/labeled_memory_insert_metadata.py +0 -68
- orca_sdk/_generated_api_client/models/labeled_memory_lookup.py +0 -194
- orca_sdk/_generated_api_client/models/labeled_memory_lookup_metadata.py +0 -68
- orca_sdk/_generated_api_client/models/labeled_memory_metadata.py +0 -68
- orca_sdk/_generated_api_client/models/labeled_memory_update.py +0 -171
- orca_sdk/_generated_api_client/models/labeled_memory_update_metadata_type_0.py +0 -68
- orca_sdk/_generated_api_client/models/labeled_memory_with_feedback_metrics.py +0 -207
- orca_sdk/_generated_api_client/models/labeled_memory_with_feedback_metrics_feedback_metrics.py +0 -68
- orca_sdk/_generated_api_client/models/labeled_memory_with_feedback_metrics_metadata.py +0 -68
- orca_sdk/_generated_api_client/models/list_memories_request.py +0 -104
- orca_sdk/_generated_api_client/models/list_predictions_request.py +0 -319
- orca_sdk/_generated_api_client/models/lookup_request.py +0 -101
- orca_sdk/_generated_api_client/models/lookup_score_metrics.py +0 -94
- orca_sdk/_generated_api_client/models/memory_metrics.py +0 -263
- orca_sdk/_generated_api_client/models/memory_type.py +0 -9
- orca_sdk/_generated_api_client/models/memoryset_analysis_configs.py +0 -245
- orca_sdk/_generated_api_client/models/memoryset_analysis_request.py +0 -105
- orca_sdk/_generated_api_client/models/memoryset_analysis_response.py +0 -182
- orca_sdk/_generated_api_client/models/memoryset_class_patterns_analysis_config.py +0 -79
- orca_sdk/_generated_api_client/models/memoryset_class_patterns_metrics.py +0 -138
- orca_sdk/_generated_api_client/models/memoryset_cluster_analysis_config.py +0 -202
- orca_sdk/_generated_api_client/models/memoryset_cluster_analysis_config_clustering_method.py +0 -9
- orca_sdk/_generated_api_client/models/memoryset_cluster_analysis_config_partitioning_method.py +0 -10
- orca_sdk/_generated_api_client/models/memoryset_cluster_metrics.py +0 -100
- orca_sdk/_generated_api_client/models/memoryset_duplicate_analysis_config.py +0 -70
- orca_sdk/_generated_api_client/models/memoryset_duplicate_metrics.py +0 -70
- orca_sdk/_generated_api_client/models/memoryset_label_analysis_config.py +0 -70
- orca_sdk/_generated_api_client/models/memoryset_label_metrics.py +0 -116
- orca_sdk/_generated_api_client/models/memoryset_metadata.py +0 -333
- orca_sdk/_generated_api_client/models/memoryset_metadata_index_params.py +0 -55
- orca_sdk/_generated_api_client/models/memoryset_metadata_index_type.py +0 -13
- orca_sdk/_generated_api_client/models/memoryset_metrics.py +0 -265
- orca_sdk/_generated_api_client/models/memoryset_neighbor_analysis_config.py +0 -83
- orca_sdk/_generated_api_client/models/memoryset_neighbor_metrics.py +0 -76
- orca_sdk/_generated_api_client/models/memoryset_neighbor_metrics_lookup_score_metrics.py +0 -68
- orca_sdk/_generated_api_client/models/memoryset_projection_analysis_config.py +0 -79
- orca_sdk/_generated_api_client/models/memoryset_projection_metrics.py +0 -55
- orca_sdk/_generated_api_client/models/memoryset_update.py +0 -121
- orca_sdk/_generated_api_client/models/not_found_error_response.py +0 -99
- orca_sdk/_generated_api_client/models/not_found_error_response_resource_type_0.py +0 -23
- orca_sdk/_generated_api_client/models/not_found_error_response_status_code.py +0 -8
- orca_sdk/_generated_api_client/models/org_plan.py +0 -99
- orca_sdk/_generated_api_client/models/org_plan_tier.py +0 -11
- orca_sdk/_generated_api_client/models/paginated_task.py +0 -108
- orca_sdk/_generated_api_client/models/paginated_union_labeled_memory_with_feedback_metrics_scored_memory_with_feedback_metrics.py +0 -135
- orca_sdk/_generated_api_client/models/pr_curve.py +0 -86
- orca_sdk/_generated_api_client/models/prediction_feedback.py +0 -157
- orca_sdk/_generated_api_client/models/prediction_feedback_category.py +0 -115
- orca_sdk/_generated_api_client/models/prediction_feedback_request.py +0 -122
- orca_sdk/_generated_api_client/models/prediction_feedback_result.py +0 -102
- orca_sdk/_generated_api_client/models/prediction_sort_item_item_type_0.py +0 -10
- orca_sdk/_generated_api_client/models/prediction_sort_item_item_type_1.py +0 -9
- orca_sdk/_generated_api_client/models/predictive_model_update.py +0 -111
- orca_sdk/_generated_api_client/models/pretrained_embedding_model_metadata.py +0 -115
- orca_sdk/_generated_api_client/models/pretrained_embedding_model_name.py +0 -17
- orca_sdk/_generated_api_client/models/rac_head_type.py +0 -11
- orca_sdk/_generated_api_client/models/rar_head_type.py +0 -8
- orca_sdk/_generated_api_client/models/regression_evaluation_request.py +0 -148
- orca_sdk/_generated_api_client/models/regression_metrics.py +0 -172
- orca_sdk/_generated_api_client/models/regression_model_metadata.py +0 -191
- orca_sdk/_generated_api_client/models/regression_prediction_request.py +0 -195
- orca_sdk/_generated_api_client/models/roc_curve.py +0 -86
- orca_sdk/_generated_api_client/models/score_prediction_memory_lookup.py +0 -196
- orca_sdk/_generated_api_client/models/score_prediction_memory_lookup_metadata.py +0 -68
- orca_sdk/_generated_api_client/models/score_prediction_with_memories_and_feedback.py +0 -252
- orca_sdk/_generated_api_client/models/scored_memory.py +0 -172
- orca_sdk/_generated_api_client/models/scored_memory_insert.py +0 -128
- orca_sdk/_generated_api_client/models/scored_memory_insert_metadata.py +0 -68
- orca_sdk/_generated_api_client/models/scored_memory_lookup.py +0 -180
- orca_sdk/_generated_api_client/models/scored_memory_lookup_metadata.py +0 -68
- orca_sdk/_generated_api_client/models/scored_memory_metadata.py +0 -68
- orca_sdk/_generated_api_client/models/scored_memory_update.py +0 -171
- orca_sdk/_generated_api_client/models/scored_memory_update_metadata_type_0.py +0 -68
- orca_sdk/_generated_api_client/models/scored_memory_with_feedback_metrics.py +0 -193
- orca_sdk/_generated_api_client/models/scored_memory_with_feedback_metrics_feedback_metrics.py +0 -68
- orca_sdk/_generated_api_client/models/scored_memory_with_feedback_metrics_metadata.py +0 -68
- orca_sdk/_generated_api_client/models/service_unavailable_error_response.py +0 -81
- orca_sdk/_generated_api_client/models/service_unavailable_error_response_status_code.py +0 -8
- orca_sdk/_generated_api_client/models/task.py +0 -198
- orca_sdk/_generated_api_client/models/task_status.py +0 -14
- orca_sdk/_generated_api_client/models/task_status_info.py +0 -133
- orca_sdk/_generated_api_client/models/telemetry_field_type_0_item_type_0.py +0 -8
- orca_sdk/_generated_api_client/models/telemetry_field_type_0_item_type_2.py +0 -9
- orca_sdk/_generated_api_client/models/telemetry_field_type_1_item_type_0.py +0 -8
- orca_sdk/_generated_api_client/models/telemetry_field_type_1_item_type_1.py +0 -8
- orca_sdk/_generated_api_client/models/telemetry_filter_item.py +0 -217
- orca_sdk/_generated_api_client/models/telemetry_filter_item_op.py +0 -15
- orca_sdk/_generated_api_client/models/telemetry_memories_request.py +0 -181
- orca_sdk/_generated_api_client/models/telemetry_sort_options.py +0 -185
- orca_sdk/_generated_api_client/models/telemetry_sort_options_direction.py +0 -9
- orca_sdk/_generated_api_client/models/unauthenticated_error_response.py +0 -73
- orca_sdk/_generated_api_client/models/unauthenticated_error_response_status_code.py +0 -8
- orca_sdk/_generated_api_client/models/unauthorized_error_response.py +0 -81
- orca_sdk/_generated_api_client/models/unauthorized_error_response_status_code.py +0 -8
- orca_sdk/_generated_api_client/models/update_org_plan_request.py +0 -73
- orca_sdk/_generated_api_client/models/update_org_plan_request_tier.py +0 -11
- orca_sdk/_generated_api_client/models/update_prediction_request.py +0 -133
- orca_sdk/_generated_api_client/models/validation_error.py +0 -99
- orca_sdk/_generated_api_client/py.typed +0 -1
- orca_sdk/_generated_api_client/types.py +0 -56
- orca_sdk-0.0.97.dist-info/RECORD +0 -309
- {orca_sdk-0.0.97.dist-info → orca_sdk-0.0.98.dist-info}/WHEEL +0 -0
orca_sdk/memoryset.py
CHANGED
|
@@ -8,91 +8,43 @@ from typing import Any, Generic, Iterable, Literal, Self, TypeVar, cast, overloa
|
|
|
8
8
|
|
|
9
9
|
import pandas as pd
|
|
10
10
|
import pyarrow as pa
|
|
11
|
-
from attrs import fields
|
|
12
11
|
from datasets import Dataset
|
|
13
12
|
from torch.utils.data import DataLoader as TorchDataLoader
|
|
14
13
|
from torch.utils.data import Dataset as TorchDataset
|
|
15
14
|
|
|
16
|
-
from .
|
|
17
|
-
|
|
18
|
-
clone_memoryset,
|
|
19
|
-
create_embedding_evaluation,
|
|
20
|
-
create_memoryset,
|
|
21
|
-
delete_memories,
|
|
22
|
-
delete_memoryset,
|
|
23
|
-
get_analysis,
|
|
24
|
-
get_embedding_evaluation,
|
|
25
|
-
get_memories,
|
|
26
|
-
get_memory,
|
|
27
|
-
get_memoryset,
|
|
28
|
-
insert_memories_gpu,
|
|
29
|
-
list_memories_with_feedback,
|
|
30
|
-
list_memorysets,
|
|
31
|
-
memoryset_lookup_gpu,
|
|
32
|
-
potential_duplicate_groups,
|
|
33
|
-
query_memoryset,
|
|
34
|
-
suggest_cascading_edits,
|
|
35
|
-
update_memories_gpu,
|
|
36
|
-
update_memory_gpu,
|
|
37
|
-
update_memoryset,
|
|
38
|
-
)
|
|
39
|
-
from ._generated_api_client.models import (
|
|
40
|
-
CascadeEditSuggestionsRequest,
|
|
15
|
+
from ._utils.common import UNSET, CreateMode, DropMode
|
|
16
|
+
from .client import (
|
|
41
17
|
CascadingEditSuggestion,
|
|
42
18
|
CloneMemorysetRequest,
|
|
43
|
-
ColumnType,
|
|
44
19
|
CreateMemorysetRequest,
|
|
45
|
-
|
|
46
|
-
CreateMemorysetRequestIndexType,
|
|
47
|
-
DeleteMemoriesRequest,
|
|
48
|
-
EmbeddingEvaluationRequest,
|
|
20
|
+
EmbeddingModelResult,
|
|
49
21
|
FilterItem,
|
|
50
|
-
FilterItemOp,
|
|
51
|
-
GetMemoriesRequest,
|
|
52
|
-
)
|
|
53
|
-
from ._generated_api_client.models import LabeledMemory as LabeledMemoryResponse
|
|
54
|
-
from ._generated_api_client.models import (
|
|
55
|
-
LabeledMemoryInsert,
|
|
56
|
-
LabeledMemoryInsertMetadata,
|
|
57
22
|
)
|
|
58
|
-
from .
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
from .
|
|
23
|
+
from .client import LabeledMemory as LabeledMemoryResponse
|
|
24
|
+
from .client import LabeledMemoryInsert
|
|
25
|
+
from .client import LabeledMemoryLookup as LabeledMemoryLookupResponse
|
|
26
|
+
from .client import (
|
|
62
27
|
LabeledMemoryUpdate,
|
|
63
|
-
LabeledMemoryUpdateMetadataType0,
|
|
64
28
|
LabeledMemoryWithFeedbackMetrics,
|
|
65
29
|
LabelPredictionMemoryLookup,
|
|
66
|
-
|
|
67
|
-
LookupRequest,
|
|
30
|
+
MemoryMetrics,
|
|
68
31
|
MemorysetAnalysisConfigs,
|
|
69
|
-
MemorysetAnalysisRequest,
|
|
70
32
|
MemorysetMetadata,
|
|
33
|
+
MemorysetMetrics,
|
|
71
34
|
MemorysetUpdate,
|
|
72
35
|
MemoryType,
|
|
73
|
-
PretrainedEmbeddingModelName,
|
|
74
|
-
)
|
|
75
|
-
from ._generated_api_client.models import ScoredMemory as ScoredMemoryResponse
|
|
76
|
-
from ._generated_api_client.models import (
|
|
77
|
-
ScoredMemoryInsert,
|
|
78
|
-
ScoredMemoryInsertMetadata,
|
|
79
|
-
)
|
|
80
|
-
from ._generated_api_client.models import (
|
|
81
|
-
ScoredMemoryLookup as ScoredMemoryLookupResponse,
|
|
82
36
|
)
|
|
83
|
-
from .
|
|
37
|
+
from .client import ScoredMemory as ScoredMemoryResponse
|
|
38
|
+
from .client import ScoredMemoryInsert
|
|
39
|
+
from .client import ScoredMemoryLookup as ScoredMemoryLookupResponse
|
|
40
|
+
from .client import (
|
|
84
41
|
ScoredMemoryUpdate,
|
|
85
|
-
ScoredMemoryUpdateMetadataType0,
|
|
86
42
|
ScoredMemoryWithFeedbackMetrics,
|
|
87
43
|
ScorePredictionMemoryLookup,
|
|
88
44
|
TelemetryFilterItem,
|
|
89
|
-
TelemetryFilterItemOp,
|
|
90
|
-
TelemetryMemoriesRequest,
|
|
91
45
|
TelemetrySortOptions,
|
|
92
|
-
|
|
46
|
+
orca_api,
|
|
93
47
|
)
|
|
94
|
-
from ._generated_api_client.types import UNSET as CLIENT_UNSET
|
|
95
|
-
from ._utils.common import UNSET, CreateMode, DropMode
|
|
96
48
|
from .datasource import Datasource
|
|
97
49
|
from .embedding_model import (
|
|
98
50
|
FinetunedEmbeddingModel,
|
|
@@ -154,6 +106,10 @@ FORBIDDEN_METADATA_COLUMN_NAMES = {
|
|
|
154
106
|
}
|
|
155
107
|
|
|
156
108
|
|
|
109
|
+
def _is_metric_column(column: str):
|
|
110
|
+
return column in ["feedback_metrics", "lookup"]
|
|
111
|
+
|
|
112
|
+
|
|
157
113
|
def _parse_filter_item_from_tuple(input: FilterItemTuple) -> FilterItem | TelemetryFilterItem:
|
|
158
114
|
field = input[0].split(".")
|
|
159
115
|
if (
|
|
@@ -161,9 +117,11 @@ def _parse_filter_item_from_tuple(input: FilterItemTuple) -> FilterItem | Teleme
|
|
|
161
117
|
and field[0] not in DEFAULT_COLUMN_NAMES | TYPE_SPECIFIC_COLUMN_NAMES | FORBIDDEN_METADATA_COLUMN_NAMES
|
|
162
118
|
):
|
|
163
119
|
field = ["metadata", field[0]]
|
|
164
|
-
op =
|
|
120
|
+
op = input[1]
|
|
165
121
|
value = input[2]
|
|
166
|
-
if
|
|
122
|
+
if isinstance(value, datetime):
|
|
123
|
+
value = value.isoformat()
|
|
124
|
+
if _is_metric_column(field[0]):
|
|
167
125
|
if not (
|
|
168
126
|
(isinstance(value, list) and all(isinstance(v, float) or isinstance(v, int) for v in value))
|
|
169
127
|
or isinstance(value, float)
|
|
@@ -176,9 +134,11 @@ def _parse_filter_item_from_tuple(input: FilterItemTuple) -> FilterItem | Teleme
|
|
|
176
134
|
)
|
|
177
135
|
elif field[0] == "lookup" and (len(field) != 2 or field[1] != "count"):
|
|
178
136
|
raise ValueError("Lookup filters must follow the format `lookup.count`")
|
|
179
|
-
op
|
|
180
|
-
|
|
181
|
-
|
|
137
|
+
if op == "like":
|
|
138
|
+
raise ValueError("Like filters are not supported on metric columns")
|
|
139
|
+
op = cast(Literal["==", "!=", ">", ">=", "<", "<=", "in", "not in"], op)
|
|
140
|
+
value = cast(float | int | list[float] | list[int], value)
|
|
141
|
+
return TelemetryFilterItem(field=field, op=op, value=value)
|
|
182
142
|
|
|
183
143
|
return FilterItem(field=field, op=op, value=value)
|
|
184
144
|
|
|
@@ -204,7 +164,7 @@ def _parse_sort_item_from_tuple(
|
|
|
204
164
|
raise ValueError("Lookup must follow the format `lookup.count`")
|
|
205
165
|
if field[1] != "count":
|
|
206
166
|
raise ValueError("Lookup can only be sorted on count")
|
|
207
|
-
return TelemetrySortOptions(field=field, direction=
|
|
167
|
+
return TelemetrySortOptions(field=field, direction=input[1])
|
|
208
168
|
|
|
209
169
|
|
|
210
170
|
def _parse_memory_insert(memory: dict[str, Any], type: MemoryType) -> LabeledMemoryInsert | ScoredMemoryInsert:
|
|
@@ -215,45 +175,26 @@ def _parse_memory_insert(memory: dict[str, Any], type: MemoryType) -> LabeledMem
|
|
|
215
175
|
if source_id and not isinstance(source_id, str):
|
|
216
176
|
raise ValueError("Memory source_id must be a string")
|
|
217
177
|
match type:
|
|
218
|
-
case
|
|
178
|
+
case "LABELED":
|
|
219
179
|
label = memory.get("label")
|
|
220
180
|
if not isinstance(label, int):
|
|
221
181
|
raise ValueError("Memory label must be an integer")
|
|
222
|
-
metadata =
|
|
223
|
-
{k: v for k, v in memory.items() if k not in DEFAULT_COLUMN_NAMES | {"label"}}
|
|
224
|
-
)
|
|
182
|
+
metadata = {k: v for k, v in memory.items() if k not in DEFAULT_COLUMN_NAMES | {"label"}}
|
|
225
183
|
if any(k in metadata for k in FORBIDDEN_METADATA_COLUMN_NAMES):
|
|
226
184
|
raise ValueError(
|
|
227
185
|
f"The following column names are reserved: {', '.join(FORBIDDEN_METADATA_COLUMN_NAMES)}"
|
|
228
186
|
)
|
|
229
|
-
return
|
|
230
|
-
case
|
|
187
|
+
return {"value": value, "label": label, "source_id": source_id, "metadata": metadata}
|
|
188
|
+
case "SCORED":
|
|
231
189
|
score = memory.get("score")
|
|
232
190
|
if not isinstance(score, (int, float)):
|
|
233
191
|
raise ValueError("Memory score must be a number")
|
|
234
|
-
metadata =
|
|
235
|
-
{k: v for k, v in memory.items() if k not in DEFAULT_COLUMN_NAMES | {"score"}}
|
|
236
|
-
)
|
|
192
|
+
metadata = {k: v for k, v in memory.items() if k not in DEFAULT_COLUMN_NAMES | {"score"}}
|
|
237
193
|
if any(k in metadata for k in FORBIDDEN_METADATA_COLUMN_NAMES):
|
|
238
194
|
raise ValueError(
|
|
239
195
|
f"The following column names are reserved: {', '.join(FORBIDDEN_METADATA_COLUMN_NAMES)}"
|
|
240
196
|
)
|
|
241
|
-
return
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
@overload
|
|
245
|
-
def _parse_memory_update(update: dict[str, Any], type: Literal[MemoryType.LABELED]) -> LabeledMemoryUpdate:
|
|
246
|
-
pass
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
@overload
|
|
250
|
-
def _parse_memory_update(update: dict[str, Any], type: Literal[MemoryType.SCORED]) -> ScoredMemoryUpdate:
|
|
251
|
-
pass
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
@overload
|
|
255
|
-
def _parse_memory_update(update: dict[str, Any], type: MemoryType) -> ScoredMemoryUpdate | LabeledMemoryUpdate:
|
|
256
|
-
pass
|
|
197
|
+
return {"value": value, "score": score, "source_id": source_id, "metadata": metadata}
|
|
257
198
|
|
|
258
199
|
|
|
259
200
|
def _parse_memory_update(update: dict[str, Any], type: MemoryType) -> LabeledMemoryUpdate | ScoredMemoryUpdate:
|
|
@@ -262,41 +203,42 @@ def _parse_memory_update(update: dict[str, Any], type: MemoryType) -> LabeledMem
|
|
|
262
203
|
memory_id = update["memory_id"]
|
|
263
204
|
if not isinstance(memory_id, str):
|
|
264
205
|
raise ValueError("memory_id must be a string")
|
|
265
|
-
|
|
266
|
-
if value
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
206
|
+
payload: LabeledMemoryUpdate | ScoredMemoryUpdate = {"memory_id": memory_id}
|
|
207
|
+
if "value" in update:
|
|
208
|
+
if not isinstance(update["value"], str):
|
|
209
|
+
raise ValueError("value must be a string or unset")
|
|
210
|
+
payload["value"] = update["value"]
|
|
211
|
+
if "source_id" in update:
|
|
212
|
+
if not isinstance(update["source_id"], str):
|
|
213
|
+
raise ValueError("source_id must be a string or unset")
|
|
214
|
+
payload["source_id"] = update["source_id"]
|
|
271
215
|
match type:
|
|
272
|
-
case
|
|
273
|
-
|
|
274
|
-
if label
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
)
|
|
216
|
+
case "LABELED":
|
|
217
|
+
payload = cast(LabeledMemoryUpdate, payload)
|
|
218
|
+
if "label" in update:
|
|
219
|
+
if not isinstance(update["label"], int):
|
|
220
|
+
raise ValueError("label must be an integer or unset")
|
|
221
|
+
payload["label"] = update["label"]
|
|
222
|
+
metadata = {k: v for k, v in update.items() if k not in DEFAULT_COLUMN_NAMES | {"memory_id", "label"}}
|
|
279
223
|
if any(k in metadata for k in FORBIDDEN_METADATA_COLUMN_NAMES):
|
|
280
224
|
raise ValueError(
|
|
281
225
|
f"Cannot update the following metadata keys: {', '.join(FORBIDDEN_METADATA_COLUMN_NAMES)}"
|
|
282
226
|
)
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
)
|
|
227
|
+
payload["metadata"] = metadata
|
|
228
|
+
return payload
|
|
229
|
+
case "SCORED":
|
|
230
|
+
payload = cast(ScoredMemoryUpdate, payload)
|
|
231
|
+
if "score" in update:
|
|
232
|
+
if not isinstance(update["score"], (int, float)):
|
|
233
|
+
raise ValueError("score must be a number or unset")
|
|
234
|
+
payload["score"] = update["score"]
|
|
235
|
+
metadata = {k: v for k, v in update.items() if k not in DEFAULT_COLUMN_NAMES | {"memory_id", "score"}}
|
|
293
236
|
if any(k in metadata for k in FORBIDDEN_METADATA_COLUMN_NAMES):
|
|
294
237
|
raise ValueError(
|
|
295
238
|
f"Cannot update the following metadata keys: {', '.join(FORBIDDEN_METADATA_COLUMN_NAMES)}"
|
|
296
239
|
)
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
)
|
|
240
|
+
payload["metadata"] = metadata
|
|
241
|
+
return cast(ScoredMemoryUpdate, payload)
|
|
300
242
|
|
|
301
243
|
|
|
302
244
|
class _Memory(ABC):
|
|
@@ -306,7 +248,7 @@ class _Memory(ABC):
|
|
|
306
248
|
created_at: datetime
|
|
307
249
|
updated_at: datetime
|
|
308
250
|
metadata: dict[str, str | float | int | bool | None]
|
|
309
|
-
metrics:
|
|
251
|
+
metrics: MemoryMetrics
|
|
310
252
|
memory_id: str
|
|
311
253
|
memory_version: int
|
|
312
254
|
feedback_metrics: dict[str, Any]
|
|
@@ -329,19 +271,17 @@ class _Memory(ABC):
|
|
|
329
271
|
):
|
|
330
272
|
# for internal use only, do not document
|
|
331
273
|
self.memoryset_id = memoryset_id
|
|
332
|
-
self.memory_id = memory
|
|
333
|
-
self.memory_version = memory
|
|
334
|
-
self.value = memory
|
|
335
|
-
self.embedding = memory
|
|
336
|
-
self.source_id = memory
|
|
337
|
-
self.created_at = memory
|
|
338
|
-
self.updated_at = memory
|
|
339
|
-
self.metadata = memory
|
|
340
|
-
self.metrics = memory
|
|
341
|
-
self.feedback_metrics = (
|
|
342
|
-
|
|
343
|
-
)
|
|
344
|
-
self.lookup_count = getattr(memory, "lookup_count", 0)
|
|
274
|
+
self.memory_id = memory["memory_id"]
|
|
275
|
+
self.memory_version = memory["memory_version"]
|
|
276
|
+
self.value = cast(str, memory["value"])
|
|
277
|
+
self.embedding = memory["embedding"]
|
|
278
|
+
self.source_id = memory["source_id"]
|
|
279
|
+
self.created_at = datetime.fromisoformat(memory["created_at"])
|
|
280
|
+
self.updated_at = datetime.fromisoformat(memory["updated_at"])
|
|
281
|
+
self.metadata = memory["metadata"]
|
|
282
|
+
self.metrics = memory["metrics"] if "metrics" in memory else {}
|
|
283
|
+
self.feedback_metrics = memory.get("feedback_metrics", {}) or {}
|
|
284
|
+
self.lookup_count = memory.get("lookup_count", 0)
|
|
345
285
|
|
|
346
286
|
def __getattr__(self, key: str) -> Any:
|
|
347
287
|
if key.startswith("__") or key not in self.metadata:
|
|
@@ -371,9 +311,10 @@ class _Memory(ABC):
|
|
|
371
311
|
Returns:
|
|
372
312
|
The updated memory
|
|
373
313
|
"""
|
|
374
|
-
response =
|
|
375
|
-
|
|
376
|
-
|
|
314
|
+
response = orca_api.PATCH(
|
|
315
|
+
"/gpu/memoryset/{name_or_id}/memory",
|
|
316
|
+
params={"name_or_id": self.memoryset_id},
|
|
317
|
+
json=_parse_memory_update(
|
|
377
318
|
{"memory_id": self.memory_id}
|
|
378
319
|
| ({"value": value} if value is not UNSET else {})
|
|
379
320
|
| ({"source_id": source_id} if source_id is not UNSET else {})
|
|
@@ -384,6 +325,25 @@ class _Memory(ABC):
|
|
|
384
325
|
self.__dict__.update(self.__class__(self.memoryset_id, response).__dict__)
|
|
385
326
|
return self
|
|
386
327
|
|
|
328
|
+
def to_dict(self) -> dict[str, Any]:
|
|
329
|
+
"""
|
|
330
|
+
Convert the memory to a dictionary
|
|
331
|
+
"""
|
|
332
|
+
return {
|
|
333
|
+
"value": self.value,
|
|
334
|
+
"embedding": self.embedding,
|
|
335
|
+
"source_id": self.source_id,
|
|
336
|
+
"created_at": self.created_at,
|
|
337
|
+
"updated_at": self.updated_at,
|
|
338
|
+
"metadata": self.metadata,
|
|
339
|
+
"metrics": self.metrics,
|
|
340
|
+
"memory_id": self.memory_id,
|
|
341
|
+
"memory_version": self.memory_version,
|
|
342
|
+
"feedback_metrics": self.feedback_metrics,
|
|
343
|
+
"lookup_count": self.lookup_count,
|
|
344
|
+
"memory_type": self.memory_type,
|
|
345
|
+
}
|
|
346
|
+
|
|
387
347
|
|
|
388
348
|
class LabeledMemory(_Memory):
|
|
389
349
|
"""
|
|
@@ -412,7 +372,7 @@ class LabeledMemory(_Memory):
|
|
|
412
372
|
|
|
413
373
|
label: int
|
|
414
374
|
label_name: str | None
|
|
415
|
-
memory_type =
|
|
375
|
+
memory_type = "LABELED"
|
|
416
376
|
|
|
417
377
|
def __init__(
|
|
418
378
|
self,
|
|
@@ -426,8 +386,8 @@ class LabeledMemory(_Memory):
|
|
|
426
386
|
):
|
|
427
387
|
# for internal use only, do not document
|
|
428
388
|
super().__init__(memoryset_id, memory)
|
|
429
|
-
self.label = memory
|
|
430
|
-
self.label_name = memory
|
|
389
|
+
self.label = memory["label"]
|
|
390
|
+
self.label_name = memory["label_name"]
|
|
431
391
|
|
|
432
392
|
def __repr__(self) -> str:
|
|
433
393
|
return (
|
|
@@ -467,6 +427,15 @@ class LabeledMemory(_Memory):
|
|
|
467
427
|
super().update(value=value, label=label, source_id=source_id, **metadata)
|
|
468
428
|
return self
|
|
469
429
|
|
|
430
|
+
def to_dict(self) -> dict[str, Any]:
|
|
431
|
+
"""
|
|
432
|
+
Convert the memory to a dictionary
|
|
433
|
+
"""
|
|
434
|
+
super_dict = super().to_dict()
|
|
435
|
+
super_dict["label"] = self.label
|
|
436
|
+
super_dict["label_name"] = self.label_name
|
|
437
|
+
return super_dict
|
|
438
|
+
|
|
470
439
|
|
|
471
440
|
class LabeledMemoryLookup(LabeledMemory):
|
|
472
441
|
"""
|
|
@@ -502,10 +471,8 @@ class LabeledMemoryLookup(LabeledMemory):
|
|
|
502
471
|
def __init__(self, memoryset_id: str, memory_lookup: LabeledMemoryLookupResponse | LabelPredictionMemoryLookup):
|
|
503
472
|
# for internal use only, do not document
|
|
504
473
|
super().__init__(memoryset_id, memory_lookup)
|
|
505
|
-
self.lookup_score = memory_lookup
|
|
506
|
-
self.attention_weight =
|
|
507
|
-
memory_lookup.attention_weight if isinstance(memory_lookup, LabelPredictionMemoryLookup) else None
|
|
508
|
-
)
|
|
474
|
+
self.lookup_score = memory_lookup["lookup_score"]
|
|
475
|
+
self.attention_weight = memory_lookup["attention_weight"] if "attention_weight" in memory_lookup else None
|
|
509
476
|
|
|
510
477
|
def __repr__(self) -> str:
|
|
511
478
|
return (
|
|
@@ -543,7 +510,7 @@ class ScoredMemory(_Memory):
|
|
|
543
510
|
"""
|
|
544
511
|
|
|
545
512
|
score: float
|
|
546
|
-
memory_type =
|
|
513
|
+
memory_type = "SCORED"
|
|
547
514
|
|
|
548
515
|
def __init__(
|
|
549
516
|
self,
|
|
@@ -557,7 +524,7 @@ class ScoredMemory(_Memory):
|
|
|
557
524
|
):
|
|
558
525
|
# for internal use only, do not document
|
|
559
526
|
super().__init__(memoryset_id, memory)
|
|
560
|
-
self.score = memory
|
|
527
|
+
self.score = memory["score"]
|
|
561
528
|
|
|
562
529
|
def __repr__(self) -> str:
|
|
563
530
|
return (
|
|
@@ -597,6 +564,14 @@ class ScoredMemory(_Memory):
|
|
|
597
564
|
super().update(value=value, score=score, source_id=source_id, **metadata)
|
|
598
565
|
return self
|
|
599
566
|
|
|
567
|
+
def to_dict(self) -> dict[str, Any]:
|
|
568
|
+
"""
|
|
569
|
+
Convert the memory to a dictionary
|
|
570
|
+
"""
|
|
571
|
+
super_dict = super().to_dict()
|
|
572
|
+
super_dict["score"] = self.score
|
|
573
|
+
return super_dict
|
|
574
|
+
|
|
600
575
|
|
|
601
576
|
class ScoredMemoryLookup(ScoredMemory):
|
|
602
577
|
"""
|
|
@@ -628,10 +603,8 @@ class ScoredMemoryLookup(ScoredMemory):
|
|
|
628
603
|
def __init__(self, memoryset_id: str, memory_lookup: ScoredMemoryLookupResponse | ScorePredictionMemoryLookup):
|
|
629
604
|
# for internal use only, do not document
|
|
630
605
|
super().__init__(memoryset_id, memory_lookup)
|
|
631
|
-
self.lookup_score = memory_lookup
|
|
632
|
-
self.attention_weight =
|
|
633
|
-
memory_lookup.attention_weight if isinstance(memory_lookup, ScorePredictionMemoryLookup) else None
|
|
634
|
-
)
|
|
606
|
+
self.lookup_score = memory_lookup["lookup_score"]
|
|
607
|
+
self.attention_weight = memory_lookup["attention_weight"] if "attention_weight" in memory_lookup else None
|
|
635
608
|
|
|
636
609
|
def __repr__(self) -> str:
|
|
637
610
|
return (
|
|
@@ -677,23 +650,23 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
677
650
|
|
|
678
651
|
def __init__(self, metadata: MemorysetMetadata):
|
|
679
652
|
# for internal use only, do not document
|
|
680
|
-
if metadata
|
|
681
|
-
self.embedding_model = PretrainedEmbeddingModel._get(metadata
|
|
682
|
-
elif metadata
|
|
683
|
-
self.embedding_model = FinetunedEmbeddingModel.open(metadata
|
|
653
|
+
if metadata["pretrained_embedding_model_name"]:
|
|
654
|
+
self.embedding_model = PretrainedEmbeddingModel._get(metadata["pretrained_embedding_model_name"])
|
|
655
|
+
elif metadata["finetuned_embedding_model_id"]:
|
|
656
|
+
self.embedding_model = FinetunedEmbeddingModel.open(metadata["finetuned_embedding_model_id"])
|
|
684
657
|
else:
|
|
685
658
|
raise ValueError("Either pretrained_embedding_model_name or finetuned_embedding_model_id must be provided")
|
|
686
|
-
self.id = metadata
|
|
687
|
-
self.name = metadata
|
|
688
|
-
self.description = metadata
|
|
689
|
-
self.length = metadata
|
|
690
|
-
self.created_at = metadata
|
|
691
|
-
self.updated_at = metadata
|
|
692
|
-
self.insertion_status = Status(metadata
|
|
659
|
+
self.id = metadata["id"]
|
|
660
|
+
self.name = metadata["name"]
|
|
661
|
+
self.description = metadata["description"]
|
|
662
|
+
self.length = metadata["length"]
|
|
663
|
+
self.created_at = datetime.fromisoformat(metadata["created_at"])
|
|
664
|
+
self.updated_at = datetime.fromisoformat(metadata["updated_at"])
|
|
665
|
+
self.insertion_status = Status(metadata["insertion_status"])
|
|
693
666
|
self._last_refresh = datetime.now()
|
|
694
|
-
self.index_type = metadata
|
|
695
|
-
self.index_params = metadata
|
|
696
|
-
self.memory_type =
|
|
667
|
+
self.index_type = metadata["index_type"]
|
|
668
|
+
self.index_params = metadata["index_params"]
|
|
669
|
+
self.memory_type = metadata["memory_type"]
|
|
697
670
|
|
|
698
671
|
def __eq__(self, other) -> bool:
|
|
699
672
|
return isinstance(other, _Memoryset) and self.id == other.id
|
|
@@ -836,30 +809,30 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
836
809
|
raise ValueError(f"Memoryset with name {name} already exists with a different {attribute}.")
|
|
837
810
|
return existing
|
|
838
811
|
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
)
|
|
861
|
-
)
|
|
862
|
-
job = Job(response
|
|
812
|
+
payload: CreateMemorysetRequest = {
|
|
813
|
+
"name": name,
|
|
814
|
+
"description": description,
|
|
815
|
+
"datasource_name_or_id": datasource.id,
|
|
816
|
+
"datasource_label_column": label_column,
|
|
817
|
+
"datasource_score_column": score_column,
|
|
818
|
+
"datasource_value_column": value_column,
|
|
819
|
+
"datasource_source_id_column": source_id_column,
|
|
820
|
+
"label_names": label_names,
|
|
821
|
+
"max_seq_length_override": max_seq_length_override,
|
|
822
|
+
"remove_duplicates": remove_duplicates,
|
|
823
|
+
"index_type": index_type,
|
|
824
|
+
"index_params": index_params,
|
|
825
|
+
}
|
|
826
|
+
if prompt is not None:
|
|
827
|
+
payload["prompt"] = prompt
|
|
828
|
+
if isinstance(embedding_model, PretrainedEmbeddingModel):
|
|
829
|
+
payload["pretrained_embedding_model_name"] = embedding_model.name
|
|
830
|
+
elif isinstance(embedding_model, FinetunedEmbeddingModel):
|
|
831
|
+
payload["finetuned_embedding_model_name_or_id"] = embedding_model.id
|
|
832
|
+
else:
|
|
833
|
+
raise ValueError("Invalid embedding model")
|
|
834
|
+
response = orca_api.POST("/memoryset", json=payload)
|
|
835
|
+
job = Job(response["insertion_task_id"], lambda: cls.open(response["id"]))
|
|
863
836
|
return job if background else job.result()
|
|
864
837
|
|
|
865
838
|
@overload
|
|
@@ -1280,7 +1253,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1280
1253
|
Raises:
|
|
1281
1254
|
LookupError: If the memoryset does not exist
|
|
1282
1255
|
"""
|
|
1283
|
-
metadata =
|
|
1256
|
+
metadata = orca_api.GET("/memoryset/{name_or_id}", params={"name_or_id": name})
|
|
1284
1257
|
return cls(metadata)
|
|
1285
1258
|
|
|
1286
1259
|
@classmethod
|
|
@@ -1308,7 +1281,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1308
1281
|
Returns:
|
|
1309
1282
|
List of handles to all memorysets in the OrcaCloud
|
|
1310
1283
|
"""
|
|
1311
|
-
return [cls(metadata) for metadata in
|
|
1284
|
+
return [cls(metadata) for metadata in orca_api.GET("/memoryset", params={"type": cls.memory_type})]
|
|
1312
1285
|
|
|
1313
1286
|
@classmethod
|
|
1314
1287
|
def drop(cls, name_or_id: str, if_not_exists: DropMode = "error"):
|
|
@@ -1324,7 +1297,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1324
1297
|
LookupError: If the memoryset does not exist and if_not_exists is `"error"`
|
|
1325
1298
|
"""
|
|
1326
1299
|
try:
|
|
1327
|
-
|
|
1300
|
+
orca_api.DELETE("/memoryset/{name_or_id}", params={"name_or_id": name_or_id})
|
|
1328
1301
|
logging.info(f"Deleted memoryset {name_or_id}")
|
|
1329
1302
|
except LookupError:
|
|
1330
1303
|
if if_not_exists == "error":
|
|
@@ -1342,14 +1315,15 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1342
1315
|
name: Value to set for the name
|
|
1343
1316
|
label_names: Value to replace existing label names with
|
|
1344
1317
|
"""
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1318
|
+
payload: MemorysetUpdate = {}
|
|
1319
|
+
if name is not UNSET:
|
|
1320
|
+
payload["name"] = name
|
|
1321
|
+
if description is not UNSET:
|
|
1322
|
+
payload["description"] = description
|
|
1323
|
+
if label_names is not UNSET:
|
|
1324
|
+
payload["label_names"] = label_names
|
|
1325
|
+
|
|
1326
|
+
orca_api.PATCH("/memoryset/{name_or_id}", params={"name_or_id": self.id}, json=payload)
|
|
1353
1327
|
self.refresh()
|
|
1354
1328
|
|
|
1355
1329
|
@overload
|
|
@@ -1383,7 +1357,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1383
1357
|
name: str,
|
|
1384
1358
|
*,
|
|
1385
1359
|
embedding_model: PretrainedEmbeddingModel | FinetunedEmbeddingModel | None = None,
|
|
1386
|
-
max_seq_length_override: int | None =
|
|
1360
|
+
max_seq_length_override: int | None = UNSET,
|
|
1387
1361
|
prompt: str | None = None,
|
|
1388
1362
|
if_exists: CreateMode = "error",
|
|
1389
1363
|
background: bool = False,
|
|
@@ -1431,24 +1405,20 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1431
1405
|
if locals()[attribute] is not None and locals()[attribute] != getattr(existing, attribute):
|
|
1432
1406
|
raise ValueError(f"Memoryset with name {name} already exists with a different {attribute}.")
|
|
1433
1407
|
return existing
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
max_seq_length_override=max_seq_length_override,
|
|
1446
|
-
prompt=prompt,
|
|
1447
|
-
),
|
|
1448
|
-
)
|
|
1408
|
+
payload: CloneMemorysetRequest = {"name": name}
|
|
1409
|
+
if max_seq_length_override is not UNSET:
|
|
1410
|
+
payload["max_seq_length_override"] = max_seq_length_override
|
|
1411
|
+
if prompt is not None:
|
|
1412
|
+
payload["prompt"] = prompt
|
|
1413
|
+
if isinstance(embedding_model, PretrainedEmbeddingModel):
|
|
1414
|
+
payload["pretrained_embedding_model_name"] = embedding_model.name
|
|
1415
|
+
elif isinstance(embedding_model, FinetunedEmbeddingModel):
|
|
1416
|
+
payload["finetuned_embedding_model_name_or_id"] = embedding_model.id
|
|
1417
|
+
|
|
1418
|
+
metadata = orca_api.POST("/memoryset/{name_or_id}/clone", params={"name_or_id": self.id}, json=payload)
|
|
1449
1419
|
job = Job(
|
|
1450
|
-
metadata
|
|
1451
|
-
lambda: self.open(metadata
|
|
1420
|
+
metadata["insertion_task_id"],
|
|
1421
|
+
lambda: self.open(metadata["id"]),
|
|
1452
1422
|
)
|
|
1453
1423
|
return job if background else job.result()
|
|
1454
1424
|
|
|
@@ -1576,13 +1546,14 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1576
1546
|
],
|
|
1577
1547
|
]
|
|
1578
1548
|
"""
|
|
1579
|
-
response =
|
|
1580
|
-
name_or_id
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1549
|
+
response = orca_api.POST(
|
|
1550
|
+
"/gpu/memoryset/{name_or_id}/lookup",
|
|
1551
|
+
params={"name_or_id": self.id},
|
|
1552
|
+
json={
|
|
1553
|
+
"query": query if isinstance(query, list) else [query],
|
|
1554
|
+
"count": count,
|
|
1555
|
+
"prompt": prompt,
|
|
1556
|
+
},
|
|
1586
1557
|
)
|
|
1587
1558
|
lookups = [
|
|
1588
1559
|
[
|
|
@@ -1590,7 +1561,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1590
1561
|
MemoryLookupT,
|
|
1591
1562
|
(
|
|
1592
1563
|
LabeledMemoryLookup(self.id, lookup_response)
|
|
1593
|
-
if
|
|
1564
|
+
if "label" in lookup_response
|
|
1594
1565
|
else ScoredMemoryLookup(self.id, lookup_response)
|
|
1595
1566
|
),
|
|
1596
1567
|
)
|
|
@@ -1632,50 +1603,70 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1632
1603
|
]
|
|
1633
1604
|
|
|
1634
1605
|
if with_feedback_metrics:
|
|
1606
|
+
response = orca_api.POST(
|
|
1607
|
+
"/telemetry/memories",
|
|
1608
|
+
json={
|
|
1609
|
+
"memoryset_id": self.id,
|
|
1610
|
+
"offset": offset,
|
|
1611
|
+
"limit": limit,
|
|
1612
|
+
"filters": parsed_filters,
|
|
1613
|
+
"sort": [_parse_sort_item_from_tuple(item) for item in sort] if sort else None,
|
|
1614
|
+
},
|
|
1615
|
+
)
|
|
1635
1616
|
return [
|
|
1636
1617
|
cast(
|
|
1637
1618
|
MemoryT,
|
|
1638
|
-
(
|
|
1639
|
-
LabeledMemory(self.id, memory)
|
|
1640
|
-
if isinstance(memory, LabeledMemoryWithFeedbackMetrics)
|
|
1641
|
-
else ScoredMemory(self.id, memory)
|
|
1642
|
-
),
|
|
1619
|
+
(LabeledMemory(self.id, memory) if "label" in memory else ScoredMemory(self.id, memory)),
|
|
1643
1620
|
)
|
|
1644
|
-
for memory in
|
|
1645
|
-
body=TelemetryMemoriesRequest(
|
|
1646
|
-
memoryset_id=self.id,
|
|
1647
|
-
offset=offset,
|
|
1648
|
-
limit=limit,
|
|
1649
|
-
filters=parsed_filters,
|
|
1650
|
-
sort=[_parse_sort_item_from_tuple(item) for item in sort] if sort else None,
|
|
1651
|
-
),
|
|
1652
|
-
).items
|
|
1621
|
+
for memory in response["items"]
|
|
1653
1622
|
]
|
|
1654
1623
|
|
|
1655
|
-
if any(
|
|
1624
|
+
if any(_is_metric_column(filter[0]) for filter in filters):
|
|
1656
1625
|
raise ValueError("Feedback metrics are only supported when the with_feedback_metrics flag is set to True")
|
|
1657
1626
|
|
|
1658
1627
|
if sort:
|
|
1659
1628
|
logging.warning("Sorting is not supported when with_feedback_metrics is False. Sort value will be ignored.")
|
|
1660
1629
|
|
|
1630
|
+
response = orca_api.POST(
|
|
1631
|
+
"/memoryset/{name_or_id}/memories",
|
|
1632
|
+
params={"name_or_id": self.id},
|
|
1633
|
+
json={
|
|
1634
|
+
"offset": offset,
|
|
1635
|
+
"limit": limit,
|
|
1636
|
+
"filters": cast(list[FilterItem], parsed_filters),
|
|
1637
|
+
},
|
|
1638
|
+
)
|
|
1661
1639
|
return [
|
|
1662
1640
|
cast(
|
|
1663
1641
|
MemoryT,
|
|
1664
|
-
(
|
|
1665
|
-
LabeledMemory(self.id, memory)
|
|
1666
|
-
if isinstance(memory, LabeledMemoryResponse)
|
|
1667
|
-
else ScoredMemory(self.id, memory)
|
|
1668
|
-
),
|
|
1642
|
+
(LabeledMemory(self.id, memory) if "label" in memory else ScoredMemory(self.id, memory)),
|
|
1669
1643
|
)
|
|
1670
|
-
for memory in
|
|
1671
|
-
|
|
1672
|
-
|
|
1644
|
+
for memory in response
|
|
1645
|
+
]
|
|
1646
|
+
|
|
1647
|
+
def to_pandas(
|
|
1648
|
+
self,
|
|
1649
|
+
offset: int = 0,
|
|
1650
|
+
limit: int = 100,
|
|
1651
|
+
filters: list[FilterItemTuple] = [],
|
|
1652
|
+
with_feedback_metrics: bool = False,
|
|
1653
|
+
sort: list[TelemetrySortItem] | None = None,
|
|
1654
|
+
) -> pd.DataFrame:
|
|
1655
|
+
"""
|
|
1656
|
+
Convert the memoryset to a pandas DataFrame
|
|
1657
|
+
"""
|
|
1658
|
+
return pd.DataFrame(
|
|
1659
|
+
[
|
|
1660
|
+
memory.to_dict()
|
|
1661
|
+
for memory in self.query(
|
|
1673
1662
|
offset=offset,
|
|
1674
1663
|
limit=limit,
|
|
1675
|
-
filters=
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1664
|
+
filters=filters,
|
|
1665
|
+
with_feedback_metrics=with_feedback_metrics,
|
|
1666
|
+
sort=sort,
|
|
1667
|
+
)
|
|
1668
|
+
]
|
|
1669
|
+
)
|
|
1679
1670
|
|
|
1680
1671
|
def insert(self, items: Iterable[dict[str, Any]] | dict[str, Any]) -> None:
|
|
1681
1672
|
"""
|
|
@@ -1697,16 +1688,15 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1697
1688
|
... {"value": "I am sad", "label": 0, "source_id": "user_124", "tag": "sad"},
|
|
1698
1689
|
... ])
|
|
1699
1690
|
"""
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
)
|
|
1691
|
+
orca_api.POST(
|
|
1692
|
+
"/gpu/memoryset/{name_or_id}/memory",
|
|
1693
|
+
params={"name_or_id": self.id},
|
|
1694
|
+
json=cast(
|
|
1695
|
+
list[LabeledMemoryInsert] | list[ScoredMemoryInsert],
|
|
1696
|
+
[
|
|
1697
|
+
_parse_memory_insert(memory, type=self.memory_type)
|
|
1698
|
+
for memory in (cast(list[dict[str, Any]], [items]) if isinstance(items, dict) else items)
|
|
1699
|
+
],
|
|
1710
1700
|
),
|
|
1711
1701
|
)
|
|
1712
1702
|
self.refresh()
|
|
@@ -1748,25 +1738,23 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1748
1738
|
]
|
|
1749
1739
|
"""
|
|
1750
1740
|
if isinstance(memory_id, str):
|
|
1751
|
-
response =
|
|
1741
|
+
response = orca_api.GET(
|
|
1742
|
+
"/memoryset/{name_or_id}/memory/{memory_id}", params={"name_or_id": self.id, "memory_id": memory_id}
|
|
1743
|
+
)
|
|
1752
1744
|
return cast(
|
|
1753
1745
|
MemoryT,
|
|
1754
|
-
(
|
|
1755
|
-
LabeledMemory(self.id, response)
|
|
1756
|
-
if isinstance(response, LabeledMemoryResponse)
|
|
1757
|
-
else ScoredMemory(self.id, response)
|
|
1758
|
-
),
|
|
1746
|
+
(LabeledMemory(self.id, response) if "label" in response else ScoredMemory(self.id, response)),
|
|
1759
1747
|
)
|
|
1760
1748
|
else:
|
|
1761
|
-
response =
|
|
1749
|
+
response = orca_api.POST(
|
|
1750
|
+
"/memoryset/{name_or_id}/memories/get",
|
|
1751
|
+
params={"name_or_id": self.id},
|
|
1752
|
+
json={"memory_ids": list(memory_id)},
|
|
1753
|
+
)
|
|
1762
1754
|
return [
|
|
1763
1755
|
cast(
|
|
1764
1756
|
MemoryT,
|
|
1765
|
-
(
|
|
1766
|
-
LabeledMemory(self.id, memory)
|
|
1767
|
-
if isinstance(memory, LabeledMemoryResponse)
|
|
1768
|
-
else ScoredMemory(self.id, memory)
|
|
1769
|
-
),
|
|
1757
|
+
(LabeledMemory(self.id, memory) if "label" in memory else ScoredMemory(self.id, memory)),
|
|
1770
1758
|
)
|
|
1771
1759
|
for memory in response
|
|
1772
1760
|
]
|
|
@@ -1811,9 +1799,10 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1811
1799
|
... for m in memoryset.query(filters=[("tag", "==", "happy")])
|
|
1812
1800
|
... )
|
|
1813
1801
|
"""
|
|
1814
|
-
response =
|
|
1815
|
-
|
|
1816
|
-
|
|
1802
|
+
response = orca_api.PATCH(
|
|
1803
|
+
"/gpu/memoryset/{name_or_id}/memories",
|
|
1804
|
+
params={"name_or_id": self.id},
|
|
1805
|
+
json=cast(
|
|
1817
1806
|
list[LabeledMemoryUpdate] | list[ScoredMemoryUpdate],
|
|
1818
1807
|
[
|
|
1819
1808
|
_parse_memory_update(update, type=self.memory_type)
|
|
@@ -1824,11 +1813,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1824
1813
|
updated_memories = [
|
|
1825
1814
|
cast(
|
|
1826
1815
|
MemoryT,
|
|
1827
|
-
(
|
|
1828
|
-
LabeledMemory(self.id, memory)
|
|
1829
|
-
if isinstance(memory, LabeledMemoryResponse)
|
|
1830
|
-
else ScoredMemory(self.id, memory)
|
|
1831
|
-
),
|
|
1816
|
+
(LabeledMemory(self.id, memory) if "label" in memory else ScoredMemory(self.id, memory)),
|
|
1832
1817
|
)
|
|
1833
1818
|
for memory in response
|
|
1834
1819
|
]
|
|
@@ -1874,21 +1859,21 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1874
1859
|
Returns:
|
|
1875
1860
|
A list of CascadingEditSuggestion objects, each containing a neighbor and the suggested new label.
|
|
1876
1861
|
"""
|
|
1877
|
-
|
|
1878
|
-
return
|
|
1879
|
-
name_or_id
|
|
1880
|
-
memory_id
|
|
1881
|
-
|
|
1882
|
-
old_label
|
|
1883
|
-
new_label
|
|
1884
|
-
max_neighbors
|
|
1885
|
-
max_validation_neighbors
|
|
1886
|
-
similarity_threshold
|
|
1887
|
-
only_if_has_old_label
|
|
1888
|
-
exclude_if_new_label
|
|
1889
|
-
suggestion_cooldown_time
|
|
1890
|
-
label_confirmation_cooldown_time
|
|
1891
|
-
|
|
1862
|
+
# TODO: properly integrate this with memory edits and return something that can be applied
|
|
1863
|
+
return orca_api.POST(
|
|
1864
|
+
"/memoryset/{name_or_id}/memory/{memory_id}/cascading_edits",
|
|
1865
|
+
params={"name_or_id": self.id, "memory_id": memory.memory_id},
|
|
1866
|
+
json={
|
|
1867
|
+
"old_label": old_label,
|
|
1868
|
+
"new_label": new_label,
|
|
1869
|
+
"max_neighbors": max_neighbors,
|
|
1870
|
+
"max_validation_neighbors": max_validation_neighbors,
|
|
1871
|
+
"similarity_threshold": similarity_threshold,
|
|
1872
|
+
"only_if_has_old_label": only_if_has_old_label,
|
|
1873
|
+
"exclude_if_new_label": exclude_if_new_label,
|
|
1874
|
+
"suggestion_cooldown_time": suggestion_cooldown_time,
|
|
1875
|
+
"label_confirmation_cooldown_time": label_confirmation_cooldown_time,
|
|
1876
|
+
},
|
|
1892
1877
|
)
|
|
1893
1878
|
|
|
1894
1879
|
def delete(self, memory_id: str | Iterable[str]) -> None:
|
|
@@ -1910,37 +1895,39 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1910
1895
|
|
|
1911
1896
|
"""
|
|
1912
1897
|
memory_ids = [memory_id] if isinstance(memory_id, str) else list(memory_id)
|
|
1913
|
-
|
|
1898
|
+
orca_api.POST(
|
|
1899
|
+
"/memoryset/{name_or_id}/memories/delete", params={"name_or_id": self.id}, json={"memory_ids": memory_ids}
|
|
1900
|
+
)
|
|
1914
1901
|
logging.info(f"Deleted {len(memory_ids)} memories from memoryset.")
|
|
1915
1902
|
self.refresh()
|
|
1916
1903
|
|
|
1917
1904
|
@overload
|
|
1918
1905
|
def analyze(
|
|
1919
1906
|
self,
|
|
1920
|
-
*analyses:
|
|
1907
|
+
*analyses: dict[str, Any] | str,
|
|
1921
1908
|
lookup_count: int = 15,
|
|
1922
1909
|
clear_metrics: bool = False,
|
|
1923
1910
|
background: Literal[True],
|
|
1924
|
-
) -> Job[
|
|
1911
|
+
) -> Job[MemorysetMetrics]:
|
|
1925
1912
|
pass
|
|
1926
1913
|
|
|
1927
1914
|
@overload
|
|
1928
1915
|
def analyze(
|
|
1929
1916
|
self,
|
|
1930
|
-
*analyses:
|
|
1917
|
+
*analyses: dict[str, Any] | str,
|
|
1931
1918
|
lookup_count: int = 15,
|
|
1932
1919
|
clear_metrics: bool = False,
|
|
1933
1920
|
background: Literal[False] = False,
|
|
1934
|
-
) ->
|
|
1921
|
+
) -> MemorysetMetrics:
|
|
1935
1922
|
pass
|
|
1936
1923
|
|
|
1937
1924
|
def analyze(
|
|
1938
1925
|
self,
|
|
1939
|
-
*analyses:
|
|
1926
|
+
*analyses: dict[str, Any] | str,
|
|
1940
1927
|
lookup_count: int = 15,
|
|
1941
1928
|
clear_metrics: bool = False,
|
|
1942
1929
|
background: bool = False,
|
|
1943
|
-
) -> Job[
|
|
1930
|
+
) -> Job[MemorysetMetrics] | MemorysetMetrics:
|
|
1944
1931
|
"""
|
|
1945
1932
|
Run analyses on the memoryset to find duplicates, clusters, mislabelings, and more
|
|
1946
1933
|
|
|
@@ -2003,11 +1990,9 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
2003
1990
|
"""
|
|
2004
1991
|
|
|
2005
1992
|
# Get valid analysis names from MemorysetAnalysisConfigs
|
|
2006
|
-
valid_analysis_names =
|
|
2007
|
-
field.name for field in fields(MemorysetAnalysisConfigs) if field.name != "additional_properties"
|
|
2008
|
-
}
|
|
1993
|
+
valid_analysis_names = set(MemorysetAnalysisConfigs.__annotations__)
|
|
2009
1994
|
|
|
2010
|
-
configs:
|
|
1995
|
+
configs: MemorysetAnalysisConfigs = {}
|
|
2011
1996
|
for analysis in analyses:
|
|
2012
1997
|
if isinstance(analysis, str):
|
|
2013
1998
|
error_msg = (
|
|
@@ -2017,30 +2002,37 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
2017
2002
|
raise ValueError(error_msg)
|
|
2018
2003
|
configs[analysis] = {}
|
|
2019
2004
|
else:
|
|
2020
|
-
name = analysis.pop("name")
|
|
2005
|
+
name = analysis.pop("name")
|
|
2021
2006
|
error_msg = f"Invalid analysis name: {name}. Valid names are: {', '.join(sorted(valid_analysis_names))}"
|
|
2022
2007
|
if name not in valid_analysis_names:
|
|
2023
2008
|
raise ValueError(error_msg)
|
|
2024
|
-
configs[name] = analysis
|
|
2025
|
-
|
|
2026
|
-
analysis =
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2009
|
+
configs[name] = analysis
|
|
2010
|
+
|
|
2011
|
+
analysis = orca_api.POST(
|
|
2012
|
+
"/memoryset/{name_or_id}/analysis",
|
|
2013
|
+
params={"name_or_id": self.id},
|
|
2014
|
+
json={
|
|
2015
|
+
"configs": configs,
|
|
2016
|
+
"lookup_count": lookup_count,
|
|
2017
|
+
"clear_metrics": clear_metrics,
|
|
2018
|
+
},
|
|
2033
2019
|
)
|
|
2034
2020
|
job = Job(
|
|
2035
|
-
analysis
|
|
2036
|
-
lambda:
|
|
2021
|
+
analysis["task_id"],
|
|
2022
|
+
lambda: orca_api.GET(
|
|
2023
|
+
"/memoryset/{name_or_id}/analysis/{analysis_task_id}",
|
|
2024
|
+
params={"name_or_id": self.id, "analysis_task_id": analysis["task_id"]},
|
|
2025
|
+
)["results"],
|
|
2037
2026
|
)
|
|
2038
2027
|
return job if background else job.result()
|
|
2039
2028
|
|
|
2040
|
-
def get_potential_duplicate_groups(self):
|
|
2029
|
+
def get_potential_duplicate_groups(self) -> list[list[MemoryT]]:
|
|
2041
2030
|
"""Group potential duplicates in the memoryset"""
|
|
2042
|
-
response = potential_duplicate_groups
|
|
2043
|
-
return
|
|
2031
|
+
response = orca_api.GET("/memoryset/{name_or_id}/potential_duplicate_groups", params={"name_or_id": self.id})
|
|
2032
|
+
return [
|
|
2033
|
+
[cast(MemoryT, LabeledMemory(self.id, m) if "label" in m else ScoredMemory(self.id, m)) for m in ms]
|
|
2034
|
+
for ms in response
|
|
2035
|
+
]
|
|
2044
2036
|
|
|
2045
2037
|
@overload
|
|
2046
2038
|
@staticmethod
|
|
@@ -2053,7 +2045,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
2053
2045
|
neighbor_count: int = 5,
|
|
2054
2046
|
embedding_models: list[str] | None = None,
|
|
2055
2047
|
background: Literal[True],
|
|
2056
|
-
) -> Job[
|
|
2048
|
+
) -> Job[list[EmbeddingModelResult]]:
|
|
2057
2049
|
pass
|
|
2058
2050
|
|
|
2059
2051
|
@overload
|
|
@@ -2067,7 +2059,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
2067
2059
|
neighbor_count: int = 5,
|
|
2068
2060
|
embedding_models: list[str] | None = None,
|
|
2069
2061
|
background: Literal[False] = False,
|
|
2070
|
-
) ->
|
|
2062
|
+
) -> list[EmbeddingModelResult]:
|
|
2071
2063
|
pass
|
|
2072
2064
|
|
|
2073
2065
|
@staticmethod
|
|
@@ -2080,7 +2072,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
2080
2072
|
neighbor_count: int = 5,
|
|
2081
2073
|
embedding_models: list[str] | None = None,
|
|
2082
2074
|
background: bool = False,
|
|
2083
|
-
) -> Job[
|
|
2075
|
+
) -> Job[list[EmbeddingModelResult]] | list[EmbeddingModelResult]:
|
|
2084
2076
|
"""
|
|
2085
2077
|
Test the quality of embeddings for the datasource by computing metrics such as prediction accuracy.
|
|
2086
2078
|
|
|
@@ -2099,26 +2091,27 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
2099
2091
|
A dictionary containing the results of the embedding evaluation
|
|
2100
2092
|
"""
|
|
2101
2093
|
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
source_id_column=source_id_column,
|
|
2113
|
-
neighbor_count=neighbor_count,
|
|
2114
|
-
embedding_models=embedding_model_enums,
|
|
2094
|
+
response = orca_api.POST(
|
|
2095
|
+
"/datasource/{name_or_id}/embedding_evaluation",
|
|
2096
|
+
params={"name_or_id": datasource.id},
|
|
2097
|
+
json={
|
|
2098
|
+
"value_column": value_column,
|
|
2099
|
+
"label_column": label_column,
|
|
2100
|
+
"source_id_column": source_id_column,
|
|
2101
|
+
"neighbor_count": neighbor_count,
|
|
2102
|
+
"embedding_models": embedding_models,
|
|
2103
|
+
},
|
|
2115
2104
|
)
|
|
2116
2105
|
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2106
|
+
def get_value() -> list[EmbeddingModelResult]:
|
|
2107
|
+
res = orca_api.GET(
|
|
2108
|
+
"/datasource/{name_or_id}/embedding_evaluation/{task_id}",
|
|
2109
|
+
params={"name_or_id": datasource.id, "task_id": response["task_id"]},
|
|
2110
|
+
)
|
|
2111
|
+
assert res["result"] is not None
|
|
2112
|
+
return res["result"]["evaluation_results"]
|
|
2113
|
+
|
|
2114
|
+
job = Job(response["task_id"], get_value)
|
|
2122
2115
|
return job if background else job.result()
|
|
2123
2116
|
|
|
2124
2117
|
|
|
@@ -2138,12 +2131,12 @@ class LabeledMemoryset(_Memoryset[LabeledMemory, LabeledMemoryLookup]):
|
|
|
2138
2131
|
"""
|
|
2139
2132
|
|
|
2140
2133
|
label_names: list[str]
|
|
2141
|
-
memory_type: MemoryType =
|
|
2134
|
+
memory_type: MemoryType = "LABELED"
|
|
2142
2135
|
|
|
2143
2136
|
def __init__(self, metadata: MemorysetMetadata):
|
|
2144
2137
|
super().__init__(metadata)
|
|
2145
|
-
assert metadata
|
|
2146
|
-
self.label_names = metadata
|
|
2138
|
+
assert metadata["label_names"] is not None
|
|
2139
|
+
self.label_names = metadata["label_names"]
|
|
2147
2140
|
|
|
2148
2141
|
def __eq__(self, other) -> bool:
|
|
2149
2142
|
return isinstance(other, LabeledMemoryset) and self.id == other.id
|
|
@@ -2152,12 +2145,6 @@ class LabeledMemoryset(_Memoryset[LabeledMemory, LabeledMemoryLookup]):
|
|
|
2152
2145
|
def create(cls, name: str, datasource: Datasource, *, label_column: str | None = "label", **kwargs):
|
|
2153
2146
|
return super().create(name, datasource, label_column=label_column, score_column=None, **kwargs)
|
|
2154
2147
|
|
|
2155
|
-
def display_label_analysis(self):
|
|
2156
|
-
"""Display a UI to review and act upon the label analysis results"""
|
|
2157
|
-
from ._utils.analysis_ui import display_suggested_memory_relabels
|
|
2158
|
-
|
|
2159
|
-
display_suggested_memory_relabels(self)
|
|
2160
|
-
|
|
2161
2148
|
|
|
2162
2149
|
class ScoredMemoryset(_Memoryset[ScoredMemory, ScoredMemoryLookup]):
|
|
2163
2150
|
"""
|
|
@@ -2173,7 +2160,7 @@ class ScoredMemoryset(_Memoryset[ScoredMemory, ScoredMemoryLookup]):
|
|
|
2173
2160
|
updated_at: When the memoryset was last updated, automatically updated on updates
|
|
2174
2161
|
"""
|
|
2175
2162
|
|
|
2176
|
-
memory_type: MemoryType =
|
|
2163
|
+
memory_type: MemoryType = "SCORED"
|
|
2177
2164
|
|
|
2178
2165
|
def __eq__(self, other) -> bool:
|
|
2179
2166
|
return isinstance(other, ScoredMemoryset) and self.id == other.id
|