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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) 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 +3515 -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 +42 -76
  14. orca_sdk/embedding_model.py +225 -71
  15. orca_sdk/embedding_model_test.py +27 -36
  16. orca_sdk/job.py +49 -45
  17. orca_sdk/job_test.py +16 -0
  18. orca_sdk/memoryset.py +340 -353
  19. orca_sdk/memoryset_test.py +7 -11
  20. orca_sdk/regression_model.py +120 -111
  21. orca_sdk/regression_model_test.py +15 -0
  22. orca_sdk/telemetry.py +162 -139
  23. {orca_sdk-0.0.97.dist-info → orca_sdk-0.0.98.dist-info}/METADATA +2 -5
  24. orca_sdk-0.0.98.dist-info/RECORD +40 -0
  25. orca_sdk/_generated_api_client/__init__.py +0 -3
  26. orca_sdk/_generated_api_client/api/__init__.py +0 -307
  27. orca_sdk/_generated_api_client/api/auth/__init__.py +0 -0
  28. orca_sdk/_generated_api_client/api/auth/check_authentication_auth_get.py +0 -128
  29. orca_sdk/_generated_api_client/api/auth/create_api_key_auth_api_key_post.py +0 -170
  30. orca_sdk/_generated_api_client/api/auth/create_org_plan_auth_org_plan_post.py +0 -168
  31. orca_sdk/_generated_api_client/api/auth/delete_api_key_auth_api_key_name_or_id_delete.py +0 -156
  32. orca_sdk/_generated_api_client/api/auth/delete_org_auth_org_delete.py +0 -130
  33. orca_sdk/_generated_api_client/api/auth/get_org_plan_auth_org_plan_get.py +0 -122
  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/auth/update_org_plan_auth_org_plan_put.py +0 -168
  36. orca_sdk/_generated_api_client/api/classification_model/__init__.py +0 -0
  37. orca_sdk/_generated_api_client/api/classification_model/create_classification_model_classification_model_post.py +0 -170
  38. orca_sdk/_generated_api_client/api/classification_model/delete_classification_model_classification_model_name_or_id_delete.py +0 -156
  39. 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
  40. orca_sdk/_generated_api_client/api/classification_model/evaluate_classification_model_classification_model_model_name_or_id_evaluation_post.py +0 -183
  41. orca_sdk/_generated_api_client/api/classification_model/get_classification_model_classification_model_name_or_id_get.py +0 -156
  42. 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
  43. orca_sdk/_generated_api_client/api/classification_model/list_classification_model_evaluations_classification_model_model_name_or_id_evaluation_get.py +0 -161
  44. orca_sdk/_generated_api_client/api/classification_model/list_classification_models_classification_model_get.py +0 -127
  45. orca_sdk/_generated_api_client/api/classification_model/predict_label_gpu_classification_model_name_or_id_prediction_post.py +0 -190
  46. orca_sdk/_generated_api_client/api/classification_model/update_classification_model_classification_model_name_or_id_patch.py +0 -183
  47. orca_sdk/_generated_api_client/api/datasource/__init__.py +0 -0
  48. orca_sdk/_generated_api_client/api/datasource/create_datasource_from_content_datasource_post.py +0 -224
  49. orca_sdk/_generated_api_client/api/datasource/create_datasource_from_files_datasource_upload_post.py +0 -229
  50. orca_sdk/_generated_api_client/api/datasource/create_embedding_evaluation_datasource_name_or_id_embedding_evaluation_post.py +0 -183
  51. orca_sdk/_generated_api_client/api/datasource/delete_datasource_datasource_name_or_id_delete.py +0 -156
  52. orca_sdk/_generated_api_client/api/datasource/download_datasource_datasource_name_or_id_download_get.py +0 -172
  53. orca_sdk/_generated_api_client/api/datasource/get_datasource_datasource_name_or_id_get.py +0 -156
  54. orca_sdk/_generated_api_client/api/datasource/get_embedding_evaluation_datasource_name_or_id_embedding_evaluation_task_id_get.py +0 -169
  55. orca_sdk/_generated_api_client/api/datasource/list_datasources_datasource_get.py +0 -127
  56. orca_sdk/_generated_api_client/api/datasource/list_embedding_evaluations_datasource_name_or_id_embedding_evaluation_get.py +0 -235
  57. orca_sdk/_generated_api_client/api/default/__init__.py +0 -0
  58. orca_sdk/_generated_api_client/api/default/healthcheck_get.py +0 -118
  59. orca_sdk/_generated_api_client/api/default/healthcheck_gpu_get.py +0 -118
  60. orca_sdk/_generated_api_client/api/finetuned_embedding_model/__init__.py +0 -0
  61. orca_sdk/_generated_api_client/api/finetuned_embedding_model/create_finetuned_embedding_model_finetuned_embedding_model_post.py +0 -168
  62. orca_sdk/_generated_api_client/api/finetuned_embedding_model/delete_finetuned_embedding_model_finetuned_embedding_model_name_or_id_delete.py +0 -156
  63. 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
  64. orca_sdk/_generated_api_client/api/finetuned_embedding_model/get_finetuned_embedding_model_finetuned_embedding_model_name_or_id_get.py +0 -156
  65. orca_sdk/_generated_api_client/api/finetuned_embedding_model/list_finetuned_embedding_models_finetuned_embedding_model_get.py +0 -127
  66. orca_sdk/_generated_api_client/api/memoryset/__init__.py +0 -0
  67. orca_sdk/_generated_api_client/api/memoryset/analyze_memoryset_memoryset_name_or_id_analysis_post.py +0 -183
  68. orca_sdk/_generated_api_client/api/memoryset/batch_delete_memoryset_batch_delete_memoryset_post.py +0 -168
  69. orca_sdk/_generated_api_client/api/memoryset/clone_memoryset_memoryset_name_or_id_clone_post.py +0 -181
  70. orca_sdk/_generated_api_client/api/memoryset/create_memoryset_memoryset_post.py +0 -168
  71. orca_sdk/_generated_api_client/api/memoryset/delete_memories_memoryset_name_or_id_memories_delete_post.py +0 -181
  72. orca_sdk/_generated_api_client/api/memoryset/delete_memory_memoryset_name_or_id_memory_memory_id_delete.py +0 -167
  73. orca_sdk/_generated_api_client/api/memoryset/delete_memoryset_memoryset_name_or_id_delete.py +0 -156
  74. orca_sdk/_generated_api_client/api/memoryset/get_analysis_memoryset_name_or_id_analysis_analysis_task_id_get.py +0 -169
  75. orca_sdk/_generated_api_client/api/memoryset/get_memories_memoryset_name_or_id_memories_get_post.py +0 -210
  76. orca_sdk/_generated_api_client/api/memoryset/get_memory_memoryset_name_or_id_memory_memory_id_get.py +0 -186
  77. orca_sdk/_generated_api_client/api/memoryset/get_memoryset_memoryset_name_or_id_get.py +0 -156
  78. orca_sdk/_generated_api_client/api/memoryset/insert_memories_gpu_memoryset_name_or_id_memory_post.py +0 -188
  79. orca_sdk/_generated_api_client/api/memoryset/list_analyses_memoryset_name_or_id_analysis_get.py +0 -235
  80. orca_sdk/_generated_api_client/api/memoryset/list_memorysets_memoryset_get.py +0 -180
  81. orca_sdk/_generated_api_client/api/memoryset/memoryset_lookup_gpu_memoryset_name_or_id_lookup_post.py +0 -212
  82. orca_sdk/_generated_api_client/api/memoryset/potential_duplicate_groups_memoryset_name_or_id_potential_duplicate_groups_get.py +0 -195
  83. orca_sdk/_generated_api_client/api/memoryset/query_memoryset_memoryset_name_or_id_memories_post.py +0 -210
  84. orca_sdk/_generated_api_client/api/memoryset/suggest_cascading_edits_memoryset_name_or_id_memory_memory_id_cascading_edits_post.py +0 -233
  85. orca_sdk/_generated_api_client/api/memoryset/update_memories_gpu_memoryset_name_or_id_memories_patch.py +0 -216
  86. orca_sdk/_generated_api_client/api/memoryset/update_memory_gpu_memoryset_name_or_id_memory_patch.py +0 -205
  87. orca_sdk/_generated_api_client/api/memoryset/update_memoryset_memoryset_name_or_id_patch.py +0 -183
  88. orca_sdk/_generated_api_client/api/predictive_model/__init__.py +0 -0
  89. orca_sdk/_generated_api_client/api/predictive_model/list_predictive_models_predictive_model_get.py +0 -150
  90. orca_sdk/_generated_api_client/api/pretrained_embedding_model/__init__.py +0 -0
  91. orca_sdk/_generated_api_client/api/pretrained_embedding_model/embed_with_pretrained_model_gpu_pretrained_embedding_model_model_name_embedding_post.py +0 -192
  92. orca_sdk/_generated_api_client/api/pretrained_embedding_model/get_pretrained_embedding_model_pretrained_embedding_model_model_name_get.py +0 -161
  93. orca_sdk/_generated_api_client/api/pretrained_embedding_model/list_pretrained_embedding_models_pretrained_embedding_model_get.py +0 -127
  94. orca_sdk/_generated_api_client/api/regression_model/__init__.py +0 -0
  95. orca_sdk/_generated_api_client/api/regression_model/create_regression_model_regression_model_post.py +0 -170
  96. 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
  97. orca_sdk/_generated_api_client/api/regression_model/delete_regression_model_regression_model_name_or_id_delete.py +0 -154
  98. orca_sdk/_generated_api_client/api/regression_model/evaluate_regression_model_regression_model_model_name_or_id_evaluation_post.py +0 -183
  99. 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
  100. orca_sdk/_generated_api_client/api/regression_model/get_regression_model_regression_model_name_or_id_get.py +0 -156
  101. orca_sdk/_generated_api_client/api/regression_model/list_regression_model_evaluations_regression_model_model_name_or_id_evaluation_get.py +0 -161
  102. orca_sdk/_generated_api_client/api/regression_model/list_regression_models_regression_model_get.py +0 -127
  103. orca_sdk/_generated_api_client/api/regression_model/predict_score_gpu_regression_model_name_or_id_prediction_post.py +0 -190
  104. orca_sdk/_generated_api_client/api/regression_model/update_regression_model_regression_model_name_or_id_patch.py +0 -183
  105. orca_sdk/_generated_api_client/api/task/__init__.py +0 -0
  106. orca_sdk/_generated_api_client/api/task/abort_task_task_task_id_abort_delete.py +0 -154
  107. orca_sdk/_generated_api_client/api/task/get_task_status_task_task_id_status_get.py +0 -156
  108. orca_sdk/_generated_api_client/api/task/get_task_task_task_id_get.py +0 -156
  109. orca_sdk/_generated_api_client/api/task/list_tasks_task_get.py +0 -288
  110. orca_sdk/_generated_api_client/api/telemetry/__init__.py +0 -0
  111. orca_sdk/_generated_api_client/api/telemetry/count_predictions_telemetry_prediction_count_post.py +0 -168
  112. orca_sdk/_generated_api_client/api/telemetry/drop_feedback_category_with_data_telemetry_feedback_category_name_or_id_delete.py +0 -162
  113. orca_sdk/_generated_api_client/api/telemetry/explain_prediction_telemetry_prediction_prediction_id_explanation_get.py +0 -182
  114. orca_sdk/_generated_api_client/api/telemetry/generate_memory_suggestions_telemetry_prediction_prediction_id_memory_suggestions_post.py +0 -239
  115. orca_sdk/_generated_api_client/api/telemetry/get_action_recommendation_telemetry_prediction_prediction_id_action_get.py +0 -192
  116. orca_sdk/_generated_api_client/api/telemetry/get_feedback_category_telemetry_feedback_category_name_or_id_get.py +0 -156
  117. orca_sdk/_generated_api_client/api/telemetry/get_prediction_telemetry_prediction_prediction_id_get.py +0 -180
  118. orca_sdk/_generated_api_client/api/telemetry/list_feedback_categories_telemetry_feedback_category_get.py +0 -127
  119. orca_sdk/_generated_api_client/api/telemetry/list_memories_with_feedback_telemetry_memories_post.py +0 -198
  120. orca_sdk/_generated_api_client/api/telemetry/list_predictions_telemetry_prediction_post.py +0 -198
  121. orca_sdk/_generated_api_client/api/telemetry/record_prediction_feedback_telemetry_prediction_feedback_put.py +0 -171
  122. orca_sdk/_generated_api_client/api/telemetry/update_prediction_telemetry_prediction_prediction_id_patch.py +0 -181
  123. orca_sdk/_generated_api_client/client.py +0 -216
  124. orca_sdk/_generated_api_client/errors.py +0 -38
  125. orca_sdk/_generated_api_client/models/__init__.py +0 -345
  126. orca_sdk/_generated_api_client/models/action_recommendation.py +0 -82
  127. orca_sdk/_generated_api_client/models/action_recommendation_action.py +0 -11
  128. orca_sdk/_generated_api_client/models/add_memory_recommendations.py +0 -85
  129. orca_sdk/_generated_api_client/models/add_memory_suggestion.py +0 -79
  130. orca_sdk/_generated_api_client/models/analyze_neighbor_labels_result.py +0 -116
  131. orca_sdk/_generated_api_client/models/api_key_metadata.py +0 -137
  132. orca_sdk/_generated_api_client/models/api_key_metadata_scope_item.py +0 -9
  133. orca_sdk/_generated_api_client/models/base_label_prediction_result.py +0 -130
  134. orca_sdk/_generated_api_client/models/base_model.py +0 -55
  135. orca_sdk/_generated_api_client/models/base_score_prediction_result.py +0 -108
  136. orca_sdk/_generated_api_client/models/body_create_datasource_from_files_datasource_upload_post.py +0 -145
  137. orca_sdk/_generated_api_client/models/cascade_edit_suggestions_request.py +0 -154
  138. orca_sdk/_generated_api_client/models/cascading_edit_suggestion.py +0 -92
  139. orca_sdk/_generated_api_client/models/class_representatives.py +0 -92
  140. orca_sdk/_generated_api_client/models/classification_evaluation_request.py +0 -148
  141. orca_sdk/_generated_api_client/models/classification_metrics.py +0 -259
  142. orca_sdk/_generated_api_client/models/classification_model_metadata.py +0 -227
  143. orca_sdk/_generated_api_client/models/classification_prediction_request.py +0 -220
  144. orca_sdk/_generated_api_client/models/clone_memoryset_request.py +0 -210
  145. orca_sdk/_generated_api_client/models/cluster_metrics.py +0 -78
  146. orca_sdk/_generated_api_client/models/column_info.py +0 -145
  147. orca_sdk/_generated_api_client/models/column_type.py +0 -14
  148. orca_sdk/_generated_api_client/models/constraint_violation_error_response.py +0 -81
  149. orca_sdk/_generated_api_client/models/constraint_violation_error_response_status_code.py +0 -8
  150. orca_sdk/_generated_api_client/models/count_predictions_request.py +0 -195
  151. orca_sdk/_generated_api_client/models/create_api_key_request.py +0 -120
  152. orca_sdk/_generated_api_client/models/create_api_key_request_scope_item.py +0 -9
  153. orca_sdk/_generated_api_client/models/create_api_key_response.py +0 -145
  154. orca_sdk/_generated_api_client/models/create_api_key_response_scope_item.py +0 -9
  155. orca_sdk/_generated_api_client/models/create_classification_model_request.py +0 -237
  156. orca_sdk/_generated_api_client/models/create_datasource_from_content_request.py +0 -101
  157. orca_sdk/_generated_api_client/models/create_memoryset_request.py +0 -365
  158. orca_sdk/_generated_api_client/models/create_memoryset_request_index_params.py +0 -66
  159. orca_sdk/_generated_api_client/models/create_memoryset_request_index_type.py +0 -13
  160. orca_sdk/_generated_api_client/models/create_org_plan_request.py +0 -73
  161. orca_sdk/_generated_api_client/models/create_org_plan_request_tier.py +0 -11
  162. orca_sdk/_generated_api_client/models/create_regression_model_request.py +0 -157
  163. orca_sdk/_generated_api_client/models/datasource_metadata.py +0 -156
  164. orca_sdk/_generated_api_client/models/delete_memories_request.py +0 -70
  165. orca_sdk/_generated_api_client/models/delete_memorysets_request.py +0 -70
  166. orca_sdk/_generated_api_client/models/embed_request.py +0 -155
  167. orca_sdk/_generated_api_client/models/embedding_evaluation_payload.py +0 -205
  168. orca_sdk/_generated_api_client/models/embedding_evaluation_request.py +0 -197
  169. orca_sdk/_generated_api_client/models/embedding_evaluation_response.py +0 -158
  170. orca_sdk/_generated_api_client/models/embedding_evaluation_result.py +0 -86
  171. orca_sdk/_generated_api_client/models/embedding_finetuning_method.py +0 -9
  172. orca_sdk/_generated_api_client/models/embedding_model_result.py +0 -123
  173. orca_sdk/_generated_api_client/models/evaluation_response.py +0 -153
  174. orca_sdk/_generated_api_client/models/evaluation_response_classification_metrics.py +0 -140
  175. orca_sdk/_generated_api_client/models/evaluation_response_regression_metrics.py +0 -140
  176. orca_sdk/_generated_api_client/models/feedback_metrics.py +0 -85
  177. orca_sdk/_generated_api_client/models/feedback_type.py +0 -9
  178. orca_sdk/_generated_api_client/models/filter_item.py +0 -239
  179. orca_sdk/_generated_api_client/models/filter_item_field_type_0_item.py +0 -17
  180. orca_sdk/_generated_api_client/models/filter_item_field_type_1_item_type_0.py +0 -8
  181. orca_sdk/_generated_api_client/models/filter_item_field_type_2_item_type_0.py +0 -8
  182. orca_sdk/_generated_api_client/models/filter_item_field_type_2_item_type_1.py +0 -22
  183. orca_sdk/_generated_api_client/models/filter_item_op.py +0 -16
  184. orca_sdk/_generated_api_client/models/finetune_embedding_model_request.py +0 -259
  185. orca_sdk/_generated_api_client/models/finetune_embedding_model_request_training_args.py +0 -66
  186. orca_sdk/_generated_api_client/models/finetuned_embedding_model_metadata.py +0 -166
  187. orca_sdk/_generated_api_client/models/get_memories_request.py +0 -70
  188. orca_sdk/_generated_api_client/models/http_validation_error.py +0 -86
  189. orca_sdk/_generated_api_client/models/internal_server_error_response.py +0 -81
  190. orca_sdk/_generated_api_client/models/internal_server_error_response_status_code.py +0 -8
  191. orca_sdk/_generated_api_client/models/label_class_metrics.py +0 -108
  192. orca_sdk/_generated_api_client/models/label_prediction_memory_lookup.py +0 -210
  193. orca_sdk/_generated_api_client/models/label_prediction_memory_lookup_metadata.py +0 -68
  194. orca_sdk/_generated_api_client/models/label_prediction_with_memories_and_feedback.py +0 -288
  195. orca_sdk/_generated_api_client/models/labeled_memory.py +0 -186
  196. orca_sdk/_generated_api_client/models/labeled_memory_insert.py +0 -128
  197. orca_sdk/_generated_api_client/models/labeled_memory_insert_metadata.py +0 -68
  198. orca_sdk/_generated_api_client/models/labeled_memory_lookup.py +0 -194
  199. orca_sdk/_generated_api_client/models/labeled_memory_lookup_metadata.py +0 -68
  200. orca_sdk/_generated_api_client/models/labeled_memory_metadata.py +0 -68
  201. orca_sdk/_generated_api_client/models/labeled_memory_update.py +0 -171
  202. orca_sdk/_generated_api_client/models/labeled_memory_update_metadata_type_0.py +0 -68
  203. orca_sdk/_generated_api_client/models/labeled_memory_with_feedback_metrics.py +0 -207
  204. orca_sdk/_generated_api_client/models/labeled_memory_with_feedback_metrics_feedback_metrics.py +0 -68
  205. orca_sdk/_generated_api_client/models/labeled_memory_with_feedback_metrics_metadata.py +0 -68
  206. orca_sdk/_generated_api_client/models/list_memories_request.py +0 -104
  207. orca_sdk/_generated_api_client/models/list_predictions_request.py +0 -319
  208. orca_sdk/_generated_api_client/models/lookup_request.py +0 -101
  209. orca_sdk/_generated_api_client/models/lookup_score_metrics.py +0 -94
  210. orca_sdk/_generated_api_client/models/memory_metrics.py +0 -263
  211. orca_sdk/_generated_api_client/models/memory_type.py +0 -9
  212. orca_sdk/_generated_api_client/models/memoryset_analysis_configs.py +0 -245
  213. orca_sdk/_generated_api_client/models/memoryset_analysis_request.py +0 -105
  214. orca_sdk/_generated_api_client/models/memoryset_analysis_response.py +0 -182
  215. orca_sdk/_generated_api_client/models/memoryset_class_patterns_analysis_config.py +0 -79
  216. orca_sdk/_generated_api_client/models/memoryset_class_patterns_metrics.py +0 -138
  217. orca_sdk/_generated_api_client/models/memoryset_cluster_analysis_config.py +0 -202
  218. orca_sdk/_generated_api_client/models/memoryset_cluster_analysis_config_clustering_method.py +0 -9
  219. orca_sdk/_generated_api_client/models/memoryset_cluster_analysis_config_partitioning_method.py +0 -10
  220. orca_sdk/_generated_api_client/models/memoryset_cluster_metrics.py +0 -100
  221. orca_sdk/_generated_api_client/models/memoryset_duplicate_analysis_config.py +0 -70
  222. orca_sdk/_generated_api_client/models/memoryset_duplicate_metrics.py +0 -70
  223. orca_sdk/_generated_api_client/models/memoryset_label_analysis_config.py +0 -70
  224. orca_sdk/_generated_api_client/models/memoryset_label_metrics.py +0 -116
  225. orca_sdk/_generated_api_client/models/memoryset_metadata.py +0 -333
  226. orca_sdk/_generated_api_client/models/memoryset_metadata_index_params.py +0 -55
  227. orca_sdk/_generated_api_client/models/memoryset_metadata_index_type.py +0 -13
  228. orca_sdk/_generated_api_client/models/memoryset_metrics.py +0 -265
  229. orca_sdk/_generated_api_client/models/memoryset_neighbor_analysis_config.py +0 -83
  230. orca_sdk/_generated_api_client/models/memoryset_neighbor_metrics.py +0 -76
  231. orca_sdk/_generated_api_client/models/memoryset_neighbor_metrics_lookup_score_metrics.py +0 -68
  232. orca_sdk/_generated_api_client/models/memoryset_projection_analysis_config.py +0 -79
  233. orca_sdk/_generated_api_client/models/memoryset_projection_metrics.py +0 -55
  234. orca_sdk/_generated_api_client/models/memoryset_update.py +0 -121
  235. orca_sdk/_generated_api_client/models/not_found_error_response.py +0 -99
  236. orca_sdk/_generated_api_client/models/not_found_error_response_resource_type_0.py +0 -23
  237. orca_sdk/_generated_api_client/models/not_found_error_response_status_code.py +0 -8
  238. orca_sdk/_generated_api_client/models/org_plan.py +0 -99
  239. orca_sdk/_generated_api_client/models/org_plan_tier.py +0 -11
  240. orca_sdk/_generated_api_client/models/paginated_task.py +0 -108
  241. orca_sdk/_generated_api_client/models/paginated_union_labeled_memory_with_feedback_metrics_scored_memory_with_feedback_metrics.py +0 -135
  242. orca_sdk/_generated_api_client/models/pr_curve.py +0 -86
  243. orca_sdk/_generated_api_client/models/prediction_feedback.py +0 -157
  244. orca_sdk/_generated_api_client/models/prediction_feedback_category.py +0 -115
  245. orca_sdk/_generated_api_client/models/prediction_feedback_request.py +0 -122
  246. orca_sdk/_generated_api_client/models/prediction_feedback_result.py +0 -102
  247. orca_sdk/_generated_api_client/models/prediction_sort_item_item_type_0.py +0 -10
  248. orca_sdk/_generated_api_client/models/prediction_sort_item_item_type_1.py +0 -9
  249. orca_sdk/_generated_api_client/models/predictive_model_update.py +0 -111
  250. orca_sdk/_generated_api_client/models/pretrained_embedding_model_metadata.py +0 -115
  251. orca_sdk/_generated_api_client/models/pretrained_embedding_model_name.py +0 -17
  252. orca_sdk/_generated_api_client/models/rac_head_type.py +0 -11
  253. orca_sdk/_generated_api_client/models/rar_head_type.py +0 -8
  254. orca_sdk/_generated_api_client/models/regression_evaluation_request.py +0 -148
  255. orca_sdk/_generated_api_client/models/regression_metrics.py +0 -172
  256. orca_sdk/_generated_api_client/models/regression_model_metadata.py +0 -191
  257. orca_sdk/_generated_api_client/models/regression_prediction_request.py +0 -195
  258. orca_sdk/_generated_api_client/models/roc_curve.py +0 -86
  259. orca_sdk/_generated_api_client/models/score_prediction_memory_lookup.py +0 -196
  260. orca_sdk/_generated_api_client/models/score_prediction_memory_lookup_metadata.py +0 -68
  261. orca_sdk/_generated_api_client/models/score_prediction_with_memories_and_feedback.py +0 -252
  262. orca_sdk/_generated_api_client/models/scored_memory.py +0 -172
  263. orca_sdk/_generated_api_client/models/scored_memory_insert.py +0 -128
  264. orca_sdk/_generated_api_client/models/scored_memory_insert_metadata.py +0 -68
  265. orca_sdk/_generated_api_client/models/scored_memory_lookup.py +0 -180
  266. orca_sdk/_generated_api_client/models/scored_memory_lookup_metadata.py +0 -68
  267. orca_sdk/_generated_api_client/models/scored_memory_metadata.py +0 -68
  268. orca_sdk/_generated_api_client/models/scored_memory_update.py +0 -171
  269. orca_sdk/_generated_api_client/models/scored_memory_update_metadata_type_0.py +0 -68
  270. orca_sdk/_generated_api_client/models/scored_memory_with_feedback_metrics.py +0 -193
  271. orca_sdk/_generated_api_client/models/scored_memory_with_feedback_metrics_feedback_metrics.py +0 -68
  272. orca_sdk/_generated_api_client/models/scored_memory_with_feedback_metrics_metadata.py +0 -68
  273. orca_sdk/_generated_api_client/models/service_unavailable_error_response.py +0 -81
  274. orca_sdk/_generated_api_client/models/service_unavailable_error_response_status_code.py +0 -8
  275. orca_sdk/_generated_api_client/models/task.py +0 -198
  276. orca_sdk/_generated_api_client/models/task_status.py +0 -14
  277. orca_sdk/_generated_api_client/models/task_status_info.py +0 -133
  278. orca_sdk/_generated_api_client/models/telemetry_field_type_0_item_type_0.py +0 -8
  279. orca_sdk/_generated_api_client/models/telemetry_field_type_0_item_type_2.py +0 -9
  280. orca_sdk/_generated_api_client/models/telemetry_field_type_1_item_type_0.py +0 -8
  281. orca_sdk/_generated_api_client/models/telemetry_field_type_1_item_type_1.py +0 -8
  282. orca_sdk/_generated_api_client/models/telemetry_filter_item.py +0 -217
  283. orca_sdk/_generated_api_client/models/telemetry_filter_item_op.py +0 -15
  284. orca_sdk/_generated_api_client/models/telemetry_memories_request.py +0 -181
  285. orca_sdk/_generated_api_client/models/telemetry_sort_options.py +0 -185
  286. orca_sdk/_generated_api_client/models/telemetry_sort_options_direction.py +0 -9
  287. orca_sdk/_generated_api_client/models/unauthenticated_error_response.py +0 -73
  288. orca_sdk/_generated_api_client/models/unauthenticated_error_response_status_code.py +0 -8
  289. orca_sdk/_generated_api_client/models/unauthorized_error_response.py +0 -81
  290. orca_sdk/_generated_api_client/models/unauthorized_error_response_status_code.py +0 -8
  291. orca_sdk/_generated_api_client/models/update_org_plan_request.py +0 -73
  292. orca_sdk/_generated_api_client/models/update_org_plan_request_tier.py +0 -11
  293. orca_sdk/_generated_api_client/models/update_prediction_request.py +0 -133
  294. orca_sdk/_generated_api_client/models/validation_error.py +0 -99
  295. orca_sdk/_generated_api_client/py.typed +0 -1
  296. orca_sdk/_generated_api_client/types.py +0 -56
  297. orca_sdk-0.0.97.dist-info/RECORD +0 -309
  298. {orca_sdk-0.0.97.dist-info → orca_sdk-0.0.98.dist-info}/WHEEL +0 -0
orca_sdk/memoryset.py CHANGED
@@ -8,91 +8,43 @@ from typing import Any, Generic, Iterable, Literal, Self, TypeVar, cast, overloa
8
8
 
9
9
  import pandas as pd
10
10
  import pyarrow as pa
11
- from attrs import fields
12
11
  from datasets import Dataset
13
12
  from torch.utils.data import DataLoader as TorchDataLoader
14
13
  from torch.utils.data import Dataset as TorchDataset
15
14
 
16
- from ._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