orca-sdk 0.0.97__py3-none-any.whl → 0.0.100__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 +3563 -0
- orca_sdk/conftest.py +10 -0
- orca_sdk/credentials.py +59 -21
- orca_sdk/credentials_test.py +20 -0
- orca_sdk/datasource.py +80 -93
- orca_sdk/datasource_test.py +41 -7
- 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.100.dist-info}/METADATA +2 -5
- orca_sdk-0.0.100.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.100.dist-info}/WHEEL +0 -0
orca_sdk/__init__.py
CHANGED
|
@@ -4,6 +4,7 @@ OrcaSDK is a Python library for building and using retrieval augmented models in
|
|
|
4
4
|
|
|
5
5
|
from ._utils.common import UNSET, CreateMode, DropMode
|
|
6
6
|
from .classification_model import ClassificationMetrics, ClassificationModel
|
|
7
|
+
from .client import orca_api
|
|
7
8
|
from .credentials import OrcaCredentials
|
|
8
9
|
from .datasource import Datasource
|
|
9
10
|
from .embedding_model import (
|
orca_sdk/_shared/__init__.py
CHANGED
orca_sdk/_utils/analysis_ui.py
CHANGED
|
@@ -28,7 +28,7 @@ def display_suggested_memory_relabels(memoryset: LabeledMemoryset):
|
|
|
28
28
|
filters=[("metrics.neighbor_predicted_label_matches_current_label", "==", False)]
|
|
29
29
|
)
|
|
30
30
|
# Sort memories by confidence score (higher confidence first)
|
|
31
|
-
suggested_relabels.sort(key=lambda x: (x.metrics
|
|
31
|
+
suggested_relabels.sort(key=lambda x: (x.metrics.get("neighbor_predicted_label_confidence", 0.0)), reverse=True)
|
|
32
32
|
|
|
33
33
|
def update_approved(memory_id: str, selected: bool, current_memory_relabel_map: dict[str, RelabelStatus]):
|
|
34
34
|
current_memory_relabel_map[memory_id]["approved"] = selected
|
|
@@ -70,9 +70,9 @@ def display_suggested_memory_relabels(memoryset: LabeledMemoryset):
|
|
|
70
70
|
current_memory_relabel_map[mem_id]["new_label"] = new_label
|
|
71
71
|
confidence = "--"
|
|
72
72
|
current_metrics = current_memory_relabel_map[mem_id]["full_memory"].metrics
|
|
73
|
-
if current_metrics and new_label == current_metrics
|
|
73
|
+
if current_metrics and new_label == current_metrics.get("neighbor_predicted_label"):
|
|
74
74
|
confidence = (
|
|
75
|
-
round(current_metrics
|
|
75
|
+
round(current_metrics.get("neighbor_predicted_label_confidence", 0.0), 2) if current_metrics else 0
|
|
76
76
|
)
|
|
77
77
|
return (
|
|
78
78
|
gr.HTML(
|
|
@@ -99,8 +99,8 @@ def display_suggested_memory_relabels(memoryset: LabeledMemoryset):
|
|
|
99
99
|
memory_id=mem.memory_id,
|
|
100
100
|
approved=False,
|
|
101
101
|
new_label=(
|
|
102
|
-
mem.metrics
|
|
103
|
-
if (mem.metrics and isinstance(mem.metrics
|
|
102
|
+
mem.metrics.get("neighbor_predicted_label")
|
|
103
|
+
if (mem.metrics and isinstance(mem.metrics.get("neighbor_predicted_label"), int))
|
|
104
104
|
else None
|
|
105
105
|
),
|
|
106
106
|
full_memory=mem,
|
orca_sdk/_utils/auth.py
CHANGED
|
@@ -2,23 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
4
|
import os
|
|
5
|
-
from typing import List
|
|
5
|
+
from typing import List, Literal
|
|
6
6
|
|
|
7
7
|
from dotenv import load_dotenv
|
|
8
8
|
|
|
9
|
-
from ..
|
|
10
|
-
|
|
11
|
-
create_api_key,
|
|
12
|
-
delete_api_key,
|
|
13
|
-
delete_org,
|
|
14
|
-
list_api_keys,
|
|
15
|
-
)
|
|
16
|
-
from .._generated_api_client.client import headers_context, set_base_url, set_headers
|
|
17
|
-
from .._generated_api_client.models import (
|
|
18
|
-
CreateApiKeyRequest,
|
|
19
|
-
CreateApiKeyRequestScopeItem,
|
|
20
|
-
)
|
|
21
|
-
from .._generated_api_client.models.api_key_metadata import ApiKeyMetadata
|
|
9
|
+
from ..client import ApiKeyMetadata, orca_api
|
|
10
|
+
from ..credentials import OrcaCredentials
|
|
22
11
|
from .common import DropMode
|
|
23
12
|
|
|
24
13
|
load_dotenv() # this needs to be here to ensure env is populated before accessing it
|
|
@@ -28,43 +17,44 @@ _ORCA_ROOT_ACCESS_API_KEY = os.environ.get("ORCA_ROOT_ACCESS_API_KEY", "00000000
|
|
|
28
17
|
_DEFAULT_ORG_ID = os.environ.get("DEFAULT_ORG_ID", "10e50000-0000-4000-a000-a78dca14af3a")
|
|
29
18
|
|
|
30
19
|
|
|
31
|
-
def _create_api_key(org_id: str, name: str, scopes: list[
|
|
20
|
+
def _create_api_key(org_id: str, name: str, scopes: list[Literal["ADMINISTER", "PREDICT"]] = ["ADMINISTER"]) -> str:
|
|
32
21
|
"""Creates an API key for the given organization"""
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
22
|
+
response = orca_api.POST(
|
|
23
|
+
"/auth/api_key",
|
|
24
|
+
json={"name": name, "scope": scopes},
|
|
25
|
+
headers={"Api-Key": _ORCA_ROOT_ACCESS_API_KEY, "Org-Id": org_id},
|
|
26
|
+
)
|
|
27
|
+
return response["api_key"]
|
|
38
28
|
|
|
39
29
|
|
|
40
30
|
def _list_api_keys(org_id: str) -> List[ApiKeyMetadata]:
|
|
41
31
|
"""Lists all API keys for the given organization"""
|
|
42
|
-
|
|
43
|
-
return list_api_keys()
|
|
32
|
+
return orca_api.GET("/auth/api_key", headers={"Api-Key": _ORCA_ROOT_ACCESS_API_KEY, "Org-Id": org_id})
|
|
44
33
|
|
|
45
34
|
|
|
46
35
|
def _delete_api_key(org_id: str, name: str, if_not_exists: DropMode = "error") -> None:
|
|
47
36
|
"""Deletes the API key with the given name from the organization"""
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
37
|
+
try:
|
|
38
|
+
orca_api.DELETE(
|
|
39
|
+
"/auth/api_key/{name_or_id}",
|
|
40
|
+
params={"name_or_id": name},
|
|
41
|
+
headers={"Api-Key": _ORCA_ROOT_ACCESS_API_KEY, "Org-Id": org_id},
|
|
42
|
+
)
|
|
43
|
+
except LookupError:
|
|
44
|
+
if if_not_exists == "error":
|
|
45
|
+
raise
|
|
54
46
|
|
|
55
47
|
|
|
56
48
|
def _delete_org(org_id: str) -> None:
|
|
57
49
|
"""Deletes the organization"""
|
|
58
|
-
|
|
59
|
-
delete_org()
|
|
50
|
+
orca_api.DELETE("/auth/org", headers={"Api-Key": _ORCA_ROOT_ACCESS_API_KEY, "Org-Id": org_id})
|
|
60
51
|
|
|
61
52
|
|
|
62
53
|
def _authenticate_local_api(org_id: str = _DEFAULT_ORG_ID, api_key_name: str = "local") -> None:
|
|
63
54
|
"""Connect to the local API at http://localhost:1584/ and authenticate with a new API key"""
|
|
64
|
-
set_base_url("http://localhost:1584/")
|
|
65
55
|
_delete_api_key(org_id, api_key_name, if_not_exists="ignore")
|
|
66
|
-
|
|
67
|
-
|
|
56
|
+
OrcaCredentials.set_base_url("http://localhost:1584")
|
|
57
|
+
OrcaCredentials.set_api_key(_create_api_key(org_id, api_key_name))
|
|
68
58
|
logging.info(f"Authenticated against local API at 'http://localhost:1584' with '{api_key_name}' API key")
|
|
69
59
|
|
|
70
60
|
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Callable, Generic, Iterator, TypedDict, TypeVar, cast, overload
|
|
4
|
+
|
|
5
|
+
T = TypeVar("T")
|
|
6
|
+
R = TypeVar("R")
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class Page(TypedDict, Generic[T]):
|
|
10
|
+
items: list[T]
|
|
11
|
+
count: int
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class _PagedIterable(Generic[T, R]):
|
|
15
|
+
def __init__(
|
|
16
|
+
self,
|
|
17
|
+
fetch: Callable[[int, int], Page[T]],
|
|
18
|
+
*,
|
|
19
|
+
transform: Callable[[T], R] | None = None,
|
|
20
|
+
page_size: int = 100,
|
|
21
|
+
) -> None:
|
|
22
|
+
"""
|
|
23
|
+
Iterate over a paginated endpoint.
|
|
24
|
+
|
|
25
|
+
Parameters:
|
|
26
|
+
fetch: function to fetch a page from the endpoint `(limit: int, offset: int) -> TypedDict[{items: list[T], count: int}]`
|
|
27
|
+
transform: Optional function to transforms item types `(item: T) -> R`, defaults to identity
|
|
28
|
+
limit: maximum number of items to fetch per page
|
|
29
|
+
"""
|
|
30
|
+
self.fetch = fetch
|
|
31
|
+
self.transform = transform or (lambda x: cast(R, x))
|
|
32
|
+
self.page_size = page_size
|
|
33
|
+
self.offset = 0 # tracks how much has been yielded, not fetched
|
|
34
|
+
self.page = fetch(self.page_size, self.offset) # fetch first page to populate count
|
|
35
|
+
self.count = self.page["count"]
|
|
36
|
+
|
|
37
|
+
def __iter__(self) -> Iterator[R]:
|
|
38
|
+
if self.offset >= self.count:
|
|
39
|
+
self.offset = 0
|
|
40
|
+
if len(self.page["items"]) < self.count:
|
|
41
|
+
# refetch first page unless we are still on the first page
|
|
42
|
+
self.page = self.fetch(self.page_size, self.offset)
|
|
43
|
+
|
|
44
|
+
# yield prefetched first page
|
|
45
|
+
if self.offset == 0:
|
|
46
|
+
yield from map(self.transform, self.page["items"])
|
|
47
|
+
self.offset += len(self.page["items"])
|
|
48
|
+
|
|
49
|
+
# yield remaining pages one by one
|
|
50
|
+
while self.offset < self.count:
|
|
51
|
+
self.page = self.fetch(self.page_size, self.offset)
|
|
52
|
+
yield from map(self.transform, self.page["items"])
|
|
53
|
+
self.offset += len(self.page["items"])
|
|
54
|
+
|
|
55
|
+
@overload
|
|
56
|
+
def __getitem__(self, key: int) -> R:
|
|
57
|
+
pass
|
|
58
|
+
|
|
59
|
+
@overload
|
|
60
|
+
def __getitem__(self, key: slice) -> list[R]:
|
|
61
|
+
pass
|
|
62
|
+
|
|
63
|
+
def __getitem__(self, key: int | slice) -> R | list[R]:
|
|
64
|
+
if isinstance(key, int):
|
|
65
|
+
effective_key = key
|
|
66
|
+
if effective_key < 0:
|
|
67
|
+
effective_key += self.count
|
|
68
|
+
if not 0 <= effective_key < self.count:
|
|
69
|
+
raise IndexError(f"Index {key} out of range")
|
|
70
|
+
# if key is on current page, return item
|
|
71
|
+
if self.offset <= effective_key < self.offset + len(self.page["items"]):
|
|
72
|
+
return self.transform(self.page["items"][effective_key - self.offset])
|
|
73
|
+
# otherwise, fetch and return the single item
|
|
74
|
+
return self.transform(self.fetch(1, effective_key)["items"][0])
|
|
75
|
+
|
|
76
|
+
elif isinstance(key, slice):
|
|
77
|
+
start, stop, step = key.indices(self.count)
|
|
78
|
+
if step != 1:
|
|
79
|
+
raise ValueError("Stepped slicing is not supported")
|
|
80
|
+
start = start + self.count if start < 0 else start or 0
|
|
81
|
+
stop = stop + self.count if stop < 0 else stop or self.count
|
|
82
|
+
if start >= self.count or stop > self.count:
|
|
83
|
+
raise IndexError(f"Slice {key} out of range")
|
|
84
|
+
limit = min(self.page_size, stop - start)
|
|
85
|
+
if limit <= 0:
|
|
86
|
+
return []
|
|
87
|
+
items = []
|
|
88
|
+
for i in range(start, stop, limit):
|
|
89
|
+
page = self.fetch(limit, i)
|
|
90
|
+
items.extend(map(self.transform, page["items"]))
|
|
91
|
+
return items
|
|
92
|
+
|
|
93
|
+
def __len__(self) -> int:
|
|
94
|
+
return self.count
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
# type checking workaround until python 3.13 allows declaring the class as PagedIterable[T, R = T]
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
@overload
|
|
101
|
+
def PagedIterable(
|
|
102
|
+
fetch: Callable[[int, int], Page[T]],
|
|
103
|
+
*,
|
|
104
|
+
transform: None = None,
|
|
105
|
+
page_size: int = 100,
|
|
106
|
+
) -> _PagedIterable[T, T]:
|
|
107
|
+
pass
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
@overload
|
|
111
|
+
def PagedIterable(
|
|
112
|
+
fetch: Callable[[int, int], Page[T]],
|
|
113
|
+
*,
|
|
114
|
+
transform: Callable[[T], R],
|
|
115
|
+
page_size: int = 100,
|
|
116
|
+
) -> _PagedIterable[T, R]:
|
|
117
|
+
pass
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def PagedIterable(
|
|
121
|
+
fetch: Callable[[int, int], Page[T]],
|
|
122
|
+
*,
|
|
123
|
+
transform: Callable[[T], R] | None = None,
|
|
124
|
+
page_size: int = 100,
|
|
125
|
+
) -> _PagedIterable[T, R]:
|
|
126
|
+
return _PagedIterable(fetch, transform=transform, page_size=page_size)
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
|
|
3
|
+
from .pagination import Page, PagedIterable
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class MockEndpoint:
|
|
7
|
+
"""Mock paginated endpoint for testing"""
|
|
8
|
+
|
|
9
|
+
def __init__(self, total_items: int):
|
|
10
|
+
self.items = list(range(total_items))
|
|
11
|
+
self.fetch_count = 0
|
|
12
|
+
|
|
13
|
+
def fetch(self, limit: int, offset: int) -> Page[int]:
|
|
14
|
+
self.fetch_count += 1
|
|
15
|
+
end_index = min(offset + limit, len(self.items))
|
|
16
|
+
items = self.items[offset:end_index]
|
|
17
|
+
return {"items": items, "count": len(self.items)}
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def test_basic_pagination():
|
|
21
|
+
# Given a mock endpoint with 5 items
|
|
22
|
+
endpoint = MockEndpoint(5)
|
|
23
|
+
# When doing a paginated iteration
|
|
24
|
+
paginated = PagedIterable(endpoint.fetch, page_size=2)
|
|
25
|
+
# Then we should be able to iterate through all items
|
|
26
|
+
assert list(paginated) == [0, 1, 2, 3, 4]
|
|
27
|
+
# And the length should be correct
|
|
28
|
+
assert len(paginated) == 5
|
|
29
|
+
# And 3 requests: [0,1], [2,3], [4] should have been made, one for each page
|
|
30
|
+
assert endpoint.fetch_count == 3
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def test_empty_results():
|
|
34
|
+
# Given an empty mock endpoint
|
|
35
|
+
endpoint = MockEndpoint(0)
|
|
36
|
+
# When doing a paginated iteration
|
|
37
|
+
paginated = PagedIterable(endpoint.fetch, page_size=5)
|
|
38
|
+
# Then we should get an empty list
|
|
39
|
+
assert list(paginated) == []
|
|
40
|
+
# And the length should be 0
|
|
41
|
+
assert len(paginated) == 0
|
|
42
|
+
# And only one request should have been made, for the first page
|
|
43
|
+
assert endpoint.fetch_count == 1
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def test_transform_function():
|
|
47
|
+
# Given a mock endpoint with 4 items
|
|
48
|
+
endpoint = MockEndpoint(4)
|
|
49
|
+
# And a transform function that doubles the items
|
|
50
|
+
transform = lambda x: f"2x={2*x}"
|
|
51
|
+
# When doing a paginated iteration with a transform function
|
|
52
|
+
paginated = PagedIterable(endpoint.fetch, transform=transform, page_size=2)
|
|
53
|
+
# Then we should get the transformed items
|
|
54
|
+
assert list(paginated) == ["2x=0", "2x=2", "2x=4", "2x=6"]
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def test_multiple_iterations():
|
|
58
|
+
# Given a mock endpoint with 5 items
|
|
59
|
+
endpoint = MockEndpoint(5)
|
|
60
|
+
# When we do 2 paginated iterations
|
|
61
|
+
paginated = PagedIterable(endpoint.fetch, page_size=2)
|
|
62
|
+
result1 = list(paginated)
|
|
63
|
+
result2 = list(paginated)
|
|
64
|
+
# Then we should get the same items twice
|
|
65
|
+
assert result1 == result2 == [0, 1, 2, 3, 4]
|
|
66
|
+
# And 6 requests should have been made, 3 for each iteration
|
|
67
|
+
assert endpoint.fetch_count == 6
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def test_single_page_optimization():
|
|
71
|
+
# Given a mock endpoint with 5 items
|
|
72
|
+
endpoint = MockEndpoint(5)
|
|
73
|
+
# When doing a paginated iteration with a limit that is greater than the number of items
|
|
74
|
+
paginated = PagedIterable(endpoint.fetch, page_size=10)
|
|
75
|
+
# Then we should get all items
|
|
76
|
+
assert list(paginated) == [0, 1, 2, 3, 4]
|
|
77
|
+
# And the length should be 5
|
|
78
|
+
assert len(paginated) == 5
|
|
79
|
+
# And only one request should have been made
|
|
80
|
+
assert endpoint.fetch_count == 1
|
|
81
|
+
# And a second iteration should not make any additional requests
|
|
82
|
+
assert list(paginated) == [0, 1, 2, 3, 4]
|
|
83
|
+
assert endpoint.fetch_count == 1
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def test_indexing():
|
|
87
|
+
# Given a mock endpoint with 7 items
|
|
88
|
+
endpoint = MockEndpoint(7)
|
|
89
|
+
# When creating a paginated iterable with page size 3
|
|
90
|
+
paginated = PagedIterable(endpoint.fetch, page_size=3)
|
|
91
|
+
# Then we should be able to access items by index
|
|
92
|
+
assert paginated[0] == 0
|
|
93
|
+
assert paginated[2] == 2
|
|
94
|
+
assert paginated[6] == 6
|
|
95
|
+
# And negative indices should work
|
|
96
|
+
assert paginated[-1] == 6
|
|
97
|
+
# And accessing out of bounds should raise IndexError
|
|
98
|
+
with pytest.raises(IndexError):
|
|
99
|
+
paginated[7]
|
|
100
|
+
with pytest.raises(IndexError):
|
|
101
|
+
paginated[-8]
|
|
102
|
+
# And transforms are applied
|
|
103
|
+
assert PagedIterable(endpoint.fetch, transform=lambda x: x * 10, page_size=3)[1] == 10
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def test_slicing():
|
|
107
|
+
# Given a mock endpoint with 10 items
|
|
108
|
+
endpoint = MockEndpoint(10)
|
|
109
|
+
# When creating a paginated iterable
|
|
110
|
+
paginated = PagedIterable(endpoint.fetch, page_size=3)
|
|
111
|
+
# Then we should be able to slice it
|
|
112
|
+
assert list(paginated[2:5]) == [2, 3, 4]
|
|
113
|
+
assert list(paginated[:3]) == [0, 1, 2]
|
|
114
|
+
assert list(paginated[7:]) == [7, 8, 9]
|
|
115
|
+
# And negative indices should work
|
|
116
|
+
assert list(paginated[:-5]) == [0, 1, 2, 3, 4, 5]
|
|
117
|
+
assert list(paginated[-3:]) == [7, 8, 9]
|
|
118
|
+
assert list(paginated[-5:-2]) == [5, 6, 7]
|
|
119
|
+
# And empty slices should work
|
|
120
|
+
assert list(paginated[5:5]) == []
|
|
121
|
+
# And slicing with a start and stop that are out of bounds should raise IndexError
|
|
122
|
+
with pytest.raises(IndexError):
|
|
123
|
+
list(paginated[20:25])
|
|
124
|
+
# And slicing with a step other than 1 should raise ValueError
|
|
125
|
+
with pytest.raises(ValueError):
|
|
126
|
+
list(paginated[::2])
|
|
127
|
+
with pytest.raises(ValueError):
|
|
128
|
+
list(paginated[1:8:3])
|
|
129
|
+
with pytest.raises(ValueError):
|
|
130
|
+
list(paginated[::-1])
|
|
131
|
+
# And transforms are applied
|
|
132
|
+
assert list(PagedIterable(endpoint.fetch, transform=lambda x: x * 10, page_size=3)[1:3]) == [10, 20]
|