orca-sdk 0.0.96__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 +2 -5
- orca_sdk/_shared/__init__.py +1 -0
- orca_sdk/_shared/metrics.py +1 -1
- 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 +102 -0
- orca_sdk/client.py +3515 -0
- orca_sdk/conftest.py +10 -0
- orca_sdk/credentials.py +73 -21
- orca_sdk/credentials_test.py +20 -0
- orca_sdk/datasource.py +186 -81
- orca_sdk/datasource_test.py +194 -0
- orca_sdk/embedding_model.py +267 -75
- orca_sdk/embedding_model_test.py +32 -14
- orca_sdk/job.py +59 -54
- orca_sdk/job_test.py +50 -0
- orca_sdk/memoryset.py +372 -345
- 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 +229 -115
- {orca_sdk-0.0.96.dist-info → orca_sdk-0.0.98.dist-info}/METADATA +19 -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 -287
- 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/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/list_api_keys_auth_api_key_get.py +0 -127
- orca_sdk/_generated_api_client/api/classification_model/__init__.py +0 -0
- orca_sdk/_generated_api_client/api/classification_model/create_classification_model_gpu_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_datasource_post.py +0 -167
- 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_gpu_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 -293
- 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/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 -295
- 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_datasource_post.py +0 -207
- 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/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 -213
- orca_sdk/_generated_api_client/models/classification_prediction_request.py +0 -220
- orca_sdk/_generated_api_client/models/clone_memoryset_request.py +0 -170
- 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 -80
- 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 -197
- orca_sdk/_generated_api_client/models/create_memoryset_request.py +0 -325
- 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_regression_model_request.py +0 -137
- 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 -135
- orca_sdk/_generated_api_client/models/embedding_evaluation_payload.py +0 -187
- orca_sdk/_generated_api_client/models/embedding_evaluation_request.py +0 -179
- 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 -114
- 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 -231
- 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_2_item_type_1.py +0 -20
- 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 -80
- 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_metrics.py +0 -246
- 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 -81
- orca_sdk/_generated_api_client/models/lookup_score_metrics.py +0 -94
- orca_sdk/_generated_api_client/models/memory_metrics.py +0 -165
- orca_sdk/_generated_api_client/models/memory_type.py +0 -9
- orca_sdk/_generated_api_client/models/memoryset_analysis_configs.py +0 -212
- 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_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 -291
- 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 -232
- 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 -101
- orca_sdk/_generated_api_client/models/not_found_error_response.py +0 -100
- orca_sdk/_generated_api_client/models/not_found_error_response_resource_type_0.py +0 -22
- 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 -91
- orca_sdk/_generated_api_client/models/pretrained_embedding_model_metadata.py +0 -107
- 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 -177
- 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 -80
- 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_2.py +0 -9
- orca_sdk/_generated_api_client/models/telemetry_filter_item.py +0 -205
- 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 -173
- orca_sdk/_generated_api_client/models/telemetry_sort_options_direction.py +0 -9
- orca_sdk/_generated_api_client/models/unauthenticated_error_response.py +0 -72
- orca_sdk/_generated_api_client/models/unauthorized_error_response.py +0 -80
- 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.96.dist-info/RECORD +0 -278
- {orca_sdk-0.0.96.dist-info → orca_sdk-0.0.98.dist-info}/WHEEL +0 -0
orca_sdk/memoryset.py
CHANGED
|
@@ -8,88 +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 ScoredMemoryInsert, ScoredMemoryInsertMetadata
|
|
77
|
-
from ._generated_api_client.models import (
|
|
78
|
-
ScoredMemoryLookup as ScoredMemoryLookupResponse,
|
|
79
36
|
)
|
|
80
|
-
from .
|
|
37
|
+
from .client import ScoredMemory as ScoredMemoryResponse
|
|
38
|
+
from .client import ScoredMemoryInsert
|
|
39
|
+
from .client import ScoredMemoryLookup as ScoredMemoryLookupResponse
|
|
40
|
+
from .client import (
|
|
81
41
|
ScoredMemoryUpdate,
|
|
82
|
-
ScoredMemoryUpdateMetadataType0,
|
|
83
42
|
ScoredMemoryWithFeedbackMetrics,
|
|
84
43
|
ScorePredictionMemoryLookup,
|
|
85
44
|
TelemetryFilterItem,
|
|
86
|
-
TelemetryFilterItemOp,
|
|
87
|
-
TelemetryMemoriesRequest,
|
|
88
45
|
TelemetrySortOptions,
|
|
89
|
-
|
|
46
|
+
orca_api,
|
|
90
47
|
)
|
|
91
|
-
from ._generated_api_client.types import UNSET as CLIENT_UNSET
|
|
92
|
-
from ._utils.common import UNSET, CreateMode, DropMode
|
|
93
48
|
from .datasource import Datasource
|
|
94
49
|
from .embedding_model import (
|
|
95
50
|
FinetunedEmbeddingModel,
|
|
@@ -151,6 +106,10 @@ FORBIDDEN_METADATA_COLUMN_NAMES = {
|
|
|
151
106
|
}
|
|
152
107
|
|
|
153
108
|
|
|
109
|
+
def _is_metric_column(column: str):
|
|
110
|
+
return column in ["feedback_metrics", "lookup"]
|
|
111
|
+
|
|
112
|
+
|
|
154
113
|
def _parse_filter_item_from_tuple(input: FilterItemTuple) -> FilterItem | TelemetryFilterItem:
|
|
155
114
|
field = input[0].split(".")
|
|
156
115
|
if (
|
|
@@ -158,9 +117,11 @@ def _parse_filter_item_from_tuple(input: FilterItemTuple) -> FilterItem | Teleme
|
|
|
158
117
|
and field[0] not in DEFAULT_COLUMN_NAMES | TYPE_SPECIFIC_COLUMN_NAMES | FORBIDDEN_METADATA_COLUMN_NAMES
|
|
159
118
|
):
|
|
160
119
|
field = ["metadata", field[0]]
|
|
161
|
-
op =
|
|
120
|
+
op = input[1]
|
|
162
121
|
value = input[2]
|
|
163
|
-
if
|
|
122
|
+
if isinstance(value, datetime):
|
|
123
|
+
value = value.isoformat()
|
|
124
|
+
if _is_metric_column(field[0]):
|
|
164
125
|
if not (
|
|
165
126
|
(isinstance(value, list) and all(isinstance(v, float) or isinstance(v, int) for v in value))
|
|
166
127
|
or isinstance(value, float)
|
|
@@ -173,9 +134,11 @@ def _parse_filter_item_from_tuple(input: FilterItemTuple) -> FilterItem | Teleme
|
|
|
173
134
|
)
|
|
174
135
|
elif field[0] == "lookup" and (len(field) != 2 or field[1] != "count"):
|
|
175
136
|
raise ValueError("Lookup filters must follow the format `lookup.count`")
|
|
176
|
-
op
|
|
177
|
-
|
|
178
|
-
|
|
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)
|
|
179
142
|
|
|
180
143
|
return FilterItem(field=field, op=op, value=value)
|
|
181
144
|
|
|
@@ -201,7 +164,7 @@ def _parse_sort_item_from_tuple(
|
|
|
201
164
|
raise ValueError("Lookup must follow the format `lookup.count`")
|
|
202
165
|
if field[1] != "count":
|
|
203
166
|
raise ValueError("Lookup can only be sorted on count")
|
|
204
|
-
return TelemetrySortOptions(field=field, direction=
|
|
167
|
+
return TelemetrySortOptions(field=field, direction=input[1])
|
|
205
168
|
|
|
206
169
|
|
|
207
170
|
def _parse_memory_insert(memory: dict[str, Any], type: MemoryType) -> LabeledMemoryInsert | ScoredMemoryInsert:
|
|
@@ -212,45 +175,26 @@ def _parse_memory_insert(memory: dict[str, Any], type: MemoryType) -> LabeledMem
|
|
|
212
175
|
if source_id and not isinstance(source_id, str):
|
|
213
176
|
raise ValueError("Memory source_id must be a string")
|
|
214
177
|
match type:
|
|
215
|
-
case
|
|
178
|
+
case "LABELED":
|
|
216
179
|
label = memory.get("label")
|
|
217
180
|
if not isinstance(label, int):
|
|
218
181
|
raise ValueError("Memory label must be an integer")
|
|
219
|
-
metadata =
|
|
220
|
-
{k: v for k, v in memory.items() if k not in DEFAULT_COLUMN_NAMES | {"label"}}
|
|
221
|
-
)
|
|
182
|
+
metadata = {k: v for k, v in memory.items() if k not in DEFAULT_COLUMN_NAMES | {"label"}}
|
|
222
183
|
if any(k in metadata for k in FORBIDDEN_METADATA_COLUMN_NAMES):
|
|
223
184
|
raise ValueError(
|
|
224
185
|
f"The following column names are reserved: {', '.join(FORBIDDEN_METADATA_COLUMN_NAMES)}"
|
|
225
186
|
)
|
|
226
|
-
return
|
|
227
|
-
case
|
|
187
|
+
return {"value": value, "label": label, "source_id": source_id, "metadata": metadata}
|
|
188
|
+
case "SCORED":
|
|
228
189
|
score = memory.get("score")
|
|
229
190
|
if not isinstance(score, (int, float)):
|
|
230
191
|
raise ValueError("Memory score must be a number")
|
|
231
|
-
metadata =
|
|
232
|
-
{k: v for k, v in memory.items() if k not in DEFAULT_COLUMN_NAMES | {"score"}}
|
|
233
|
-
)
|
|
192
|
+
metadata = {k: v for k, v in memory.items() if k not in DEFAULT_COLUMN_NAMES | {"score"}}
|
|
234
193
|
if any(k in metadata for k in FORBIDDEN_METADATA_COLUMN_NAMES):
|
|
235
194
|
raise ValueError(
|
|
236
195
|
f"The following column names are reserved: {', '.join(FORBIDDEN_METADATA_COLUMN_NAMES)}"
|
|
237
196
|
)
|
|
238
|
-
return
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
@overload
|
|
242
|
-
def _parse_memory_update(update: dict[str, Any], type: Literal[MemoryType.LABELED]) -> LabeledMemoryUpdate:
|
|
243
|
-
pass
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
@overload
|
|
247
|
-
def _parse_memory_update(update: dict[str, Any], type: Literal[MemoryType.SCORED]) -> ScoredMemoryUpdate:
|
|
248
|
-
pass
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
@overload
|
|
252
|
-
def _parse_memory_update(update: dict[str, Any], type: MemoryType) -> ScoredMemoryUpdate | LabeledMemoryUpdate:
|
|
253
|
-
pass
|
|
197
|
+
return {"value": value, "score": score, "source_id": source_id, "metadata": metadata}
|
|
254
198
|
|
|
255
199
|
|
|
256
200
|
def _parse_memory_update(update: dict[str, Any], type: MemoryType) -> LabeledMemoryUpdate | ScoredMemoryUpdate:
|
|
@@ -259,41 +203,42 @@ def _parse_memory_update(update: dict[str, Any], type: MemoryType) -> LabeledMem
|
|
|
259
203
|
memory_id = update["memory_id"]
|
|
260
204
|
if not isinstance(memory_id, str):
|
|
261
205
|
raise ValueError("memory_id must be a string")
|
|
262
|
-
|
|
263
|
-
if value
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
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"]
|
|
268
215
|
match type:
|
|
269
|
-
case
|
|
270
|
-
|
|
271
|
-
if label
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
)
|
|
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"}}
|
|
276
223
|
if any(k in metadata for k in FORBIDDEN_METADATA_COLUMN_NAMES):
|
|
277
224
|
raise ValueError(
|
|
278
225
|
f"Cannot update the following metadata keys: {', '.join(FORBIDDEN_METADATA_COLUMN_NAMES)}"
|
|
279
226
|
)
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
)
|
|
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"}}
|
|
290
236
|
if any(k in metadata for k in FORBIDDEN_METADATA_COLUMN_NAMES):
|
|
291
237
|
raise ValueError(
|
|
292
238
|
f"Cannot update the following metadata keys: {', '.join(FORBIDDEN_METADATA_COLUMN_NAMES)}"
|
|
293
239
|
)
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
)
|
|
240
|
+
payload["metadata"] = metadata
|
|
241
|
+
return cast(ScoredMemoryUpdate, payload)
|
|
297
242
|
|
|
298
243
|
|
|
299
244
|
class _Memory(ABC):
|
|
@@ -303,7 +248,7 @@ class _Memory(ABC):
|
|
|
303
248
|
created_at: datetime
|
|
304
249
|
updated_at: datetime
|
|
305
250
|
metadata: dict[str, str | float | int | bool | None]
|
|
306
|
-
metrics:
|
|
251
|
+
metrics: MemoryMetrics
|
|
307
252
|
memory_id: str
|
|
308
253
|
memory_version: int
|
|
309
254
|
feedback_metrics: dict[str, Any]
|
|
@@ -326,19 +271,17 @@ class _Memory(ABC):
|
|
|
326
271
|
):
|
|
327
272
|
# for internal use only, do not document
|
|
328
273
|
self.memoryset_id = memoryset_id
|
|
329
|
-
self.memory_id = memory
|
|
330
|
-
self.memory_version = memory
|
|
331
|
-
self.value = memory
|
|
332
|
-
self.embedding = memory
|
|
333
|
-
self.source_id = memory
|
|
334
|
-
self.created_at = memory
|
|
335
|
-
self.updated_at = memory
|
|
336
|
-
self.metadata = memory
|
|
337
|
-
self.metrics = memory
|
|
338
|
-
self.feedback_metrics = (
|
|
339
|
-
|
|
340
|
-
)
|
|
341
|
-
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)
|
|
342
285
|
|
|
343
286
|
def __getattr__(self, key: str) -> Any:
|
|
344
287
|
if key.startswith("__") or key not in self.metadata:
|
|
@@ -368,9 +311,10 @@ class _Memory(ABC):
|
|
|
368
311
|
Returns:
|
|
369
312
|
The updated memory
|
|
370
313
|
"""
|
|
371
|
-
response =
|
|
372
|
-
|
|
373
|
-
|
|
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(
|
|
374
318
|
{"memory_id": self.memory_id}
|
|
375
319
|
| ({"value": value} if value is not UNSET else {})
|
|
376
320
|
| ({"source_id": source_id} if source_id is not UNSET else {})
|
|
@@ -381,6 +325,25 @@ class _Memory(ABC):
|
|
|
381
325
|
self.__dict__.update(self.__class__(self.memoryset_id, response).__dict__)
|
|
382
326
|
return self
|
|
383
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
|
+
|
|
384
347
|
|
|
385
348
|
class LabeledMemory(_Memory):
|
|
386
349
|
"""
|
|
@@ -409,7 +372,7 @@ class LabeledMemory(_Memory):
|
|
|
409
372
|
|
|
410
373
|
label: int
|
|
411
374
|
label_name: str | None
|
|
412
|
-
memory_type =
|
|
375
|
+
memory_type = "LABELED"
|
|
413
376
|
|
|
414
377
|
def __init__(
|
|
415
378
|
self,
|
|
@@ -423,8 +386,8 @@ class LabeledMemory(_Memory):
|
|
|
423
386
|
):
|
|
424
387
|
# for internal use only, do not document
|
|
425
388
|
super().__init__(memoryset_id, memory)
|
|
426
|
-
self.label = memory
|
|
427
|
-
self.label_name = memory
|
|
389
|
+
self.label = memory["label"]
|
|
390
|
+
self.label_name = memory["label_name"]
|
|
428
391
|
|
|
429
392
|
def __repr__(self) -> str:
|
|
430
393
|
return (
|
|
@@ -464,6 +427,15 @@ class LabeledMemory(_Memory):
|
|
|
464
427
|
super().update(value=value, label=label, source_id=source_id, **metadata)
|
|
465
428
|
return self
|
|
466
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
|
+
|
|
467
439
|
|
|
468
440
|
class LabeledMemoryLookup(LabeledMemory):
|
|
469
441
|
"""
|
|
@@ -499,10 +471,8 @@ class LabeledMemoryLookup(LabeledMemory):
|
|
|
499
471
|
def __init__(self, memoryset_id: str, memory_lookup: LabeledMemoryLookupResponse | LabelPredictionMemoryLookup):
|
|
500
472
|
# for internal use only, do not document
|
|
501
473
|
super().__init__(memoryset_id, memory_lookup)
|
|
502
|
-
self.lookup_score = memory_lookup
|
|
503
|
-
self.attention_weight =
|
|
504
|
-
memory_lookup.attention_weight if isinstance(memory_lookup, LabelPredictionMemoryLookup) else None
|
|
505
|
-
)
|
|
474
|
+
self.lookup_score = memory_lookup["lookup_score"]
|
|
475
|
+
self.attention_weight = memory_lookup["attention_weight"] if "attention_weight" in memory_lookup else None
|
|
506
476
|
|
|
507
477
|
def __repr__(self) -> str:
|
|
508
478
|
return (
|
|
@@ -540,7 +510,7 @@ class ScoredMemory(_Memory):
|
|
|
540
510
|
"""
|
|
541
511
|
|
|
542
512
|
score: float
|
|
543
|
-
memory_type =
|
|
513
|
+
memory_type = "SCORED"
|
|
544
514
|
|
|
545
515
|
def __init__(
|
|
546
516
|
self,
|
|
@@ -554,7 +524,7 @@ class ScoredMemory(_Memory):
|
|
|
554
524
|
):
|
|
555
525
|
# for internal use only, do not document
|
|
556
526
|
super().__init__(memoryset_id, memory)
|
|
557
|
-
self.score = memory
|
|
527
|
+
self.score = memory["score"]
|
|
558
528
|
|
|
559
529
|
def __repr__(self) -> str:
|
|
560
530
|
return (
|
|
@@ -594,6 +564,14 @@ class ScoredMemory(_Memory):
|
|
|
594
564
|
super().update(value=value, score=score, source_id=source_id, **metadata)
|
|
595
565
|
return self
|
|
596
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
|
+
|
|
597
575
|
|
|
598
576
|
class ScoredMemoryLookup(ScoredMemory):
|
|
599
577
|
"""
|
|
@@ -625,10 +603,8 @@ class ScoredMemoryLookup(ScoredMemory):
|
|
|
625
603
|
def __init__(self, memoryset_id: str, memory_lookup: ScoredMemoryLookupResponse | ScorePredictionMemoryLookup):
|
|
626
604
|
# for internal use only, do not document
|
|
627
605
|
super().__init__(memoryset_id, memory_lookup)
|
|
628
|
-
self.lookup_score = memory_lookup
|
|
629
|
-
self.attention_weight =
|
|
630
|
-
memory_lookup.attention_weight if isinstance(memory_lookup, ScorePredictionMemoryLookup) else None
|
|
631
|
-
)
|
|
606
|
+
self.lookup_score = memory_lookup["lookup_score"]
|
|
607
|
+
self.attention_weight = memory_lookup["attention_weight"] if "attention_weight" in memory_lookup else None
|
|
632
608
|
|
|
633
609
|
def __repr__(self) -> str:
|
|
634
610
|
return (
|
|
@@ -674,23 +650,23 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
674
650
|
|
|
675
651
|
def __init__(self, metadata: MemorysetMetadata):
|
|
676
652
|
# for internal use only, do not document
|
|
677
|
-
if metadata
|
|
678
|
-
self.embedding_model = PretrainedEmbeddingModel._get(metadata
|
|
679
|
-
elif metadata
|
|
680
|
-
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"])
|
|
681
657
|
else:
|
|
682
658
|
raise ValueError("Either pretrained_embedding_model_name or finetuned_embedding_model_id must be provided")
|
|
683
|
-
self.id = metadata
|
|
684
|
-
self.name = metadata
|
|
685
|
-
self.description = metadata
|
|
686
|
-
self.length = metadata
|
|
687
|
-
self.created_at = metadata
|
|
688
|
-
self.updated_at = metadata
|
|
689
|
-
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"])
|
|
690
666
|
self._last_refresh = datetime.now()
|
|
691
|
-
self.index_type = metadata
|
|
692
|
-
self.index_params = metadata
|
|
693
|
-
self.memory_type =
|
|
667
|
+
self.index_type = metadata["index_type"]
|
|
668
|
+
self.index_params = metadata["index_params"]
|
|
669
|
+
self.memory_type = metadata["memory_type"]
|
|
694
670
|
|
|
695
671
|
def __eq__(self, other) -> bool:
|
|
696
672
|
return isinstance(other, _Memoryset) and self.id == other.id
|
|
@@ -719,6 +695,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
719
695
|
description: str | None = None,
|
|
720
696
|
label_names: list[str] | None = None,
|
|
721
697
|
max_seq_length_override: int | None = None,
|
|
698
|
+
prompt: str | None = None,
|
|
722
699
|
remove_duplicates: bool = True,
|
|
723
700
|
index_type: IndexType = "FLAT",
|
|
724
701
|
index_params: dict[str, Any] = {},
|
|
@@ -742,6 +719,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
742
719
|
description: str | None = None,
|
|
743
720
|
label_names: list[str] | None = None,
|
|
744
721
|
max_seq_length_override: int | None = None,
|
|
722
|
+
prompt: str | None = None,
|
|
745
723
|
remove_duplicates: bool = True,
|
|
746
724
|
index_type: IndexType = "FLAT",
|
|
747
725
|
index_params: dict[str, Any] = {},
|
|
@@ -764,6 +742,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
764
742
|
description: str | None = None,
|
|
765
743
|
label_names: list[str] | None = None,
|
|
766
744
|
max_seq_length_override: int | None = None,
|
|
745
|
+
prompt: str | None = None,
|
|
767
746
|
remove_duplicates: bool = True,
|
|
768
747
|
index_type: IndexType = "FLAT",
|
|
769
748
|
index_params: dict[str, Any] = {},
|
|
@@ -797,6 +776,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
797
776
|
max_seq_length_override: Maximum sequence length of values in the memoryset, if the
|
|
798
777
|
value is longer than this it will be truncated, will default to the model's max
|
|
799
778
|
sequence length if not provided
|
|
779
|
+
prompt: Optional prompt to use when embedding documents/memories for storage
|
|
800
780
|
remove_duplicates: Whether to remove duplicates from the datasource before inserting
|
|
801
781
|
into the memoryset
|
|
802
782
|
index_type: Type of vector index to use for the memoryset, defaults to `"FLAT"`. Valid
|
|
@@ -829,29 +809,30 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
829
809
|
raise ValueError(f"Memoryset with name {name} already exists with a different {attribute}.")
|
|
830
810
|
return existing
|
|
831
811
|
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
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"]))
|
|
855
836
|
return job if background else job.result()
|
|
856
837
|
|
|
857
838
|
@overload
|
|
@@ -1272,7 +1253,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1272
1253
|
Raises:
|
|
1273
1254
|
LookupError: If the memoryset does not exist
|
|
1274
1255
|
"""
|
|
1275
|
-
metadata =
|
|
1256
|
+
metadata = orca_api.GET("/memoryset/{name_or_id}", params={"name_or_id": name})
|
|
1276
1257
|
return cls(metadata)
|
|
1277
1258
|
|
|
1278
1259
|
@classmethod
|
|
@@ -1300,7 +1281,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1300
1281
|
Returns:
|
|
1301
1282
|
List of handles to all memorysets in the OrcaCloud
|
|
1302
1283
|
"""
|
|
1303
|
-
return [cls(metadata) for metadata in
|
|
1284
|
+
return [cls(metadata) for metadata in orca_api.GET("/memoryset", params={"type": cls.memory_type})]
|
|
1304
1285
|
|
|
1305
1286
|
@classmethod
|
|
1306
1287
|
def drop(cls, name_or_id: str, if_not_exists: DropMode = "error"):
|
|
@@ -1316,7 +1297,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1316
1297
|
LookupError: If the memoryset does not exist and if_not_exists is `"error"`
|
|
1317
1298
|
"""
|
|
1318
1299
|
try:
|
|
1319
|
-
|
|
1300
|
+
orca_api.DELETE("/memoryset/{name_or_id}", params={"name_or_id": name_or_id})
|
|
1320
1301
|
logging.info(f"Deleted memoryset {name_or_id}")
|
|
1321
1302
|
except LookupError:
|
|
1322
1303
|
if if_not_exists == "error":
|
|
@@ -1334,14 +1315,15 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1334
1315
|
name: Value to set for the name
|
|
1335
1316
|
label_names: Value to replace existing label names with
|
|
1336
1317
|
"""
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
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)
|
|
1345
1327
|
self.refresh()
|
|
1346
1328
|
|
|
1347
1329
|
@overload
|
|
@@ -1351,6 +1333,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1351
1333
|
*,
|
|
1352
1334
|
embedding_model: PretrainedEmbeddingModel | FinetunedEmbeddingModel | None = None,
|
|
1353
1335
|
max_seq_length_override: int | None = None,
|
|
1336
|
+
prompt: str | None = None,
|
|
1354
1337
|
if_exists: CreateMode = "error",
|
|
1355
1338
|
background: Literal[True],
|
|
1356
1339
|
) -> Job[Self]:
|
|
@@ -1363,6 +1346,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1363
1346
|
*,
|
|
1364
1347
|
embedding_model: PretrainedEmbeddingModel | FinetunedEmbeddingModel | None = None,
|
|
1365
1348
|
max_seq_length_override: int | None = None,
|
|
1349
|
+
prompt: str | None = None,
|
|
1366
1350
|
if_exists: CreateMode = "error",
|
|
1367
1351
|
background: Literal[False] = False,
|
|
1368
1352
|
) -> Self:
|
|
@@ -1373,7 +1357,8 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1373
1357
|
name: str,
|
|
1374
1358
|
*,
|
|
1375
1359
|
embedding_model: PretrainedEmbeddingModel | FinetunedEmbeddingModel | None = None,
|
|
1376
|
-
max_seq_length_override: int | None =
|
|
1360
|
+
max_seq_length_override: int | None = UNSET,
|
|
1361
|
+
prompt: str | None = None,
|
|
1377
1362
|
if_exists: CreateMode = "error",
|
|
1378
1363
|
background: bool = False,
|
|
1379
1364
|
) -> Self | Job[Self]:
|
|
@@ -1385,6 +1370,10 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1385
1370
|
embedding_model: Optional new embedding model to use for re-embedding the memory values
|
|
1386
1371
|
value is longer than this it will be truncated, will default to the model's max
|
|
1387
1372
|
sequence length if not provided
|
|
1373
|
+
document_prompt_override: Optional custom document prompt to use for the cloned memoryset.
|
|
1374
|
+
If not provided, will use the source memoryset's document prompt.
|
|
1375
|
+
query_prompt_override: Optional custom query prompt to use for the cloned memoryset.
|
|
1376
|
+
If not provided, will use the source memoryset's query prompt.
|
|
1388
1377
|
if_exists: What to do if a memoryset with the same name already exists, defaults to
|
|
1389
1378
|
`"error"`. Other option is `"open"` to open the existing memoryset.
|
|
1390
1379
|
|
|
@@ -1399,6 +1388,13 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1399
1388
|
>>> new_memoryset = memoryset.clone(
|
|
1400
1389
|
... "my_memoryset_finetuned", embedding_model=finetuned_embedding_model,
|
|
1401
1390
|
... )
|
|
1391
|
+
|
|
1392
|
+
>>> # Clone with custom prompts
|
|
1393
|
+
>>> new_memoryset = memoryset.clone(
|
|
1394
|
+
... "my_memoryset_with_prompts",
|
|
1395
|
+
... document_prompt_override="Represent this document for retrieval:",
|
|
1396
|
+
... query_prompt_override="Represent this query for retrieval:",
|
|
1397
|
+
... )
|
|
1402
1398
|
"""
|
|
1403
1399
|
if self.exists(name):
|
|
1404
1400
|
if if_exists == "error":
|
|
@@ -1409,23 +1405,20 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1409
1405
|
if locals()[attribute] is not None and locals()[attribute] != getattr(existing, attribute):
|
|
1410
1406
|
raise ValueError(f"Memoryset with name {name} already exists with a different {attribute}.")
|
|
1411
1407
|
return existing
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
max_seq_length_override=max_seq_length_override,
|
|
1424
|
-
),
|
|
1425
|
-
)
|
|
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)
|
|
1426
1419
|
job = Job(
|
|
1427
|
-
metadata
|
|
1428
|
-
lambda: self.open(metadata
|
|
1420
|
+
metadata["insertion_task_id"],
|
|
1421
|
+
lambda: self.open(metadata["id"]),
|
|
1429
1422
|
)
|
|
1430
1423
|
return job if background else job.result()
|
|
1431
1424
|
|
|
@@ -1503,20 +1496,24 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1503
1496
|
raise ValueError(f"Invalid index type: {type(index)}")
|
|
1504
1497
|
|
|
1505
1498
|
@overload
|
|
1506
|
-
def search(self, query: str, *, count: int = 1) -> list[MemoryLookupT]:
|
|
1499
|
+
def search(self, query: str, *, count: int = 1, prompt: str | None = None) -> list[MemoryLookupT]:
|
|
1507
1500
|
pass
|
|
1508
1501
|
|
|
1509
1502
|
@overload
|
|
1510
|
-
def search(self, query: list[str], *, count: int = 1) -> list[list[MemoryLookupT]]:
|
|
1503
|
+
def search(self, query: list[str], *, count: int = 1, prompt: str | None = None) -> list[list[MemoryLookupT]]:
|
|
1511
1504
|
pass
|
|
1512
1505
|
|
|
1513
|
-
def search(
|
|
1506
|
+
def search(
|
|
1507
|
+
self, query: str | list[str], *, count: int = 1, prompt: str | None = None
|
|
1508
|
+
) -> list[MemoryLookupT] | list[list[MemoryLookupT]]:
|
|
1514
1509
|
"""
|
|
1515
1510
|
Search for memories that are semantically similar to the query
|
|
1516
1511
|
|
|
1517
1512
|
Params:
|
|
1518
1513
|
query: Query to lookup memories in the memoryset, can be a single query or a list
|
|
1519
1514
|
count: Number of memories to return for each query
|
|
1515
|
+
prompt: Optional prompt for query embedding during search.
|
|
1516
|
+
If not provided, the memoryset's default query prompt will be used if available.
|
|
1520
1517
|
|
|
1521
1518
|
Returns:
|
|
1522
1519
|
List of memories from the memoryset that match the query. If a single query is provided,
|
|
@@ -1531,6 +1528,13 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1531
1528
|
LabeledMemoryLookup({ label: <positive: 1>, value: 'I am content' }),
|
|
1532
1529
|
]
|
|
1533
1530
|
|
|
1531
|
+
Search with custom query prompt for instruction-following models:
|
|
1532
|
+
>>> memoryset.search("I am happy", count=2, query_prompt="Represent this query for sentiment retrieval:")
|
|
1533
|
+
[
|
|
1534
|
+
LabeledMemoryLookup({ label: <positive: 1>, value: 'I am happy' }),
|
|
1535
|
+
LabeledMemoryLookup({ label: <positive: 1>, value: 'I am content' }),
|
|
1536
|
+
]
|
|
1537
|
+
|
|
1534
1538
|
Search for similar memories for multiple queries:
|
|
1535
1539
|
>>> memoryset.search(["I am happy", "I am sad"], count=1)
|
|
1536
1540
|
[
|
|
@@ -1542,9 +1546,14 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1542
1546
|
],
|
|
1543
1547
|
]
|
|
1544
1548
|
"""
|
|
1545
|
-
response =
|
|
1546
|
-
name_or_id
|
|
1547
|
-
|
|
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
|
+
},
|
|
1548
1557
|
)
|
|
1549
1558
|
lookups = [
|
|
1550
1559
|
[
|
|
@@ -1552,7 +1561,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1552
1561
|
MemoryLookupT,
|
|
1553
1562
|
(
|
|
1554
1563
|
LabeledMemoryLookup(self.id, lookup_response)
|
|
1555
|
-
if
|
|
1564
|
+
if "label" in lookup_response
|
|
1556
1565
|
else ScoredMemoryLookup(self.id, lookup_response)
|
|
1557
1566
|
),
|
|
1558
1567
|
)
|
|
@@ -1594,50 +1603,70 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1594
1603
|
]
|
|
1595
1604
|
|
|
1596
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
|
+
)
|
|
1597
1616
|
return [
|
|
1598
1617
|
cast(
|
|
1599
1618
|
MemoryT,
|
|
1600
|
-
(
|
|
1601
|
-
LabeledMemory(self.id, memory)
|
|
1602
|
-
if isinstance(memory, LabeledMemoryWithFeedbackMetrics)
|
|
1603
|
-
else ScoredMemory(self.id, memory)
|
|
1604
|
-
),
|
|
1619
|
+
(LabeledMemory(self.id, memory) if "label" in memory else ScoredMemory(self.id, memory)),
|
|
1605
1620
|
)
|
|
1606
|
-
for memory in
|
|
1607
|
-
body=TelemetryMemoriesRequest(
|
|
1608
|
-
memoryset_id=self.id,
|
|
1609
|
-
offset=offset,
|
|
1610
|
-
limit=limit,
|
|
1611
|
-
filters=parsed_filters,
|
|
1612
|
-
sort=[_parse_sort_item_from_tuple(item) for item in sort] if sort else None,
|
|
1613
|
-
),
|
|
1614
|
-
).items
|
|
1621
|
+
for memory in response["items"]
|
|
1615
1622
|
]
|
|
1616
1623
|
|
|
1617
|
-
if any(
|
|
1624
|
+
if any(_is_metric_column(filter[0]) for filter in filters):
|
|
1618
1625
|
raise ValueError("Feedback metrics are only supported when the with_feedback_metrics flag is set to True")
|
|
1619
1626
|
|
|
1620
1627
|
if sort:
|
|
1621
1628
|
logging.warning("Sorting is not supported when with_feedback_metrics is False. Sort value will be ignored.")
|
|
1622
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
|
+
)
|
|
1623
1639
|
return [
|
|
1624
1640
|
cast(
|
|
1625
1641
|
MemoryT,
|
|
1626
|
-
(
|
|
1627
|
-
LabeledMemory(self.id, memory)
|
|
1628
|
-
if isinstance(memory, LabeledMemoryResponse)
|
|
1629
|
-
else ScoredMemory(self.id, memory)
|
|
1630
|
-
),
|
|
1642
|
+
(LabeledMemory(self.id, memory) if "label" in memory else ScoredMemory(self.id, memory)),
|
|
1631
1643
|
)
|
|
1632
|
-
for memory in
|
|
1633
|
-
|
|
1634
|
-
|
|
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(
|
|
1635
1662
|
offset=offset,
|
|
1636
1663
|
limit=limit,
|
|
1637
|
-
filters=
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1664
|
+
filters=filters,
|
|
1665
|
+
with_feedback_metrics=with_feedback_metrics,
|
|
1666
|
+
sort=sort,
|
|
1667
|
+
)
|
|
1668
|
+
]
|
|
1669
|
+
)
|
|
1641
1670
|
|
|
1642
1671
|
def insert(self, items: Iterable[dict[str, Any]] | dict[str, Any]) -> None:
|
|
1643
1672
|
"""
|
|
@@ -1659,16 +1688,15 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1659
1688
|
... {"value": "I am sad", "label": 0, "source_id": "user_124", "tag": "sad"},
|
|
1660
1689
|
... ])
|
|
1661
1690
|
"""
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
)
|
|
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
|
+
],
|
|
1672
1700
|
),
|
|
1673
1701
|
)
|
|
1674
1702
|
self.refresh()
|
|
@@ -1710,25 +1738,23 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1710
1738
|
]
|
|
1711
1739
|
"""
|
|
1712
1740
|
if isinstance(memory_id, str):
|
|
1713
|
-
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
|
+
)
|
|
1714
1744
|
return cast(
|
|
1715
1745
|
MemoryT,
|
|
1716
|
-
(
|
|
1717
|
-
LabeledMemory(self.id, response)
|
|
1718
|
-
if isinstance(response, LabeledMemoryResponse)
|
|
1719
|
-
else ScoredMemory(self.id, response)
|
|
1720
|
-
),
|
|
1746
|
+
(LabeledMemory(self.id, response) if "label" in response else ScoredMemory(self.id, response)),
|
|
1721
1747
|
)
|
|
1722
1748
|
else:
|
|
1723
|
-
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
|
+
)
|
|
1724
1754
|
return [
|
|
1725
1755
|
cast(
|
|
1726
1756
|
MemoryT,
|
|
1727
|
-
(
|
|
1728
|
-
LabeledMemory(self.id, memory)
|
|
1729
|
-
if isinstance(memory, LabeledMemoryResponse)
|
|
1730
|
-
else ScoredMemory(self.id, memory)
|
|
1731
|
-
),
|
|
1757
|
+
(LabeledMemory(self.id, memory) if "label" in memory else ScoredMemory(self.id, memory)),
|
|
1732
1758
|
)
|
|
1733
1759
|
for memory in response
|
|
1734
1760
|
]
|
|
@@ -1773,9 +1799,10 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1773
1799
|
... for m in memoryset.query(filters=[("tag", "==", "happy")])
|
|
1774
1800
|
... )
|
|
1775
1801
|
"""
|
|
1776
|
-
response =
|
|
1777
|
-
|
|
1778
|
-
|
|
1802
|
+
response = orca_api.PATCH(
|
|
1803
|
+
"/gpu/memoryset/{name_or_id}/memories",
|
|
1804
|
+
params={"name_or_id": self.id},
|
|
1805
|
+
json=cast(
|
|
1779
1806
|
list[LabeledMemoryUpdate] | list[ScoredMemoryUpdate],
|
|
1780
1807
|
[
|
|
1781
1808
|
_parse_memory_update(update, type=self.memory_type)
|
|
@@ -1786,11 +1813,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1786
1813
|
updated_memories = [
|
|
1787
1814
|
cast(
|
|
1788
1815
|
MemoryT,
|
|
1789
|
-
(
|
|
1790
|
-
LabeledMemory(self.id, memory)
|
|
1791
|
-
if isinstance(memory, LabeledMemoryResponse)
|
|
1792
|
-
else ScoredMemory(self.id, memory)
|
|
1793
|
-
),
|
|
1816
|
+
(LabeledMemory(self.id, memory) if "label" in memory else ScoredMemory(self.id, memory)),
|
|
1794
1817
|
)
|
|
1795
1818
|
for memory in response
|
|
1796
1819
|
]
|
|
@@ -1836,21 +1859,21 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1836
1859
|
Returns:
|
|
1837
1860
|
A list of CascadingEditSuggestion objects, each containing a neighbor and the suggested new label.
|
|
1838
1861
|
"""
|
|
1839
|
-
|
|
1840
|
-
return
|
|
1841
|
-
name_or_id
|
|
1842
|
-
memory_id
|
|
1843
|
-
|
|
1844
|
-
old_label
|
|
1845
|
-
new_label
|
|
1846
|
-
max_neighbors
|
|
1847
|
-
max_validation_neighbors
|
|
1848
|
-
similarity_threshold
|
|
1849
|
-
only_if_has_old_label
|
|
1850
|
-
exclude_if_new_label
|
|
1851
|
-
suggestion_cooldown_time
|
|
1852
|
-
label_confirmation_cooldown_time
|
|
1853
|
-
|
|
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
|
+
},
|
|
1854
1877
|
)
|
|
1855
1878
|
|
|
1856
1879
|
def delete(self, memory_id: str | Iterable[str]) -> None:
|
|
@@ -1872,37 +1895,39 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1872
1895
|
|
|
1873
1896
|
"""
|
|
1874
1897
|
memory_ids = [memory_id] if isinstance(memory_id, str) else list(memory_id)
|
|
1875
|
-
|
|
1898
|
+
orca_api.POST(
|
|
1899
|
+
"/memoryset/{name_or_id}/memories/delete", params={"name_or_id": self.id}, json={"memory_ids": memory_ids}
|
|
1900
|
+
)
|
|
1876
1901
|
logging.info(f"Deleted {len(memory_ids)} memories from memoryset.")
|
|
1877
1902
|
self.refresh()
|
|
1878
1903
|
|
|
1879
1904
|
@overload
|
|
1880
1905
|
def analyze(
|
|
1881
1906
|
self,
|
|
1882
|
-
*analyses:
|
|
1907
|
+
*analyses: dict[str, Any] | str,
|
|
1883
1908
|
lookup_count: int = 15,
|
|
1884
1909
|
clear_metrics: bool = False,
|
|
1885
1910
|
background: Literal[True],
|
|
1886
|
-
) -> Job[
|
|
1911
|
+
) -> Job[MemorysetMetrics]:
|
|
1887
1912
|
pass
|
|
1888
1913
|
|
|
1889
1914
|
@overload
|
|
1890
1915
|
def analyze(
|
|
1891
1916
|
self,
|
|
1892
|
-
*analyses:
|
|
1917
|
+
*analyses: dict[str, Any] | str,
|
|
1893
1918
|
lookup_count: int = 15,
|
|
1894
1919
|
clear_metrics: bool = False,
|
|
1895
1920
|
background: Literal[False] = False,
|
|
1896
|
-
) ->
|
|
1921
|
+
) -> MemorysetMetrics:
|
|
1897
1922
|
pass
|
|
1898
1923
|
|
|
1899
1924
|
def analyze(
|
|
1900
1925
|
self,
|
|
1901
|
-
*analyses:
|
|
1926
|
+
*analyses: dict[str, Any] | str,
|
|
1902
1927
|
lookup_count: int = 15,
|
|
1903
1928
|
clear_metrics: bool = False,
|
|
1904
1929
|
background: bool = False,
|
|
1905
|
-
) -> Job[
|
|
1930
|
+
) -> Job[MemorysetMetrics] | MemorysetMetrics:
|
|
1906
1931
|
"""
|
|
1907
1932
|
Run analyses on the memoryset to find duplicates, clusters, mislabelings, and more
|
|
1908
1933
|
|
|
@@ -1965,11 +1990,9 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1965
1990
|
"""
|
|
1966
1991
|
|
|
1967
1992
|
# Get valid analysis names from MemorysetAnalysisConfigs
|
|
1968
|
-
valid_analysis_names =
|
|
1969
|
-
field.name for field in fields(MemorysetAnalysisConfigs) if field.name != "additional_properties"
|
|
1970
|
-
}
|
|
1993
|
+
valid_analysis_names = set(MemorysetAnalysisConfigs.__annotations__)
|
|
1971
1994
|
|
|
1972
|
-
configs:
|
|
1995
|
+
configs: MemorysetAnalysisConfigs = {}
|
|
1973
1996
|
for analysis in analyses:
|
|
1974
1997
|
if isinstance(analysis, str):
|
|
1975
1998
|
error_msg = (
|
|
@@ -1979,30 +2002,37 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
1979
2002
|
raise ValueError(error_msg)
|
|
1980
2003
|
configs[analysis] = {}
|
|
1981
2004
|
else:
|
|
1982
|
-
name = analysis.pop("name")
|
|
2005
|
+
name = analysis.pop("name")
|
|
1983
2006
|
error_msg = f"Invalid analysis name: {name}. Valid names are: {', '.join(sorted(valid_analysis_names))}"
|
|
1984
2007
|
if name not in valid_analysis_names:
|
|
1985
2008
|
raise ValueError(error_msg)
|
|
1986
|
-
configs[name] = analysis
|
|
1987
|
-
|
|
1988
|
-
analysis =
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
|
|
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
|
+
},
|
|
1995
2019
|
)
|
|
1996
2020
|
job = Job(
|
|
1997
|
-
analysis
|
|
1998
|
-
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"],
|
|
1999
2026
|
)
|
|
2000
2027
|
return job if background else job.result()
|
|
2001
2028
|
|
|
2002
|
-
def get_potential_duplicate_groups(self):
|
|
2029
|
+
def get_potential_duplicate_groups(self) -> list[list[MemoryT]]:
|
|
2003
2030
|
"""Group potential duplicates in the memoryset"""
|
|
2004
|
-
response = potential_duplicate_groups
|
|
2005
|
-
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
|
+
]
|
|
2006
2036
|
|
|
2007
2037
|
@overload
|
|
2008
2038
|
@staticmethod
|
|
@@ -2015,7 +2045,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
2015
2045
|
neighbor_count: int = 5,
|
|
2016
2046
|
embedding_models: list[str] | None = None,
|
|
2017
2047
|
background: Literal[True],
|
|
2018
|
-
) -> Job[
|
|
2048
|
+
) -> Job[list[EmbeddingModelResult]]:
|
|
2019
2049
|
pass
|
|
2020
2050
|
|
|
2021
2051
|
@overload
|
|
@@ -2029,7 +2059,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
2029
2059
|
neighbor_count: int = 5,
|
|
2030
2060
|
embedding_models: list[str] | None = None,
|
|
2031
2061
|
background: Literal[False] = False,
|
|
2032
|
-
) ->
|
|
2062
|
+
) -> list[EmbeddingModelResult]:
|
|
2033
2063
|
pass
|
|
2034
2064
|
|
|
2035
2065
|
@staticmethod
|
|
@@ -2042,7 +2072,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
2042
2072
|
neighbor_count: int = 5,
|
|
2043
2073
|
embedding_models: list[str] | None = None,
|
|
2044
2074
|
background: bool = False,
|
|
2045
|
-
) -> Job[
|
|
2075
|
+
) -> Job[list[EmbeddingModelResult]] | list[EmbeddingModelResult]:
|
|
2046
2076
|
"""
|
|
2047
2077
|
Test the quality of embeddings for the datasource by computing metrics such as prediction accuracy.
|
|
2048
2078
|
|
|
@@ -2061,24 +2091,27 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
|
|
|
2061
2091
|
A dictionary containing the results of the embedding evaluation
|
|
2062
2092
|
"""
|
|
2063
2093
|
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
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
|
+
},
|
|
2075
2104
|
)
|
|
2076
2105
|
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
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)
|
|
2082
2115
|
return job if background else job.result()
|
|
2083
2116
|
|
|
2084
2117
|
|
|
@@ -2098,12 +2131,12 @@ class LabeledMemoryset(_Memoryset[LabeledMemory, LabeledMemoryLookup]):
|
|
|
2098
2131
|
"""
|
|
2099
2132
|
|
|
2100
2133
|
label_names: list[str]
|
|
2101
|
-
memory_type: MemoryType =
|
|
2134
|
+
memory_type: MemoryType = "LABELED"
|
|
2102
2135
|
|
|
2103
2136
|
def __init__(self, metadata: MemorysetMetadata):
|
|
2104
2137
|
super().__init__(metadata)
|
|
2105
|
-
assert metadata
|
|
2106
|
-
self.label_names = metadata
|
|
2138
|
+
assert metadata["label_names"] is not None
|
|
2139
|
+
self.label_names = metadata["label_names"]
|
|
2107
2140
|
|
|
2108
2141
|
def __eq__(self, other) -> bool:
|
|
2109
2142
|
return isinstance(other, LabeledMemoryset) and self.id == other.id
|
|
@@ -2112,12 +2145,6 @@ class LabeledMemoryset(_Memoryset[LabeledMemory, LabeledMemoryLookup]):
|
|
|
2112
2145
|
def create(cls, name: str, datasource: Datasource, *, label_column: str | None = "label", **kwargs):
|
|
2113
2146
|
return super().create(name, datasource, label_column=label_column, score_column=None, **kwargs)
|
|
2114
2147
|
|
|
2115
|
-
def display_label_analysis(self):
|
|
2116
|
-
"""Display a UI to review and act upon the label analysis results"""
|
|
2117
|
-
from ._utils.analysis_ui import display_suggested_memory_relabels
|
|
2118
|
-
|
|
2119
|
-
display_suggested_memory_relabels(self)
|
|
2120
|
-
|
|
2121
2148
|
|
|
2122
2149
|
class ScoredMemoryset(_Memoryset[ScoredMemory, ScoredMemoryLookup]):
|
|
2123
2150
|
"""
|
|
@@ -2133,7 +2160,7 @@ class ScoredMemoryset(_Memoryset[ScoredMemory, ScoredMemoryLookup]):
|
|
|
2133
2160
|
updated_at: When the memoryset was last updated, automatically updated on updates
|
|
2134
2161
|
"""
|
|
2135
2162
|
|
|
2136
|
-
memory_type: MemoryType =
|
|
2163
|
+
memory_type: MemoryType = "SCORED"
|
|
2137
2164
|
|
|
2138
2165
|
def __eq__(self, other) -> bool:
|
|
2139
2166
|
return isinstance(other, ScoredMemoryset) and self.id == other.id
|