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