orca-sdk 0.0.96__py3-none-any.whl → 0.0.98__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. orca_sdk/__init__.py +2 -5
  2. orca_sdk/_shared/__init__.py +1 -0
  3. orca_sdk/_shared/metrics.py +1 -1
  4. orca_sdk/_utils/analysis_ui.py +5 -5
  5. orca_sdk/_utils/auth.py +23 -33
  6. orca_sdk/_utils/pagination.py +126 -0
  7. orca_sdk/_utils/pagination_test.py +132 -0
  8. orca_sdk/classification_model.py +188 -126
  9. orca_sdk/classification_model_test.py +102 -0
  10. orca_sdk/client.py +3515 -0
  11. orca_sdk/conftest.py +10 -0
  12. orca_sdk/credentials.py +73 -21
  13. orca_sdk/credentials_test.py +20 -0
  14. orca_sdk/datasource.py +186 -81
  15. orca_sdk/datasource_test.py +194 -0
  16. orca_sdk/embedding_model.py +267 -75
  17. orca_sdk/embedding_model_test.py +32 -14
  18. orca_sdk/job.py +59 -54
  19. orca_sdk/job_test.py +50 -0
  20. orca_sdk/memoryset.py +372 -345
  21. orca_sdk/memoryset_test.py +7 -11
  22. orca_sdk/regression_model.py +120 -111
  23. orca_sdk/regression_model_test.py +15 -0
  24. orca_sdk/telemetry.py +229 -115
  25. {orca_sdk-0.0.96.dist-info → orca_sdk-0.0.98.dist-info}/METADATA +19 -5
  26. orca_sdk-0.0.98.dist-info/RECORD +40 -0
  27. orca_sdk/_generated_api_client/__init__.py +0 -3
  28. orca_sdk/_generated_api_client/api/__init__.py +0 -287
  29. orca_sdk/_generated_api_client/api/auth/__init__.py +0 -0
  30. orca_sdk/_generated_api_client/api/auth/check_authentication_auth_get.py +0 -128
  31. orca_sdk/_generated_api_client/api/auth/create_api_key_auth_api_key_post.py +0 -170
  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/list_api_keys_auth_api_key_get.py +0 -127
  35. orca_sdk/_generated_api_client/api/classification_model/__init__.py +0 -0
  36. orca_sdk/_generated_api_client/api/classification_model/create_classification_model_gpu_classification_model_post.py +0 -170
  37. orca_sdk/_generated_api_client/api/classification_model/delete_classification_model_classification_model_name_or_id_delete.py +0 -156
  38. 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
  39. orca_sdk/_generated_api_client/api/classification_model/evaluate_classification_model_classification_model_model_name_or_id_evaluation_post.py +0 -183
  40. orca_sdk/_generated_api_client/api/classification_model/get_classification_model_classification_model_name_or_id_get.py +0 -156
  41. 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
  42. orca_sdk/_generated_api_client/api/classification_model/list_classification_model_evaluations_classification_model_model_name_or_id_evaluation_get.py +0 -161
  43. orca_sdk/_generated_api_client/api/classification_model/list_classification_models_classification_model_get.py +0 -127
  44. orca_sdk/_generated_api_client/api/classification_model/predict_label_gpu_classification_model_name_or_id_prediction_post.py +0 -190
  45. orca_sdk/_generated_api_client/api/classification_model/update_classification_model_classification_model_name_or_id_patch.py +0 -183
  46. orca_sdk/_generated_api_client/api/datasource/__init__.py +0 -0
  47. orca_sdk/_generated_api_client/api/datasource/create_datasource_datasource_post.py +0 -167
  48. orca_sdk/_generated_api_client/api/datasource/create_embedding_evaluation_datasource_name_or_id_embedding_evaluation_post.py +0 -183
  49. orca_sdk/_generated_api_client/api/datasource/delete_datasource_datasource_name_or_id_delete.py +0 -156
  50. orca_sdk/_generated_api_client/api/datasource/download_datasource_datasource_name_or_id_download_get.py +0 -172
  51. orca_sdk/_generated_api_client/api/datasource/get_datasource_datasource_name_or_id_get.py +0 -156
  52. orca_sdk/_generated_api_client/api/datasource/get_embedding_evaluation_datasource_name_or_id_embedding_evaluation_task_id_get.py +0 -169
  53. orca_sdk/_generated_api_client/api/datasource/list_datasources_datasource_get.py +0 -127
  54. orca_sdk/_generated_api_client/api/datasource/list_embedding_evaluations_datasource_name_or_id_embedding_evaluation_get.py +0 -235
  55. orca_sdk/_generated_api_client/api/default/__init__.py +0 -0
  56. orca_sdk/_generated_api_client/api/default/healthcheck_get.py +0 -118
  57. orca_sdk/_generated_api_client/api/default/healthcheck_gpu_get.py +0 -118
  58. orca_sdk/_generated_api_client/api/finetuned_embedding_model/__init__.py +0 -0
  59. orca_sdk/_generated_api_client/api/finetuned_embedding_model/create_finetuned_embedding_model_finetuned_embedding_model_post.py +0 -168
  60. orca_sdk/_generated_api_client/api/finetuned_embedding_model/delete_finetuned_embedding_model_finetuned_embedding_model_name_or_id_delete.py +0 -156
  61. 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
  62. orca_sdk/_generated_api_client/api/finetuned_embedding_model/get_finetuned_embedding_model_finetuned_embedding_model_name_or_id_get.py +0 -156
  63. orca_sdk/_generated_api_client/api/finetuned_embedding_model/list_finetuned_embedding_models_finetuned_embedding_model_get.py +0 -127
  64. orca_sdk/_generated_api_client/api/memoryset/__init__.py +0 -0
  65. orca_sdk/_generated_api_client/api/memoryset/analyze_memoryset_memoryset_name_or_id_analysis_post.py +0 -183
  66. orca_sdk/_generated_api_client/api/memoryset/batch_delete_memoryset_batch_delete_memoryset_post.py +0 -168
  67. orca_sdk/_generated_api_client/api/memoryset/clone_memoryset_memoryset_name_or_id_clone_post.py +0 -181
  68. orca_sdk/_generated_api_client/api/memoryset/create_memoryset_memoryset_post.py +0 -168
  69. orca_sdk/_generated_api_client/api/memoryset/delete_memories_memoryset_name_or_id_memories_delete_post.py +0 -181
  70. orca_sdk/_generated_api_client/api/memoryset/delete_memory_memoryset_name_or_id_memory_memory_id_delete.py +0 -167
  71. orca_sdk/_generated_api_client/api/memoryset/delete_memoryset_memoryset_name_or_id_delete.py +0 -156
  72. orca_sdk/_generated_api_client/api/memoryset/get_analysis_memoryset_name_or_id_analysis_analysis_task_id_get.py +0 -169
  73. orca_sdk/_generated_api_client/api/memoryset/get_memories_memoryset_name_or_id_memories_get_post.py +0 -210
  74. orca_sdk/_generated_api_client/api/memoryset/get_memory_memoryset_name_or_id_memory_memory_id_get.py +0 -186
  75. orca_sdk/_generated_api_client/api/memoryset/get_memoryset_memoryset_name_or_id_get.py +0 -156
  76. orca_sdk/_generated_api_client/api/memoryset/insert_memories_gpu_memoryset_name_or_id_memory_post.py +0 -188
  77. orca_sdk/_generated_api_client/api/memoryset/list_analyses_memoryset_name_or_id_analysis_get.py +0 -235
  78. orca_sdk/_generated_api_client/api/memoryset/list_memorysets_memoryset_get.py +0 -180
  79. orca_sdk/_generated_api_client/api/memoryset/memoryset_lookup_gpu_memoryset_name_or_id_lookup_post.py +0 -212
  80. orca_sdk/_generated_api_client/api/memoryset/potential_duplicate_groups_memoryset_name_or_id_potential_duplicate_groups_get.py +0 -195
  81. orca_sdk/_generated_api_client/api/memoryset/query_memoryset_memoryset_name_or_id_memories_post.py +0 -210
  82. orca_sdk/_generated_api_client/api/memoryset/suggest_cascading_edits_memoryset_name_or_id_memory_memory_id_cascading_edits_post.py +0 -233
  83. orca_sdk/_generated_api_client/api/memoryset/update_memories_gpu_memoryset_name_or_id_memories_patch.py +0 -216
  84. orca_sdk/_generated_api_client/api/memoryset/update_memory_gpu_memoryset_name_or_id_memory_patch.py +0 -205
  85. orca_sdk/_generated_api_client/api/memoryset/update_memoryset_memoryset_name_or_id_patch.py +0 -183
  86. orca_sdk/_generated_api_client/api/predictive_model/__init__.py +0 -0
  87. orca_sdk/_generated_api_client/api/predictive_model/list_predictive_models_predictive_model_get.py +0 -150
  88. orca_sdk/_generated_api_client/api/pretrained_embedding_model/__init__.py +0 -0
  89. orca_sdk/_generated_api_client/api/pretrained_embedding_model/embed_with_pretrained_model_gpu_pretrained_embedding_model_model_name_embedding_post.py +0 -192
  90. orca_sdk/_generated_api_client/api/pretrained_embedding_model/get_pretrained_embedding_model_pretrained_embedding_model_model_name_get.py +0 -161
  91. orca_sdk/_generated_api_client/api/pretrained_embedding_model/list_pretrained_embedding_models_pretrained_embedding_model_get.py +0 -127
  92. orca_sdk/_generated_api_client/api/regression_model/__init__.py +0 -0
  93. orca_sdk/_generated_api_client/api/regression_model/create_regression_model_gpu_regression_model_post.py +0 -170
  94. 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
  95. orca_sdk/_generated_api_client/api/regression_model/delete_regression_model_regression_model_name_or_id_delete.py +0 -154
  96. orca_sdk/_generated_api_client/api/regression_model/evaluate_regression_model_regression_model_model_name_or_id_evaluation_post.py +0 -183
  97. 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
  98. orca_sdk/_generated_api_client/api/regression_model/get_regression_model_regression_model_name_or_id_get.py +0 -156
  99. orca_sdk/_generated_api_client/api/regression_model/list_regression_model_evaluations_regression_model_model_name_or_id_evaluation_get.py +0 -161
  100. orca_sdk/_generated_api_client/api/regression_model/list_regression_models_regression_model_get.py +0 -127
  101. orca_sdk/_generated_api_client/api/regression_model/predict_score_gpu_regression_model_name_or_id_prediction_post.py +0 -190
  102. orca_sdk/_generated_api_client/api/regression_model/update_regression_model_regression_model_name_or_id_patch.py +0 -183
  103. orca_sdk/_generated_api_client/api/task/__init__.py +0 -0
  104. orca_sdk/_generated_api_client/api/task/abort_task_task_task_id_abort_delete.py +0 -154
  105. orca_sdk/_generated_api_client/api/task/get_task_status_task_task_id_status_get.py +0 -156
  106. orca_sdk/_generated_api_client/api/task/get_task_task_task_id_get.py +0 -156
  107. orca_sdk/_generated_api_client/api/task/list_tasks_task_get.py +0 -293
  108. orca_sdk/_generated_api_client/api/telemetry/__init__.py +0 -0
  109. orca_sdk/_generated_api_client/api/telemetry/count_predictions_telemetry_prediction_count_post.py +0 -168
  110. orca_sdk/_generated_api_client/api/telemetry/drop_feedback_category_with_data_telemetry_feedback_category_name_or_id_delete.py +0 -162
  111. orca_sdk/_generated_api_client/api/telemetry/explain_prediction_telemetry_prediction_prediction_id_explanation_get.py +0 -182
  112. orca_sdk/_generated_api_client/api/telemetry/get_feedback_category_telemetry_feedback_category_name_or_id_get.py +0 -156
  113. orca_sdk/_generated_api_client/api/telemetry/get_prediction_telemetry_prediction_prediction_id_get.py +0 -180
  114. orca_sdk/_generated_api_client/api/telemetry/list_feedback_categories_telemetry_feedback_category_get.py +0 -127
  115. orca_sdk/_generated_api_client/api/telemetry/list_memories_with_feedback_telemetry_memories_post.py +0 -198
  116. orca_sdk/_generated_api_client/api/telemetry/list_predictions_telemetry_prediction_post.py +0 -198
  117. orca_sdk/_generated_api_client/api/telemetry/record_prediction_feedback_telemetry_prediction_feedback_put.py +0 -171
  118. orca_sdk/_generated_api_client/api/telemetry/update_prediction_telemetry_prediction_prediction_id_patch.py +0 -181
  119. orca_sdk/_generated_api_client/client.py +0 -216
  120. orca_sdk/_generated_api_client/errors.py +0 -38
  121. orca_sdk/_generated_api_client/models/__init__.py +0 -295
  122. orca_sdk/_generated_api_client/models/analyze_neighbor_labels_result.py +0 -116
  123. orca_sdk/_generated_api_client/models/api_key_metadata.py +0 -137
  124. orca_sdk/_generated_api_client/models/api_key_metadata_scope_item.py +0 -9
  125. orca_sdk/_generated_api_client/models/base_label_prediction_result.py +0 -130
  126. orca_sdk/_generated_api_client/models/base_model.py +0 -55
  127. orca_sdk/_generated_api_client/models/base_score_prediction_result.py +0 -108
  128. orca_sdk/_generated_api_client/models/body_create_datasource_datasource_post.py +0 -207
  129. orca_sdk/_generated_api_client/models/cascade_edit_suggestions_request.py +0 -154
  130. orca_sdk/_generated_api_client/models/cascading_edit_suggestion.py +0 -92
  131. orca_sdk/_generated_api_client/models/classification_evaluation_request.py +0 -148
  132. orca_sdk/_generated_api_client/models/classification_metrics.py +0 -259
  133. orca_sdk/_generated_api_client/models/classification_model_metadata.py +0 -213
  134. orca_sdk/_generated_api_client/models/classification_prediction_request.py +0 -220
  135. orca_sdk/_generated_api_client/models/clone_memoryset_request.py +0 -170
  136. orca_sdk/_generated_api_client/models/cluster_metrics.py +0 -78
  137. orca_sdk/_generated_api_client/models/column_info.py +0 -145
  138. orca_sdk/_generated_api_client/models/column_type.py +0 -14
  139. orca_sdk/_generated_api_client/models/constraint_violation_error_response.py +0 -80
  140. orca_sdk/_generated_api_client/models/count_predictions_request.py +0 -195
  141. orca_sdk/_generated_api_client/models/create_api_key_request.py +0 -120
  142. orca_sdk/_generated_api_client/models/create_api_key_request_scope_item.py +0 -9
  143. orca_sdk/_generated_api_client/models/create_api_key_response.py +0 -145
  144. orca_sdk/_generated_api_client/models/create_api_key_response_scope_item.py +0 -9
  145. orca_sdk/_generated_api_client/models/create_classification_model_request.py +0 -197
  146. orca_sdk/_generated_api_client/models/create_memoryset_request.py +0 -325
  147. orca_sdk/_generated_api_client/models/create_memoryset_request_index_params.py +0 -66
  148. orca_sdk/_generated_api_client/models/create_memoryset_request_index_type.py +0 -13
  149. orca_sdk/_generated_api_client/models/create_regression_model_request.py +0 -137
  150. orca_sdk/_generated_api_client/models/datasource_metadata.py +0 -156
  151. orca_sdk/_generated_api_client/models/delete_memories_request.py +0 -70
  152. orca_sdk/_generated_api_client/models/delete_memorysets_request.py +0 -70
  153. orca_sdk/_generated_api_client/models/embed_request.py +0 -135
  154. orca_sdk/_generated_api_client/models/embedding_evaluation_payload.py +0 -187
  155. orca_sdk/_generated_api_client/models/embedding_evaluation_request.py +0 -179
  156. orca_sdk/_generated_api_client/models/embedding_evaluation_response.py +0 -158
  157. orca_sdk/_generated_api_client/models/embedding_evaluation_result.py +0 -86
  158. orca_sdk/_generated_api_client/models/embedding_finetuning_method.py +0 -9
  159. orca_sdk/_generated_api_client/models/embedding_model_result.py +0 -114
  160. orca_sdk/_generated_api_client/models/evaluation_response.py +0 -153
  161. orca_sdk/_generated_api_client/models/evaluation_response_classification_metrics.py +0 -140
  162. orca_sdk/_generated_api_client/models/evaluation_response_regression_metrics.py +0 -140
  163. orca_sdk/_generated_api_client/models/feedback_metrics.py +0 -85
  164. orca_sdk/_generated_api_client/models/feedback_type.py +0 -9
  165. orca_sdk/_generated_api_client/models/filter_item.py +0 -231
  166. orca_sdk/_generated_api_client/models/filter_item_field_type_0_item.py +0 -17
  167. orca_sdk/_generated_api_client/models/filter_item_field_type_2_item_type_1.py +0 -20
  168. orca_sdk/_generated_api_client/models/filter_item_op.py +0 -16
  169. orca_sdk/_generated_api_client/models/finetune_embedding_model_request.py +0 -259
  170. orca_sdk/_generated_api_client/models/finetune_embedding_model_request_training_args.py +0 -66
  171. orca_sdk/_generated_api_client/models/finetuned_embedding_model_metadata.py +0 -166
  172. orca_sdk/_generated_api_client/models/get_memories_request.py +0 -70
  173. orca_sdk/_generated_api_client/models/http_validation_error.py +0 -86
  174. orca_sdk/_generated_api_client/models/internal_server_error_response.py +0 -80
  175. orca_sdk/_generated_api_client/models/label_class_metrics.py +0 -108
  176. orca_sdk/_generated_api_client/models/label_prediction_memory_lookup.py +0 -210
  177. orca_sdk/_generated_api_client/models/label_prediction_memory_lookup_metadata.py +0 -68
  178. orca_sdk/_generated_api_client/models/label_prediction_with_memories_and_feedback.py +0 -288
  179. orca_sdk/_generated_api_client/models/labeled_memory.py +0 -186
  180. orca_sdk/_generated_api_client/models/labeled_memory_insert.py +0 -128
  181. orca_sdk/_generated_api_client/models/labeled_memory_insert_metadata.py +0 -68
  182. orca_sdk/_generated_api_client/models/labeled_memory_lookup.py +0 -194
  183. orca_sdk/_generated_api_client/models/labeled_memory_lookup_metadata.py +0 -68
  184. orca_sdk/_generated_api_client/models/labeled_memory_metadata.py +0 -68
  185. orca_sdk/_generated_api_client/models/labeled_memory_metrics.py +0 -246
  186. orca_sdk/_generated_api_client/models/labeled_memory_update.py +0 -171
  187. orca_sdk/_generated_api_client/models/labeled_memory_update_metadata_type_0.py +0 -68
  188. orca_sdk/_generated_api_client/models/labeled_memory_with_feedback_metrics.py +0 -207
  189. orca_sdk/_generated_api_client/models/labeled_memory_with_feedback_metrics_feedback_metrics.py +0 -68
  190. orca_sdk/_generated_api_client/models/labeled_memory_with_feedback_metrics_metadata.py +0 -68
  191. orca_sdk/_generated_api_client/models/list_memories_request.py +0 -104
  192. orca_sdk/_generated_api_client/models/list_predictions_request.py +0 -319
  193. orca_sdk/_generated_api_client/models/lookup_request.py +0 -81
  194. orca_sdk/_generated_api_client/models/lookup_score_metrics.py +0 -94
  195. orca_sdk/_generated_api_client/models/memory_metrics.py +0 -165
  196. orca_sdk/_generated_api_client/models/memory_type.py +0 -9
  197. orca_sdk/_generated_api_client/models/memoryset_analysis_configs.py +0 -212
  198. orca_sdk/_generated_api_client/models/memoryset_analysis_request.py +0 -105
  199. orca_sdk/_generated_api_client/models/memoryset_analysis_response.py +0 -182
  200. orca_sdk/_generated_api_client/models/memoryset_cluster_analysis_config.py +0 -202
  201. orca_sdk/_generated_api_client/models/memoryset_cluster_analysis_config_clustering_method.py +0 -9
  202. orca_sdk/_generated_api_client/models/memoryset_cluster_analysis_config_partitioning_method.py +0 -10
  203. orca_sdk/_generated_api_client/models/memoryset_cluster_metrics.py +0 -100
  204. orca_sdk/_generated_api_client/models/memoryset_duplicate_analysis_config.py +0 -70
  205. orca_sdk/_generated_api_client/models/memoryset_duplicate_metrics.py +0 -70
  206. orca_sdk/_generated_api_client/models/memoryset_label_analysis_config.py +0 -70
  207. orca_sdk/_generated_api_client/models/memoryset_label_metrics.py +0 -116
  208. orca_sdk/_generated_api_client/models/memoryset_metadata.py +0 -291
  209. orca_sdk/_generated_api_client/models/memoryset_metadata_index_params.py +0 -55
  210. orca_sdk/_generated_api_client/models/memoryset_metadata_index_type.py +0 -13
  211. orca_sdk/_generated_api_client/models/memoryset_metrics.py +0 -232
  212. orca_sdk/_generated_api_client/models/memoryset_neighbor_analysis_config.py +0 -83
  213. orca_sdk/_generated_api_client/models/memoryset_neighbor_metrics.py +0 -76
  214. orca_sdk/_generated_api_client/models/memoryset_neighbor_metrics_lookup_score_metrics.py +0 -68
  215. orca_sdk/_generated_api_client/models/memoryset_projection_analysis_config.py +0 -79
  216. orca_sdk/_generated_api_client/models/memoryset_projection_metrics.py +0 -55
  217. orca_sdk/_generated_api_client/models/memoryset_update.py +0 -101
  218. orca_sdk/_generated_api_client/models/not_found_error_response.py +0 -100
  219. orca_sdk/_generated_api_client/models/not_found_error_response_resource_type_0.py +0 -22
  220. orca_sdk/_generated_api_client/models/paginated_union_labeled_memory_with_feedback_metrics_scored_memory_with_feedback_metrics.py +0 -135
  221. orca_sdk/_generated_api_client/models/pr_curve.py +0 -86
  222. orca_sdk/_generated_api_client/models/prediction_feedback.py +0 -157
  223. orca_sdk/_generated_api_client/models/prediction_feedback_category.py +0 -115
  224. orca_sdk/_generated_api_client/models/prediction_feedback_request.py +0 -122
  225. orca_sdk/_generated_api_client/models/prediction_feedback_result.py +0 -102
  226. orca_sdk/_generated_api_client/models/prediction_sort_item_item_type_0.py +0 -10
  227. orca_sdk/_generated_api_client/models/prediction_sort_item_item_type_1.py +0 -9
  228. orca_sdk/_generated_api_client/models/predictive_model_update.py +0 -91
  229. orca_sdk/_generated_api_client/models/pretrained_embedding_model_metadata.py +0 -107
  230. orca_sdk/_generated_api_client/models/pretrained_embedding_model_name.py +0 -17
  231. orca_sdk/_generated_api_client/models/rac_head_type.py +0 -11
  232. orca_sdk/_generated_api_client/models/rar_head_type.py +0 -8
  233. orca_sdk/_generated_api_client/models/regression_evaluation_request.py +0 -148
  234. orca_sdk/_generated_api_client/models/regression_metrics.py +0 -172
  235. orca_sdk/_generated_api_client/models/regression_model_metadata.py +0 -177
  236. orca_sdk/_generated_api_client/models/regression_prediction_request.py +0 -195
  237. orca_sdk/_generated_api_client/models/roc_curve.py +0 -86
  238. orca_sdk/_generated_api_client/models/score_prediction_memory_lookup.py +0 -196
  239. orca_sdk/_generated_api_client/models/score_prediction_memory_lookup_metadata.py +0 -68
  240. orca_sdk/_generated_api_client/models/score_prediction_with_memories_and_feedback.py +0 -252
  241. orca_sdk/_generated_api_client/models/scored_memory.py +0 -172
  242. orca_sdk/_generated_api_client/models/scored_memory_insert.py +0 -128
  243. orca_sdk/_generated_api_client/models/scored_memory_insert_metadata.py +0 -68
  244. orca_sdk/_generated_api_client/models/scored_memory_lookup.py +0 -180
  245. orca_sdk/_generated_api_client/models/scored_memory_lookup_metadata.py +0 -68
  246. orca_sdk/_generated_api_client/models/scored_memory_metadata.py +0 -68
  247. orca_sdk/_generated_api_client/models/scored_memory_update.py +0 -171
  248. orca_sdk/_generated_api_client/models/scored_memory_update_metadata_type_0.py +0 -68
  249. orca_sdk/_generated_api_client/models/scored_memory_with_feedback_metrics.py +0 -193
  250. orca_sdk/_generated_api_client/models/scored_memory_with_feedback_metrics_feedback_metrics.py +0 -68
  251. orca_sdk/_generated_api_client/models/scored_memory_with_feedback_metrics_metadata.py +0 -68
  252. orca_sdk/_generated_api_client/models/service_unavailable_error_response.py +0 -80
  253. orca_sdk/_generated_api_client/models/task.py +0 -198
  254. orca_sdk/_generated_api_client/models/task_status.py +0 -14
  255. orca_sdk/_generated_api_client/models/task_status_info.py +0 -133
  256. orca_sdk/_generated_api_client/models/telemetry_field_type_0_item_type_2.py +0 -9
  257. orca_sdk/_generated_api_client/models/telemetry_filter_item.py +0 -205
  258. orca_sdk/_generated_api_client/models/telemetry_filter_item_op.py +0 -15
  259. orca_sdk/_generated_api_client/models/telemetry_memories_request.py +0 -181
  260. orca_sdk/_generated_api_client/models/telemetry_sort_options.py +0 -173
  261. orca_sdk/_generated_api_client/models/telemetry_sort_options_direction.py +0 -9
  262. orca_sdk/_generated_api_client/models/unauthenticated_error_response.py +0 -72
  263. orca_sdk/_generated_api_client/models/unauthorized_error_response.py +0 -80
  264. orca_sdk/_generated_api_client/models/update_prediction_request.py +0 -133
  265. orca_sdk/_generated_api_client/models/validation_error.py +0 -99
  266. orca_sdk/_generated_api_client/py.typed +0 -1
  267. orca_sdk/_generated_api_client/types.py +0 -56
  268. orca_sdk-0.0.96.dist-info/RECORD +0 -278
  269. {orca_sdk-0.0.96.dist-info → orca_sdk-0.0.98.dist-info}/WHEEL +0 -0
orca_sdk/memoryset.py CHANGED
@@ -8,88 +8,43 @@ from typing import Any, Generic, Iterable, Literal, Self, TypeVar, cast, overloa
8
8
 
9
9
  import pandas as pd
10
10
  import pyarrow as pa
11
- from attrs import fields
12
11
  from datasets import Dataset
13
12
  from torch.utils.data import DataLoader as TorchDataLoader
14
13
  from torch.utils.data import Dataset as TorchDataset
15
14
 
16
- from ._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 ScoredMemoryInsert, ScoredMemoryInsertMetadata
77
- from ._generated_api_client.models import (
78
- ScoredMemoryLookup as ScoredMemoryLookupResponse,
79
36
  )
80
- 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 (
81
41
  ScoredMemoryUpdate,
82
- ScoredMemoryUpdateMetadataType0,
83
42
  ScoredMemoryWithFeedbackMetrics,
84
43
  ScorePredictionMemoryLookup,
85
44
  TelemetryFilterItem,
86
- TelemetryFilterItemOp,
87
- TelemetryMemoriesRequest,
88
45
  TelemetrySortOptions,
89
- TelemetrySortOptionsDirection,
46
+ orca_api,
90
47
  )
91
- from ._generated_api_client.types import UNSET as CLIENT_UNSET
92
- from ._utils.common import UNSET, CreateMode, DropMode
93
48
  from .datasource import Datasource
94
49
  from .embedding_model import (
95
50
  FinetunedEmbeddingModel,
@@ -151,6 +106,10 @@ FORBIDDEN_METADATA_COLUMN_NAMES = {
151
106
  }
152
107
 
153
108
 
109
+ def _is_metric_column(column: str):
110
+ return column in ["feedback_metrics", "lookup"]
111
+
112
+
154
113
  def _parse_filter_item_from_tuple(input: FilterItemTuple) -> FilterItem | TelemetryFilterItem:
155
114
  field = input[0].split(".")
156
115
  if (
@@ -158,9 +117,11 @@ def _parse_filter_item_from_tuple(input: FilterItemTuple) -> FilterItem | Teleme
158
117
  and field[0] not in DEFAULT_COLUMN_NAMES | TYPE_SPECIFIC_COLUMN_NAMES | FORBIDDEN_METADATA_COLUMN_NAMES
159
118
  ):
160
119
  field = ["metadata", field[0]]
161
- op = FilterItemOp(input[1])
120
+ op = input[1]
162
121
  value = input[2]
163
- if field[0] in ["feedback_metrics", "lookup"]:
122
+ if isinstance(value, datetime):
123
+ value = value.isoformat()
124
+ if _is_metric_column(field[0]):
164
125
  if not (
165
126
  (isinstance(value, list) and all(isinstance(v, float) or isinstance(v, int) for v in value))
166
127
  or isinstance(value, float)
@@ -173,9 +134,11 @@ def _parse_filter_item_from_tuple(input: FilterItemTuple) -> FilterItem | Teleme
173
134
  )
174
135
  elif field[0] == "lookup" and (len(field) != 2 or field[1] != "count"):
175
136
  raise ValueError("Lookup filters must follow the format `lookup.count`")
176
- op = TelemetryFilterItemOp(op)
177
-
178
- 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)
179
142
 
180
143
  return FilterItem(field=field, op=op, value=value)
181
144
 
@@ -201,7 +164,7 @@ def _parse_sort_item_from_tuple(
201
164
  raise ValueError("Lookup must follow the format `lookup.count`")
202
165
  if field[1] != "count":
203
166
  raise ValueError("Lookup can only be sorted on count")
204
- return TelemetrySortOptions(field=field, direction=TelemetrySortOptionsDirection(input[1]))
167
+ return TelemetrySortOptions(field=field, direction=input[1])
205
168
 
206
169
 
207
170
  def _parse_memory_insert(memory: dict[str, Any], type: MemoryType) -> LabeledMemoryInsert | ScoredMemoryInsert:
@@ -212,45 +175,26 @@ def _parse_memory_insert(memory: dict[str, Any], type: MemoryType) -> LabeledMem
212
175
  if source_id and not isinstance(source_id, str):
213
176
  raise ValueError("Memory source_id must be a string")
214
177
  match type:
215
- case MemoryType.LABELED:
178
+ case "LABELED":
216
179
  label = memory.get("label")
217
180
  if not isinstance(label, int):
218
181
  raise ValueError("Memory label must be an integer")
219
- metadata = LabeledMemoryInsertMetadata.from_dict(
220
- {k: v for k, v in memory.items() if k not in DEFAULT_COLUMN_NAMES | {"label"}}
221
- )
182
+ metadata = {k: v for k, v in memory.items() if k not in DEFAULT_COLUMN_NAMES | {"label"}}
222
183
  if any(k in metadata for k in FORBIDDEN_METADATA_COLUMN_NAMES):
223
184
  raise ValueError(
224
185
  f"The following column names are reserved: {', '.join(FORBIDDEN_METADATA_COLUMN_NAMES)}"
225
186
  )
226
- return LabeledMemoryInsert(value=value, label=label, source_id=source_id, metadata=metadata)
227
- case MemoryType.SCORED:
187
+ return {"value": value, "label": label, "source_id": source_id, "metadata": metadata}
188
+ case "SCORED":
228
189
  score = memory.get("score")
229
190
  if not isinstance(score, (int, float)):
230
191
  raise ValueError("Memory score must be a number")
231
- metadata = ScoredMemoryInsertMetadata.from_dict(
232
- {k: v for k, v in memory.items() if k not in DEFAULT_COLUMN_NAMES | {"score"}}
233
- )
192
+ metadata = {k: v for k, v in memory.items() if k not in DEFAULT_COLUMN_NAMES | {"score"}}
234
193
  if any(k in metadata for k in FORBIDDEN_METADATA_COLUMN_NAMES):
235
194
  raise ValueError(
236
195
  f"The following column names are reserved: {', '.join(FORBIDDEN_METADATA_COLUMN_NAMES)}"
237
196
  )
238
- return ScoredMemoryInsert(value=value, score=score, source_id=source_id, metadata=metadata)
239
-
240
-
241
- @overload
242
- def _parse_memory_update(update: dict[str, Any], type: Literal[MemoryType.LABELED]) -> LabeledMemoryUpdate:
243
- pass
244
-
245
-
246
- @overload
247
- def _parse_memory_update(update: dict[str, Any], type: Literal[MemoryType.SCORED]) -> ScoredMemoryUpdate:
248
- pass
249
-
250
-
251
- @overload
252
- def _parse_memory_update(update: dict[str, Any], type: MemoryType) -> ScoredMemoryUpdate | LabeledMemoryUpdate:
253
- pass
197
+ return {"value": value, "score": score, "source_id": source_id, "metadata": metadata}
254
198
 
255
199
 
256
200
  def _parse_memory_update(update: dict[str, Any], type: MemoryType) -> LabeledMemoryUpdate | ScoredMemoryUpdate:
@@ -259,41 +203,42 @@ def _parse_memory_update(update: dict[str, Any], type: MemoryType) -> LabeledMem
259
203
  memory_id = update["memory_id"]
260
204
  if not isinstance(memory_id, str):
261
205
  raise ValueError("memory_id must be a string")
262
- value = update.get("value", CLIENT_UNSET)
263
- if value is not CLIENT_UNSET and not isinstance(value, str):
264
- raise ValueError("value must be a string or unset")
265
- source_id = update.get("source_id", CLIENT_UNSET)
266
- if source_id is not CLIENT_UNSET and not isinstance(source_id, str):
267
- 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"]
268
215
  match type:
269
- case MemoryType.LABELED:
270
- label = update.get("label", CLIENT_UNSET)
271
- if label is not CLIENT_UNSET and not isinstance(label, int):
272
- raise ValueError("label must be an integer or unset")
273
- metadata = LabeledMemoryUpdateMetadataType0.from_dict(
274
- {k: v for k, v in update.items() if k not in DEFAULT_COLUMN_NAMES | {"memory_id", "label"}}
275
- )
216
+ case "LABELED":
217
+ payload = cast(LabeledMemoryUpdate, payload)
218
+ if "label" in update:
219
+ if not isinstance(update["label"], int):
220
+ raise ValueError("label must be an integer or unset")
221
+ payload["label"] = update["label"]
222
+ metadata = {k: v for k, v in update.items() if k not in DEFAULT_COLUMN_NAMES | {"memory_id", "label"}}
276
223
  if any(k in metadata for k in FORBIDDEN_METADATA_COLUMN_NAMES):
277
224
  raise ValueError(
278
225
  f"Cannot update the following metadata keys: {', '.join(FORBIDDEN_METADATA_COLUMN_NAMES)}"
279
226
  )
280
- return LabeledMemoryUpdate(
281
- memory_id=memory_id, value=value, label=label, source_id=source_id, metadata=metadata
282
- )
283
- case MemoryType.SCORED:
284
- score = update.get("score", CLIENT_UNSET)
285
- if score is not CLIENT_UNSET and not isinstance(score, (int, float)):
286
- raise ValueError("score must be a number or unset")
287
- metadata = ScoredMemoryUpdateMetadataType0.from_dict(
288
- {k: v for k, v in update.items() if k not in DEFAULT_COLUMN_NAMES | {"memory_id", "score"}}
289
- )
227
+ payload["metadata"] = metadata
228
+ return payload
229
+ case "SCORED":
230
+ payload = cast(ScoredMemoryUpdate, payload)
231
+ if "score" in update:
232
+ if not isinstance(update["score"], (int, float)):
233
+ raise ValueError("score must be a number or unset")
234
+ payload["score"] = update["score"]
235
+ metadata = {k: v for k, v in update.items() if k not in DEFAULT_COLUMN_NAMES | {"memory_id", "score"}}
290
236
  if any(k in metadata for k in FORBIDDEN_METADATA_COLUMN_NAMES):
291
237
  raise ValueError(
292
238
  f"Cannot update the following metadata keys: {', '.join(FORBIDDEN_METADATA_COLUMN_NAMES)}"
293
239
  )
294
- return ScoredMemoryUpdate(
295
- memory_id=memory_id, value=value, score=score, source_id=source_id, metadata=metadata
296
- )
240
+ payload["metadata"] = metadata
241
+ return cast(ScoredMemoryUpdate, payload)
297
242
 
298
243
 
299
244
  class _Memory(ABC):
@@ -303,7 +248,7 @@ class _Memory(ABC):
303
248
  created_at: datetime
304
249
  updated_at: datetime
305
250
  metadata: dict[str, str | float | int | bool | None]
306
- metrics: dict[str, Any]
251
+ metrics: MemoryMetrics
307
252
  memory_id: str
308
253
  memory_version: int
309
254
  feedback_metrics: dict[str, Any]
@@ -326,19 +271,17 @@ class _Memory(ABC):
326
271
  ):
327
272
  # for internal use only, do not document
328
273
  self.memoryset_id = memoryset_id
329
- self.memory_id = memory.memory_id
330
- self.memory_version = memory.memory_version
331
- self.value = memory.value
332
- self.embedding = memory.embedding
333
- self.source_id = memory.source_id
334
- self.created_at = memory.created_at
335
- self.updated_at = memory.updated_at
336
- self.metadata = memory.metadata.to_dict()
337
- self.metrics = memory.metrics.to_dict() if memory.metrics else {}
338
- self.feedback_metrics = (
339
- getattr(memory, "feedback_metrics").to_dict() if hasattr(memory, "feedback_metrics") else {}
340
- )
341
- self.lookup_count = getattr(memory, "lookup_count", 0)
274
+ self.memory_id = memory["memory_id"]
275
+ self.memory_version = memory["memory_version"]
276
+ self.value = cast(str, memory["value"])
277
+ self.embedding = memory["embedding"]
278
+ self.source_id = memory["source_id"]
279
+ self.created_at = datetime.fromisoformat(memory["created_at"])
280
+ self.updated_at = datetime.fromisoformat(memory["updated_at"])
281
+ self.metadata = memory["metadata"]
282
+ self.metrics = memory["metrics"] if "metrics" in memory else {}
283
+ self.feedback_metrics = memory.get("feedback_metrics", {}) or {}
284
+ self.lookup_count = memory.get("lookup_count", 0)
342
285
 
343
286
  def __getattr__(self, key: str) -> Any:
344
287
  if key.startswith("__") or key not in self.metadata:
@@ -368,9 +311,10 @@ class _Memory(ABC):
368
311
  Returns:
369
312
  The updated memory
370
313
  """
371
- response = update_memory_gpu(
372
- self.memoryset_id,
373
- 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(
374
318
  {"memory_id": self.memory_id}
375
319
  | ({"value": value} if value is not UNSET else {})
376
320
  | ({"source_id": source_id} if source_id is not UNSET else {})
@@ -381,6 +325,25 @@ class _Memory(ABC):
381
325
  self.__dict__.update(self.__class__(self.memoryset_id, response).__dict__)
382
326
  return self
383
327
 
328
+ def to_dict(self) -> dict[str, Any]:
329
+ """
330
+ Convert the memory to a dictionary
331
+ """
332
+ return {
333
+ "value": self.value,
334
+ "embedding": self.embedding,
335
+ "source_id": self.source_id,
336
+ "created_at": self.created_at,
337
+ "updated_at": self.updated_at,
338
+ "metadata": self.metadata,
339
+ "metrics": self.metrics,
340
+ "memory_id": self.memory_id,
341
+ "memory_version": self.memory_version,
342
+ "feedback_metrics": self.feedback_metrics,
343
+ "lookup_count": self.lookup_count,
344
+ "memory_type": self.memory_type,
345
+ }
346
+
384
347
 
385
348
  class LabeledMemory(_Memory):
386
349
  """
@@ -409,7 +372,7 @@ class LabeledMemory(_Memory):
409
372
 
410
373
  label: int
411
374
  label_name: str | None
412
- memory_type = MemoryType.LABELED
375
+ memory_type = "LABELED"
413
376
 
414
377
  def __init__(
415
378
  self,
@@ -423,8 +386,8 @@ class LabeledMemory(_Memory):
423
386
  ):
424
387
  # for internal use only, do not document
425
388
  super().__init__(memoryset_id, memory)
426
- self.label = memory.label
427
- self.label_name = memory.label_name
389
+ self.label = memory["label"]
390
+ self.label_name = memory["label_name"]
428
391
 
429
392
  def __repr__(self) -> str:
430
393
  return (
@@ -464,6 +427,15 @@ class LabeledMemory(_Memory):
464
427
  super().update(value=value, label=label, source_id=source_id, **metadata)
465
428
  return self
466
429
 
430
+ def to_dict(self) -> dict[str, Any]:
431
+ """
432
+ Convert the memory to a dictionary
433
+ """
434
+ super_dict = super().to_dict()
435
+ super_dict["label"] = self.label
436
+ super_dict["label_name"] = self.label_name
437
+ return super_dict
438
+
467
439
 
468
440
  class LabeledMemoryLookup(LabeledMemory):
469
441
  """
@@ -499,10 +471,8 @@ class LabeledMemoryLookup(LabeledMemory):
499
471
  def __init__(self, memoryset_id: str, memory_lookup: LabeledMemoryLookupResponse | LabelPredictionMemoryLookup):
500
472
  # for internal use only, do not document
501
473
  super().__init__(memoryset_id, memory_lookup)
502
- self.lookup_score = memory_lookup.lookup_score
503
- self.attention_weight = (
504
- memory_lookup.attention_weight if isinstance(memory_lookup, LabelPredictionMemoryLookup) else None
505
- )
474
+ self.lookup_score = memory_lookup["lookup_score"]
475
+ self.attention_weight = memory_lookup["attention_weight"] if "attention_weight" in memory_lookup else None
506
476
 
507
477
  def __repr__(self) -> str:
508
478
  return (
@@ -540,7 +510,7 @@ class ScoredMemory(_Memory):
540
510
  """
541
511
 
542
512
  score: float
543
- memory_type = MemoryType.SCORED
513
+ memory_type = "SCORED"
544
514
 
545
515
  def __init__(
546
516
  self,
@@ -554,7 +524,7 @@ class ScoredMemory(_Memory):
554
524
  ):
555
525
  # for internal use only, do not document
556
526
  super().__init__(memoryset_id, memory)
557
- self.score = memory.score
527
+ self.score = memory["score"]
558
528
 
559
529
  def __repr__(self) -> str:
560
530
  return (
@@ -594,6 +564,14 @@ class ScoredMemory(_Memory):
594
564
  super().update(value=value, score=score, source_id=source_id, **metadata)
595
565
  return self
596
566
 
567
+ def to_dict(self) -> dict[str, Any]:
568
+ """
569
+ Convert the memory to a dictionary
570
+ """
571
+ super_dict = super().to_dict()
572
+ super_dict["score"] = self.score
573
+ return super_dict
574
+
597
575
 
598
576
  class ScoredMemoryLookup(ScoredMemory):
599
577
  """
@@ -625,10 +603,8 @@ class ScoredMemoryLookup(ScoredMemory):
625
603
  def __init__(self, memoryset_id: str, memory_lookup: ScoredMemoryLookupResponse | ScorePredictionMemoryLookup):
626
604
  # for internal use only, do not document
627
605
  super().__init__(memoryset_id, memory_lookup)
628
- self.lookup_score = memory_lookup.lookup_score
629
- self.attention_weight = (
630
- memory_lookup.attention_weight if isinstance(memory_lookup, ScorePredictionMemoryLookup) else None
631
- )
606
+ self.lookup_score = memory_lookup["lookup_score"]
607
+ self.attention_weight = memory_lookup["attention_weight"] if "attention_weight" in memory_lookup else None
632
608
 
633
609
  def __repr__(self) -> str:
634
610
  return (
@@ -674,23 +650,23 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
674
650
 
675
651
  def __init__(self, metadata: MemorysetMetadata):
676
652
  # for internal use only, do not document
677
- if metadata.pretrained_embedding_model_name:
678
- self.embedding_model = PretrainedEmbeddingModel._get(metadata.pretrained_embedding_model_name)
679
- elif metadata.finetuned_embedding_model_id:
680
- 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"])
681
657
  else:
682
658
  raise ValueError("Either pretrained_embedding_model_name or finetuned_embedding_model_id must be provided")
683
- self.id = metadata.id
684
- self.name = metadata.name
685
- self.description = metadata.description
686
- self.length = metadata.length
687
- self.created_at = metadata.created_at
688
- self.updated_at = metadata.updated_at
689
- 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"])
690
666
  self._last_refresh = datetime.now()
691
- self.index_type = metadata.index_type.value
692
- self.index_params = metadata.index_params.to_dict()
693
- 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"]
694
670
 
695
671
  def __eq__(self, other) -> bool:
696
672
  return isinstance(other, _Memoryset) and self.id == other.id
@@ -719,6 +695,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
719
695
  description: str | None = None,
720
696
  label_names: list[str] | None = None,
721
697
  max_seq_length_override: int | None = None,
698
+ prompt: str | None = None,
722
699
  remove_duplicates: bool = True,
723
700
  index_type: IndexType = "FLAT",
724
701
  index_params: dict[str, Any] = {},
@@ -742,6 +719,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
742
719
  description: str | None = None,
743
720
  label_names: list[str] | None = None,
744
721
  max_seq_length_override: int | None = None,
722
+ prompt: str | None = None,
745
723
  remove_duplicates: bool = True,
746
724
  index_type: IndexType = "FLAT",
747
725
  index_params: dict[str, Any] = {},
@@ -764,6 +742,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
764
742
  description: str | None = None,
765
743
  label_names: list[str] | None = None,
766
744
  max_seq_length_override: int | None = None,
745
+ prompt: str | None = None,
767
746
  remove_duplicates: bool = True,
768
747
  index_type: IndexType = "FLAT",
769
748
  index_params: dict[str, Any] = {},
@@ -797,6 +776,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
797
776
  max_seq_length_override: Maximum sequence length of values in the memoryset, if the
798
777
  value is longer than this it will be truncated, will default to the model's max
799
778
  sequence length if not provided
779
+ prompt: Optional prompt to use when embedding documents/memories for storage
800
780
  remove_duplicates: Whether to remove duplicates from the datasource before inserting
801
781
  into the memoryset
802
782
  index_type: Type of vector index to use for the memoryset, defaults to `"FLAT"`. Valid
@@ -829,29 +809,30 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
829
809
  raise ValueError(f"Memoryset with name {name} already exists with a different {attribute}.")
830
810
  return existing
831
811
 
832
- response = create_memoryset(
833
- body=CreateMemorysetRequest(
834
- name=name,
835
- description=description,
836
- datasource_id=datasource.id,
837
- datasource_label_column=label_column,
838
- datasource_score_column=score_column,
839
- datasource_value_column=value_column,
840
- datasource_source_id_column=source_id_column,
841
- pretrained_embedding_model_name=(
842
- embedding_model._model_name if isinstance(embedding_model, PretrainedEmbeddingModel) else None
843
- ),
844
- finetuned_embedding_model_id=(
845
- embedding_model.id if isinstance(embedding_model, FinetunedEmbeddingModel) else None
846
- ),
847
- label_names=label_names,
848
- max_seq_length_override=max_seq_length_override,
849
- remove_duplicates=remove_duplicates,
850
- index_type=CreateMemorysetRequestIndexType[index_type],
851
- index_params=CreateMemorysetRequestIndexParams.from_dict(index_params),
852
- ),
853
- )
854
- 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"]))
855
836
  return job if background else job.result()
856
837
 
857
838
  @overload
@@ -1272,7 +1253,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1272
1253
  Raises:
1273
1254
  LookupError: If the memoryset does not exist
1274
1255
  """
1275
- metadata = get_memoryset(name)
1256
+ metadata = orca_api.GET("/memoryset/{name_or_id}", params={"name_or_id": name})
1276
1257
  return cls(metadata)
1277
1258
 
1278
1259
  @classmethod
@@ -1300,7 +1281,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1300
1281
  Returns:
1301
1282
  List of handles to all memorysets in the OrcaCloud
1302
1283
  """
1303
- return [cls(metadata) for metadata in list_memorysets(type=cls.memory_type)]
1284
+ return [cls(metadata) for metadata in orca_api.GET("/memoryset", params={"type": cls.memory_type})]
1304
1285
 
1305
1286
  @classmethod
1306
1287
  def drop(cls, name_or_id: str, if_not_exists: DropMode = "error"):
@@ -1316,7 +1297,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1316
1297
  LookupError: If the memoryset does not exist and if_not_exists is `"error"`
1317
1298
  """
1318
1299
  try:
1319
- delete_memoryset(name_or_id)
1300
+ orca_api.DELETE("/memoryset/{name_or_id}", params={"name_or_id": name_or_id})
1320
1301
  logging.info(f"Deleted memoryset {name_or_id}")
1321
1302
  except LookupError:
1322
1303
  if if_not_exists == "error":
@@ -1334,14 +1315,15 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1334
1315
  name: Value to set for the name
1335
1316
  label_names: Value to replace existing label names with
1336
1317
  """
1337
- update_memoryset(
1338
- self.id,
1339
- body=MemorysetUpdate(
1340
- name=name if name is not UNSET else CLIENT_UNSET,
1341
- description=description if description is not UNSET else CLIENT_UNSET,
1342
- label_names=label_names if label_names is not UNSET else CLIENT_UNSET,
1343
- ),
1344
- )
1318
+ payload: MemorysetUpdate = {}
1319
+ if name is not UNSET:
1320
+ payload["name"] = name
1321
+ if description is not UNSET:
1322
+ payload["description"] = description
1323
+ if label_names is not UNSET:
1324
+ payload["label_names"] = label_names
1325
+
1326
+ orca_api.PATCH("/memoryset/{name_or_id}", params={"name_or_id": self.id}, json=payload)
1345
1327
  self.refresh()
1346
1328
 
1347
1329
  @overload
@@ -1351,6 +1333,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1351
1333
  *,
1352
1334
  embedding_model: PretrainedEmbeddingModel | FinetunedEmbeddingModel | None = None,
1353
1335
  max_seq_length_override: int | None = None,
1336
+ prompt: str | None = None,
1354
1337
  if_exists: CreateMode = "error",
1355
1338
  background: Literal[True],
1356
1339
  ) -> Job[Self]:
@@ -1363,6 +1346,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1363
1346
  *,
1364
1347
  embedding_model: PretrainedEmbeddingModel | FinetunedEmbeddingModel | None = None,
1365
1348
  max_seq_length_override: int | None = None,
1349
+ prompt: str | None = None,
1366
1350
  if_exists: CreateMode = "error",
1367
1351
  background: Literal[False] = False,
1368
1352
  ) -> Self:
@@ -1373,7 +1357,8 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1373
1357
  name: str,
1374
1358
  *,
1375
1359
  embedding_model: PretrainedEmbeddingModel | FinetunedEmbeddingModel | None = None,
1376
- max_seq_length_override: int | None = None,
1360
+ max_seq_length_override: int | None = UNSET,
1361
+ prompt: str | None = None,
1377
1362
  if_exists: CreateMode = "error",
1378
1363
  background: bool = False,
1379
1364
  ) -> Self | Job[Self]:
@@ -1385,6 +1370,10 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1385
1370
  embedding_model: Optional new embedding model to use for re-embedding the memory values
1386
1371
  value is longer than this it will be truncated, will default to the model's max
1387
1372
  sequence length if not provided
1373
+ document_prompt_override: Optional custom document prompt to use for the cloned memoryset.
1374
+ If not provided, will use the source memoryset's document prompt.
1375
+ query_prompt_override: Optional custom query prompt to use for the cloned memoryset.
1376
+ If not provided, will use the source memoryset's query prompt.
1388
1377
  if_exists: What to do if a memoryset with the same name already exists, defaults to
1389
1378
  `"error"`. Other option is `"open"` to open the existing memoryset.
1390
1379
 
@@ -1399,6 +1388,13 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1399
1388
  >>> new_memoryset = memoryset.clone(
1400
1389
  ... "my_memoryset_finetuned", embedding_model=finetuned_embedding_model,
1401
1390
  ... )
1391
+
1392
+ >>> # Clone with custom prompts
1393
+ >>> new_memoryset = memoryset.clone(
1394
+ ... "my_memoryset_with_prompts",
1395
+ ... document_prompt_override="Represent this document for retrieval:",
1396
+ ... query_prompt_override="Represent this query for retrieval:",
1397
+ ... )
1402
1398
  """
1403
1399
  if self.exists(name):
1404
1400
  if if_exists == "error":
@@ -1409,23 +1405,20 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1409
1405
  if locals()[attribute] is not None and locals()[attribute] != getattr(existing, attribute):
1410
1406
  raise ValueError(f"Memoryset with name {name} already exists with a different {attribute}.")
1411
1407
  return existing
1412
-
1413
- metadata = clone_memoryset(
1414
- self.id,
1415
- body=CloneMemorysetRequest(
1416
- name=name,
1417
- pretrained_embedding_model_name=(
1418
- embedding_model._model_name if isinstance(embedding_model, PretrainedEmbeddingModel) else None
1419
- ),
1420
- finetuned_embedding_model_id=(
1421
- embedding_model.id if isinstance(embedding_model, FinetunedEmbeddingModel) else None
1422
- ),
1423
- max_seq_length_override=max_seq_length_override,
1424
- ),
1425
- )
1408
+ payload: CloneMemorysetRequest = {"name": name}
1409
+ if max_seq_length_override is not UNSET:
1410
+ payload["max_seq_length_override"] = max_seq_length_override
1411
+ if prompt is not None:
1412
+ payload["prompt"] = prompt
1413
+ if isinstance(embedding_model, PretrainedEmbeddingModel):
1414
+ payload["pretrained_embedding_model_name"] = embedding_model.name
1415
+ elif isinstance(embedding_model, FinetunedEmbeddingModel):
1416
+ payload["finetuned_embedding_model_name_or_id"] = embedding_model.id
1417
+
1418
+ metadata = orca_api.POST("/memoryset/{name_or_id}/clone", params={"name_or_id": self.id}, json=payload)
1426
1419
  job = Job(
1427
- metadata.insertion_task_id,
1428
- lambda: self.open(metadata.id),
1420
+ metadata["insertion_task_id"],
1421
+ lambda: self.open(metadata["id"]),
1429
1422
  )
1430
1423
  return job if background else job.result()
1431
1424
 
@@ -1503,20 +1496,24 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1503
1496
  raise ValueError(f"Invalid index type: {type(index)}")
1504
1497
 
1505
1498
  @overload
1506
- def search(self, query: str, *, count: int = 1) -> list[MemoryLookupT]:
1499
+ def search(self, query: str, *, count: int = 1, prompt: str | None = None) -> list[MemoryLookupT]:
1507
1500
  pass
1508
1501
 
1509
1502
  @overload
1510
- def search(self, query: list[str], *, count: int = 1) -> list[list[MemoryLookupT]]:
1503
+ def search(self, query: list[str], *, count: int = 1, prompt: str | None = None) -> list[list[MemoryLookupT]]:
1511
1504
  pass
1512
1505
 
1513
- def search(self, query: str | list[str], *, count: int = 1) -> list[MemoryLookupT] | list[list[MemoryLookupT]]:
1506
+ def search(
1507
+ self, query: str | list[str], *, count: int = 1, prompt: str | None = None
1508
+ ) -> list[MemoryLookupT] | list[list[MemoryLookupT]]:
1514
1509
  """
1515
1510
  Search for memories that are semantically similar to the query
1516
1511
 
1517
1512
  Params:
1518
1513
  query: Query to lookup memories in the memoryset, can be a single query or a list
1519
1514
  count: Number of memories to return for each query
1515
+ prompt: Optional prompt for query embedding during search.
1516
+ If not provided, the memoryset's default query prompt will be used if available.
1520
1517
 
1521
1518
  Returns:
1522
1519
  List of memories from the memoryset that match the query. If a single query is provided,
@@ -1531,6 +1528,13 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1531
1528
  LabeledMemoryLookup({ label: <positive: 1>, value: 'I am content' }),
1532
1529
  ]
1533
1530
 
1531
+ Search with custom query prompt for instruction-following models:
1532
+ >>> memoryset.search("I am happy", count=2, query_prompt="Represent this query for sentiment retrieval:")
1533
+ [
1534
+ LabeledMemoryLookup({ label: <positive: 1>, value: 'I am happy' }),
1535
+ LabeledMemoryLookup({ label: <positive: 1>, value: 'I am content' }),
1536
+ ]
1537
+
1534
1538
  Search for similar memories for multiple queries:
1535
1539
  >>> memoryset.search(["I am happy", "I am sad"], count=1)
1536
1540
  [
@@ -1542,9 +1546,14 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1542
1546
  ],
1543
1547
  ]
1544
1548
  """
1545
- response = memoryset_lookup_gpu(
1546
- name_or_id=self.id,
1547
- body=LookupRequest(query=query if isinstance(query, list) else [query], count=count),
1549
+ response = orca_api.POST(
1550
+ "/gpu/memoryset/{name_or_id}/lookup",
1551
+ params={"name_or_id": self.id},
1552
+ json={
1553
+ "query": query if isinstance(query, list) else [query],
1554
+ "count": count,
1555
+ "prompt": prompt,
1556
+ },
1548
1557
  )
1549
1558
  lookups = [
1550
1559
  [
@@ -1552,7 +1561,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1552
1561
  MemoryLookupT,
1553
1562
  (
1554
1563
  LabeledMemoryLookup(self.id, lookup_response)
1555
- if isinstance(lookup_response, LabeledMemoryLookupResponse)
1564
+ if "label" in lookup_response
1556
1565
  else ScoredMemoryLookup(self.id, lookup_response)
1557
1566
  ),
1558
1567
  )
@@ -1594,50 +1603,70 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1594
1603
  ]
1595
1604
 
1596
1605
  if with_feedback_metrics:
1606
+ response = orca_api.POST(
1607
+ "/telemetry/memories",
1608
+ json={
1609
+ "memoryset_id": self.id,
1610
+ "offset": offset,
1611
+ "limit": limit,
1612
+ "filters": parsed_filters,
1613
+ "sort": [_parse_sort_item_from_tuple(item) for item in sort] if sort else None,
1614
+ },
1615
+ )
1597
1616
  return [
1598
1617
  cast(
1599
1618
  MemoryT,
1600
- (
1601
- LabeledMemory(self.id, memory)
1602
- if isinstance(memory, LabeledMemoryWithFeedbackMetrics)
1603
- else ScoredMemory(self.id, memory)
1604
- ),
1619
+ (LabeledMemory(self.id, memory) if "label" in memory else ScoredMemory(self.id, memory)),
1605
1620
  )
1606
- for memory in list_memories_with_feedback(
1607
- body=TelemetryMemoriesRequest(
1608
- memoryset_id=self.id,
1609
- offset=offset,
1610
- limit=limit,
1611
- filters=parsed_filters,
1612
- sort=[_parse_sort_item_from_tuple(item) for item in sort] if sort else None,
1613
- ),
1614
- ).items
1621
+ for memory in response["items"]
1615
1622
  ]
1616
1623
 
1617
- if any(isinstance(filter, TelemetryFilterItem) for filter in parsed_filters):
1624
+ if any(_is_metric_column(filter[0]) for filter in filters):
1618
1625
  raise ValueError("Feedback metrics are only supported when the with_feedback_metrics flag is set to True")
1619
1626
 
1620
1627
  if sort:
1621
1628
  logging.warning("Sorting is not supported when with_feedback_metrics is False. Sort value will be ignored.")
1622
1629
 
1630
+ response = orca_api.POST(
1631
+ "/memoryset/{name_or_id}/memories",
1632
+ params={"name_or_id": self.id},
1633
+ json={
1634
+ "offset": offset,
1635
+ "limit": limit,
1636
+ "filters": cast(list[FilterItem], parsed_filters),
1637
+ },
1638
+ )
1623
1639
  return [
1624
1640
  cast(
1625
1641
  MemoryT,
1626
- (
1627
- LabeledMemory(self.id, memory)
1628
- if isinstance(memory, LabeledMemoryResponse)
1629
- else ScoredMemory(self.id, memory)
1630
- ),
1642
+ (LabeledMemory(self.id, memory) if "label" in memory else ScoredMemory(self.id, memory)),
1631
1643
  )
1632
- for memory in query_memoryset(
1633
- self.id,
1634
- 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(
1635
1662
  offset=offset,
1636
1663
  limit=limit,
1637
- filters=cast(list[FilterItem], parsed_filters),
1638
- ),
1639
- )
1640
- ]
1664
+ filters=filters,
1665
+ with_feedback_metrics=with_feedback_metrics,
1666
+ sort=sort,
1667
+ )
1668
+ ]
1669
+ )
1641
1670
 
1642
1671
  def insert(self, items: Iterable[dict[str, Any]] | dict[str, Any]) -> None:
1643
1672
  """
@@ -1659,16 +1688,15 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1659
1688
  ... {"value": "I am sad", "label": 0, "source_id": "user_124", "tag": "sad"},
1660
1689
  ... ])
1661
1690
  """
1662
- insert_memories_gpu(
1663
- self.id,
1664
- body=(
1665
- cast(
1666
- list[LabeledMemoryInsert] | list[ScoredMemoryInsert],
1667
- [
1668
- _parse_memory_insert(memory, type=self.memory_type)
1669
- for memory in (cast(list[dict[str, Any]], [items]) if isinstance(items, dict) else items)
1670
- ],
1671
- )
1691
+ orca_api.POST(
1692
+ "/gpu/memoryset/{name_or_id}/memory",
1693
+ params={"name_or_id": self.id},
1694
+ json=cast(
1695
+ list[LabeledMemoryInsert] | list[ScoredMemoryInsert],
1696
+ [
1697
+ _parse_memory_insert(memory, type=self.memory_type)
1698
+ for memory in (cast(list[dict[str, Any]], [items]) if isinstance(items, dict) else items)
1699
+ ],
1672
1700
  ),
1673
1701
  )
1674
1702
  self.refresh()
@@ -1710,25 +1738,23 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1710
1738
  ]
1711
1739
  """
1712
1740
  if isinstance(memory_id, str):
1713
- response = 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
+ )
1714
1744
  return cast(
1715
1745
  MemoryT,
1716
- (
1717
- LabeledMemory(self.id, response)
1718
- if isinstance(response, LabeledMemoryResponse)
1719
- else ScoredMemory(self.id, response)
1720
- ),
1746
+ (LabeledMemory(self.id, response) if "label" in response else ScoredMemory(self.id, response)),
1721
1747
  )
1722
1748
  else:
1723
- response = 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
+ )
1724
1754
  return [
1725
1755
  cast(
1726
1756
  MemoryT,
1727
- (
1728
- LabeledMemory(self.id, memory)
1729
- if isinstance(memory, LabeledMemoryResponse)
1730
- else ScoredMemory(self.id, memory)
1731
- ),
1757
+ (LabeledMemory(self.id, memory) if "label" in memory else ScoredMemory(self.id, memory)),
1732
1758
  )
1733
1759
  for memory in response
1734
1760
  ]
@@ -1773,9 +1799,10 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1773
1799
  ... for m in memoryset.query(filters=[("tag", "==", "happy")])
1774
1800
  ... )
1775
1801
  """
1776
- response = update_memories_gpu(
1777
- self.id,
1778
- body=cast(
1802
+ response = orca_api.PATCH(
1803
+ "/gpu/memoryset/{name_or_id}/memories",
1804
+ params={"name_or_id": self.id},
1805
+ json=cast(
1779
1806
  list[LabeledMemoryUpdate] | list[ScoredMemoryUpdate],
1780
1807
  [
1781
1808
  _parse_memory_update(update, type=self.memory_type)
@@ -1786,11 +1813,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1786
1813
  updated_memories = [
1787
1814
  cast(
1788
1815
  MemoryT,
1789
- (
1790
- LabeledMemory(self.id, memory)
1791
- if isinstance(memory, LabeledMemoryResponse)
1792
- else ScoredMemory(self.id, memory)
1793
- ),
1816
+ (LabeledMemory(self.id, memory) if "label" in memory else ScoredMemory(self.id, memory)),
1794
1817
  )
1795
1818
  for memory in response
1796
1819
  ]
@@ -1836,21 +1859,21 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1836
1859
  Returns:
1837
1860
  A list of CascadingEditSuggestion objects, each containing a neighbor and the suggested new label.
1838
1861
  """
1839
-
1840
- return suggest_cascading_edits(
1841
- name_or_id=self.id,
1842
- memory_id=memory.memory_id,
1843
- body=CascadeEditSuggestionsRequest(
1844
- old_label=old_label,
1845
- new_label=new_label,
1846
- max_neighbors=max_neighbors,
1847
- max_validation_neighbors=max_validation_neighbors,
1848
- similarity_threshold=similarity_threshold,
1849
- only_if_has_old_label=only_if_has_old_label,
1850
- exclude_if_new_label=exclude_if_new_label,
1851
- suggestion_cooldown_time=suggestion_cooldown_time,
1852
- label_confirmation_cooldown_time=label_confirmation_cooldown_time,
1853
- ),
1862
+ # TODO: properly integrate this with memory edits and return something that can be applied
1863
+ return orca_api.POST(
1864
+ "/memoryset/{name_or_id}/memory/{memory_id}/cascading_edits",
1865
+ params={"name_or_id": self.id, "memory_id": memory.memory_id},
1866
+ json={
1867
+ "old_label": old_label,
1868
+ "new_label": new_label,
1869
+ "max_neighbors": max_neighbors,
1870
+ "max_validation_neighbors": max_validation_neighbors,
1871
+ "similarity_threshold": similarity_threshold,
1872
+ "only_if_has_old_label": only_if_has_old_label,
1873
+ "exclude_if_new_label": exclude_if_new_label,
1874
+ "suggestion_cooldown_time": suggestion_cooldown_time,
1875
+ "label_confirmation_cooldown_time": label_confirmation_cooldown_time,
1876
+ },
1854
1877
  )
1855
1878
 
1856
1879
  def delete(self, memory_id: str | Iterable[str]) -> None:
@@ -1872,37 +1895,39 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1872
1895
 
1873
1896
  """
1874
1897
  memory_ids = [memory_id] if isinstance(memory_id, str) else list(memory_id)
1875
- 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
+ )
1876
1901
  logging.info(f"Deleted {len(memory_ids)} memories from memoryset.")
1877
1902
  self.refresh()
1878
1903
 
1879
1904
  @overload
1880
1905
  def analyze(
1881
1906
  self,
1882
- *analyses: Iterable[dict[str, Any] | str],
1907
+ *analyses: dict[str, Any] | str,
1883
1908
  lookup_count: int = 15,
1884
1909
  clear_metrics: bool = False,
1885
1910
  background: Literal[True],
1886
- ) -> Job[dict]:
1911
+ ) -> Job[MemorysetMetrics]:
1887
1912
  pass
1888
1913
 
1889
1914
  @overload
1890
1915
  def analyze(
1891
1916
  self,
1892
- *analyses: Iterable[dict[str, Any] | str],
1917
+ *analyses: dict[str, Any] | str,
1893
1918
  lookup_count: int = 15,
1894
1919
  clear_metrics: bool = False,
1895
1920
  background: Literal[False] = False,
1896
- ) -> dict:
1921
+ ) -> MemorysetMetrics:
1897
1922
  pass
1898
1923
 
1899
1924
  def analyze(
1900
1925
  self,
1901
- *analyses: Iterable[dict[str, Any] | str],
1926
+ *analyses: dict[str, Any] | str,
1902
1927
  lookup_count: int = 15,
1903
1928
  clear_metrics: bool = False,
1904
1929
  background: bool = False,
1905
- ) -> Job[dict] | dict:
1930
+ ) -> Job[MemorysetMetrics] | MemorysetMetrics:
1906
1931
  """
1907
1932
  Run analyses on the memoryset to find duplicates, clusters, mislabelings, and more
1908
1933
 
@@ -1965,11 +1990,9 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1965
1990
  """
1966
1991
 
1967
1992
  # Get valid analysis names from MemorysetAnalysisConfigs
1968
- valid_analysis_names = {
1969
- field.name for field in fields(MemorysetAnalysisConfigs) if field.name != "additional_properties"
1970
- }
1993
+ valid_analysis_names = set(MemorysetAnalysisConfigs.__annotations__)
1971
1994
 
1972
- configs: dict[str, dict] = {}
1995
+ configs: MemorysetAnalysisConfigs = {}
1973
1996
  for analysis in analyses:
1974
1997
  if isinstance(analysis, str):
1975
1998
  error_msg = (
@@ -1979,30 +2002,37 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
1979
2002
  raise ValueError(error_msg)
1980
2003
  configs[analysis] = {}
1981
2004
  else:
1982
- name = analysis.pop("name") # type: ignore
2005
+ name = analysis.pop("name")
1983
2006
  error_msg = f"Invalid analysis name: {name}. Valid names are: {', '.join(sorted(valid_analysis_names))}"
1984
2007
  if name not in valid_analysis_names:
1985
2008
  raise ValueError(error_msg)
1986
- configs[name] = analysis # type: ignore
1987
-
1988
- analysis = analyze_memoryset(
1989
- self.id,
1990
- body=MemorysetAnalysisRequest(
1991
- configs=MemorysetAnalysisConfigs.from_dict(configs),
1992
- lookup_count=lookup_count,
1993
- clear_metrics=clear_metrics,
1994
- ),
2009
+ configs[name] = analysis
2010
+
2011
+ analysis = orca_api.POST(
2012
+ "/memoryset/{name_or_id}/analysis",
2013
+ params={"name_or_id": self.id},
2014
+ json={
2015
+ "configs": configs,
2016
+ "lookup_count": lookup_count,
2017
+ "clear_metrics": clear_metrics,
2018
+ },
1995
2019
  )
1996
2020
  job = Job(
1997
- analysis.task_id,
1998
- 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"],
1999
2026
  )
2000
2027
  return job if background else job.result()
2001
2028
 
2002
- def get_potential_duplicate_groups(self):
2029
+ def get_potential_duplicate_groups(self) -> list[list[MemoryT]]:
2003
2030
  """Group potential duplicates in the memoryset"""
2004
- response = potential_duplicate_groups(self.name)
2005
- 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
+ ]
2006
2036
 
2007
2037
  @overload
2008
2038
  @staticmethod
@@ -2015,7 +2045,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
2015
2045
  neighbor_count: int = 5,
2016
2046
  embedding_models: list[str] | None = None,
2017
2047
  background: Literal[True],
2018
- ) -> Job[dict]:
2048
+ ) -> Job[list[EmbeddingModelResult]]:
2019
2049
  pass
2020
2050
 
2021
2051
  @overload
@@ -2029,7 +2059,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
2029
2059
  neighbor_count: int = 5,
2030
2060
  embedding_models: list[str] | None = None,
2031
2061
  background: Literal[False] = False,
2032
- ) -> dict:
2062
+ ) -> list[EmbeddingModelResult]:
2033
2063
  pass
2034
2064
 
2035
2065
  @staticmethod
@@ -2042,7 +2072,7 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
2042
2072
  neighbor_count: int = 5,
2043
2073
  embedding_models: list[str] | None = None,
2044
2074
  background: bool = False,
2045
- ) -> Job[dict] | dict:
2075
+ ) -> Job[list[EmbeddingModelResult]] | list[EmbeddingModelResult]:
2046
2076
  """
2047
2077
  Test the quality of embeddings for the datasource by computing metrics such as prediction accuracy.
2048
2078
 
@@ -2061,24 +2091,27 @@ class _Memoryset(Generic[MemoryT, MemoryLookupT], ABC):
2061
2091
  A dictionary containing the results of the embedding evaluation
2062
2092
  """
2063
2093
 
2064
- if embedding_models is not None:
2065
- embedding_model_enums = [PretrainedEmbeddingModelName(model) for model in embedding_models]
2066
- else:
2067
- embedding_model_enums = None
2068
-
2069
- request = EmbeddingEvaluationRequest(
2070
- value_column=value_column,
2071
- label_column=label_column,
2072
- source_id_column=source_id_column,
2073
- neighbor_count=neighbor_count,
2074
- embedding_models=embedding_model_enums,
2094
+ response = orca_api.POST(
2095
+ "/datasource/{name_or_id}/embedding_evaluation",
2096
+ params={"name_or_id": datasource.id},
2097
+ json={
2098
+ "value_column": value_column,
2099
+ "label_column": label_column,
2100
+ "source_id_column": source_id_column,
2101
+ "neighbor_count": neighbor_count,
2102
+ "embedding_models": embedding_models,
2103
+ },
2075
2104
  )
2076
2105
 
2077
- response = create_embedding_evaluation(name_or_id=datasource.id, body=request)
2078
- job = Job(
2079
- response.task_id,
2080
- lambda: (r := get_embedding_evaluation(datasource.id, response.task_id).result) and r.to_dict(),
2081
- )
2106
+ def get_value() -> list[EmbeddingModelResult]:
2107
+ res = orca_api.GET(
2108
+ "/datasource/{name_or_id}/embedding_evaluation/{task_id}",
2109
+ params={"name_or_id": datasource.id, "task_id": response["task_id"]},
2110
+ )
2111
+ assert res["result"] is not None
2112
+ return res["result"]["evaluation_results"]
2113
+
2114
+ job = Job(response["task_id"], get_value)
2082
2115
  return job if background else job.result()
2083
2116
 
2084
2117
 
@@ -2098,12 +2131,12 @@ class LabeledMemoryset(_Memoryset[LabeledMemory, LabeledMemoryLookup]):
2098
2131
  """
2099
2132
 
2100
2133
  label_names: list[str]
2101
- memory_type: MemoryType = MemoryType.LABELED
2134
+ memory_type: MemoryType = "LABELED"
2102
2135
 
2103
2136
  def __init__(self, metadata: MemorysetMetadata):
2104
2137
  super().__init__(metadata)
2105
- assert metadata.label_names is not None
2106
- self.label_names = metadata.label_names
2138
+ assert metadata["label_names"] is not None
2139
+ self.label_names = metadata["label_names"]
2107
2140
 
2108
2141
  def __eq__(self, other) -> bool:
2109
2142
  return isinstance(other, LabeledMemoryset) and self.id == other.id
@@ -2112,12 +2145,6 @@ class LabeledMemoryset(_Memoryset[LabeledMemory, LabeledMemoryLookup]):
2112
2145
  def create(cls, name: str, datasource: Datasource, *, label_column: str | None = "label", **kwargs):
2113
2146
  return super().create(name, datasource, label_column=label_column, score_column=None, **kwargs)
2114
2147
 
2115
- def display_label_analysis(self):
2116
- """Display a UI to review and act upon the label analysis results"""
2117
- from ._utils.analysis_ui import display_suggested_memory_relabels
2118
-
2119
- display_suggested_memory_relabels(self)
2120
-
2121
2148
 
2122
2149
  class ScoredMemoryset(_Memoryset[ScoredMemory, ScoredMemoryLookup]):
2123
2150
  """
@@ -2133,7 +2160,7 @@ class ScoredMemoryset(_Memoryset[ScoredMemory, ScoredMemoryLookup]):
2133
2160
  updated_at: When the memoryset was last updated, automatically updated on updates
2134
2161
  """
2135
2162
 
2136
- memory_type: MemoryType = MemoryType.SCORED
2163
+ memory_type: MemoryType = "SCORED"
2137
2164
 
2138
2165
  def __eq__(self, other) -> bool:
2139
2166
  return isinstance(other, ScoredMemoryset) and self.id == other.id