orca-sdk 0.1.1__py3-none-any.whl → 0.1.2__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 (185) hide show
  1. orca_sdk/__init__.py +10 -4
  2. orca_sdk/_shared/__init__.py +10 -0
  3. orca_sdk/_shared/metrics.py +393 -0
  4. orca_sdk/_shared/metrics_test.py +273 -0
  5. orca_sdk/_utils/analysis_ui.py +12 -10
  6. orca_sdk/_utils/analysis_ui_style.css +0 -3
  7. orca_sdk/_utils/auth.py +27 -29
  8. orca_sdk/_utils/data_parsing.py +28 -2
  9. orca_sdk/_utils/data_parsing_test.py +15 -15
  10. orca_sdk/_utils/pagination.py +126 -0
  11. orca_sdk/_utils/pagination_test.py +132 -0
  12. orca_sdk/_utils/prediction_result_ui.py +67 -21
  13. orca_sdk/_utils/tqdm_file_reader.py +12 -0
  14. orca_sdk/_utils/value_parser.py +45 -0
  15. orca_sdk/_utils/value_parser_test.py +39 -0
  16. orca_sdk/classification_model.py +439 -129
  17. orca_sdk/classification_model_test.py +334 -104
  18. orca_sdk/client.py +3747 -0
  19. orca_sdk/conftest.py +164 -19
  20. orca_sdk/credentials.py +120 -18
  21. orca_sdk/credentials_test.py +20 -0
  22. orca_sdk/datasource.py +259 -68
  23. orca_sdk/datasource_test.py +242 -0
  24. orca_sdk/embedding_model.py +425 -82
  25. orca_sdk/embedding_model_test.py +39 -13
  26. orca_sdk/job.py +337 -0
  27. orca_sdk/job_test.py +108 -0
  28. orca_sdk/memoryset.py +1341 -305
  29. orca_sdk/memoryset_test.py +350 -111
  30. orca_sdk/regression_model.py +684 -0
  31. orca_sdk/regression_model_test.py +369 -0
  32. orca_sdk/telemetry.py +449 -143
  33. orca_sdk/telemetry_test.py +43 -24
  34. {orca_sdk-0.1.1.dist-info → orca_sdk-0.1.2.dist-info}/METADATA +34 -16
  35. orca_sdk-0.1.2.dist-info/RECORD +40 -0
  36. {orca_sdk-0.1.1.dist-info → orca_sdk-0.1.2.dist-info}/WHEEL +1 -1
  37. orca_sdk/_generated_api_client/__init__.py +0 -3
  38. orca_sdk/_generated_api_client/api/__init__.py +0 -193
  39. orca_sdk/_generated_api_client/api/auth/__init__.py +0 -0
  40. orca_sdk/_generated_api_client/api/auth/check_authentication_auth_get.py +0 -128
  41. orca_sdk/_generated_api_client/api/auth/create_api_key_auth_api_key_post.py +0 -170
  42. orca_sdk/_generated_api_client/api/auth/delete_api_key_auth_api_key_name_or_id_delete.py +0 -156
  43. orca_sdk/_generated_api_client/api/auth/delete_org_auth_org_delete.py +0 -130
  44. orca_sdk/_generated_api_client/api/auth/list_api_keys_auth_api_key_get.py +0 -127
  45. orca_sdk/_generated_api_client/api/classification_model/__init__.py +0 -0
  46. orca_sdk/_generated_api_client/api/classification_model/create_evaluation_classification_model_model_name_or_id_evaluation_post.py +0 -183
  47. orca_sdk/_generated_api_client/api/classification_model/create_model_classification_model_post.py +0 -170
  48. orca_sdk/_generated_api_client/api/classification_model/delete_evaluation_classification_model_model_name_or_id_evaluation_task_id_delete.py +0 -168
  49. orca_sdk/_generated_api_client/api/classification_model/delete_model_classification_model_name_or_id_delete.py +0 -154
  50. orca_sdk/_generated_api_client/api/classification_model/get_evaluation_classification_model_model_name_or_id_evaluation_task_id_get.py +0 -170
  51. orca_sdk/_generated_api_client/api/classification_model/get_model_classification_model_name_or_id_get.py +0 -156
  52. orca_sdk/_generated_api_client/api/classification_model/list_evaluations_classification_model_model_name_or_id_evaluation_get.py +0 -161
  53. orca_sdk/_generated_api_client/api/classification_model/list_models_classification_model_get.py +0 -127
  54. orca_sdk/_generated_api_client/api/classification_model/predict_gpu_classification_model_name_or_id_prediction_post.py +0 -190
  55. orca_sdk/_generated_api_client/api/datasource/__init__.py +0 -0
  56. orca_sdk/_generated_api_client/api/datasource/create_datasource_datasource_post.py +0 -167
  57. orca_sdk/_generated_api_client/api/datasource/delete_datasource_datasource_name_or_id_delete.py +0 -156
  58. orca_sdk/_generated_api_client/api/datasource/get_datasource_datasource_name_or_id_get.py +0 -156
  59. orca_sdk/_generated_api_client/api/datasource/list_datasources_datasource_get.py +0 -127
  60. orca_sdk/_generated_api_client/api/default/__init__.py +0 -0
  61. orca_sdk/_generated_api_client/api/default/healthcheck_get.py +0 -118
  62. orca_sdk/_generated_api_client/api/default/healthcheck_gpu_get.py +0 -118
  63. orca_sdk/_generated_api_client/api/finetuned_embedding_model/__init__.py +0 -0
  64. orca_sdk/_generated_api_client/api/finetuned_embedding_model/create_finetuned_embedding_model_finetuned_embedding_model_post.py +0 -168
  65. orca_sdk/_generated_api_client/api/finetuned_embedding_model/delete_finetuned_embedding_model_finetuned_embedding_model_name_or_id_delete.py +0 -156
  66. 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
  67. orca_sdk/_generated_api_client/api/finetuned_embedding_model/get_finetuned_embedding_model_finetuned_embedding_model_name_or_id_get.py +0 -156
  68. orca_sdk/_generated_api_client/api/finetuned_embedding_model/list_finetuned_embedding_models_finetuned_embedding_model_get.py +0 -127
  69. orca_sdk/_generated_api_client/api/memoryset/__init__.py +0 -0
  70. orca_sdk/_generated_api_client/api/memoryset/clone_memoryset_memoryset_name_or_id_clone_post.py +0 -181
  71. orca_sdk/_generated_api_client/api/memoryset/create_analysis_memoryset_name_or_id_analysis_post.py +0 -183
  72. orca_sdk/_generated_api_client/api/memoryset/create_memoryset_memoryset_post.py +0 -168
  73. orca_sdk/_generated_api_client/api/memoryset/delete_memories_memoryset_name_or_id_memories_delete_post.py +0 -181
  74. orca_sdk/_generated_api_client/api/memoryset/delete_memory_memoryset_name_or_id_memory_memory_id_delete.py +0 -167
  75. orca_sdk/_generated_api_client/api/memoryset/delete_memoryset_memoryset_name_or_id_delete.py +0 -156
  76. orca_sdk/_generated_api_client/api/memoryset/get_analysis_memoryset_name_or_id_analysis_analysis_task_id_get.py +0 -169
  77. orca_sdk/_generated_api_client/api/memoryset/get_memories_memoryset_name_or_id_memories_get_post.py +0 -188
  78. orca_sdk/_generated_api_client/api/memoryset/get_memory_memoryset_name_or_id_memory_memory_id_get.py +0 -169
  79. orca_sdk/_generated_api_client/api/memoryset/get_memoryset_memoryset_name_or_id_get.py +0 -156
  80. orca_sdk/_generated_api_client/api/memoryset/insert_memories_gpu_memoryset_name_or_id_memory_post.py +0 -184
  81. orca_sdk/_generated_api_client/api/memoryset/list_analyses_memoryset_name_or_id_analysis_get.py +0 -260
  82. orca_sdk/_generated_api_client/api/memoryset/list_memorysets_memoryset_get.py +0 -127
  83. orca_sdk/_generated_api_client/api/memoryset/memoryset_lookup_gpu_memoryset_name_or_id_lookup_post.py +0 -193
  84. orca_sdk/_generated_api_client/api/memoryset/query_memoryset_memoryset_name_or_id_memories_post.py +0 -188
  85. orca_sdk/_generated_api_client/api/memoryset/update_memories_gpu_memoryset_name_or_id_memories_patch.py +0 -191
  86. orca_sdk/_generated_api_client/api/memoryset/update_memory_gpu_memoryset_name_or_id_memory_patch.py +0 -187
  87. orca_sdk/_generated_api_client/api/pretrained_embedding_model/__init__.py +0 -0
  88. orca_sdk/_generated_api_client/api/pretrained_embedding_model/embed_with_pretrained_model_gpu_pretrained_embedding_model_model_name_embedding_post.py +0 -188
  89. orca_sdk/_generated_api_client/api/pretrained_embedding_model/get_pretrained_embedding_model_pretrained_embedding_model_model_name_get.py +0 -157
  90. orca_sdk/_generated_api_client/api/pretrained_embedding_model/list_pretrained_embedding_models_pretrained_embedding_model_get.py +0 -127
  91. orca_sdk/_generated_api_client/api/task/__init__.py +0 -0
  92. orca_sdk/_generated_api_client/api/task/abort_task_task_task_id_abort_delete.py +0 -154
  93. orca_sdk/_generated_api_client/api/task/get_task_status_task_task_id_status_get.py +0 -156
  94. orca_sdk/_generated_api_client/api/task/list_tasks_task_get.py +0 -243
  95. orca_sdk/_generated_api_client/api/telemetry/__init__.py +0 -0
  96. orca_sdk/_generated_api_client/api/telemetry/drop_feedback_category_with_data_telemetry_feedback_category_name_or_id_delete.py +0 -162
  97. orca_sdk/_generated_api_client/api/telemetry/get_feedback_category_telemetry_feedback_category_name_or_id_get.py +0 -156
  98. orca_sdk/_generated_api_client/api/telemetry/get_prediction_telemetry_prediction_prediction_id_get.py +0 -157
  99. orca_sdk/_generated_api_client/api/telemetry/list_feedback_categories_telemetry_feedback_category_get.py +0 -127
  100. orca_sdk/_generated_api_client/api/telemetry/list_predictions_telemetry_prediction_post.py +0 -175
  101. orca_sdk/_generated_api_client/api/telemetry/record_prediction_feedback_telemetry_prediction_feedback_put.py +0 -171
  102. orca_sdk/_generated_api_client/api/telemetry/update_prediction_telemetry_prediction_prediction_id_patch.py +0 -181
  103. orca_sdk/_generated_api_client/client.py +0 -216
  104. orca_sdk/_generated_api_client/errors.py +0 -38
  105. orca_sdk/_generated_api_client/models/__init__.py +0 -159
  106. orca_sdk/_generated_api_client/models/analyze_neighbor_labels_result.py +0 -84
  107. orca_sdk/_generated_api_client/models/api_key_metadata.py +0 -118
  108. orca_sdk/_generated_api_client/models/base_model.py +0 -55
  109. orca_sdk/_generated_api_client/models/body_create_datasource_datasource_post.py +0 -176
  110. orca_sdk/_generated_api_client/models/classification_evaluation_result.py +0 -114
  111. orca_sdk/_generated_api_client/models/clone_labeled_memoryset_request.py +0 -150
  112. orca_sdk/_generated_api_client/models/column_info.py +0 -114
  113. orca_sdk/_generated_api_client/models/column_type.py +0 -14
  114. orca_sdk/_generated_api_client/models/conflict_error_response.py +0 -80
  115. orca_sdk/_generated_api_client/models/create_api_key_request.py +0 -99
  116. orca_sdk/_generated_api_client/models/create_api_key_response.py +0 -126
  117. orca_sdk/_generated_api_client/models/create_labeled_memoryset_request.py +0 -259
  118. orca_sdk/_generated_api_client/models/create_rac_model_request.py +0 -209
  119. orca_sdk/_generated_api_client/models/datasource_metadata.py +0 -142
  120. orca_sdk/_generated_api_client/models/delete_memories_request.py +0 -70
  121. orca_sdk/_generated_api_client/models/embed_request.py +0 -127
  122. orca_sdk/_generated_api_client/models/embedding_finetuning_method.py +0 -9
  123. orca_sdk/_generated_api_client/models/evaluation_request.py +0 -180
  124. orca_sdk/_generated_api_client/models/evaluation_response.py +0 -140
  125. orca_sdk/_generated_api_client/models/feedback_type.py +0 -9
  126. orca_sdk/_generated_api_client/models/field_validation_error.py +0 -103
  127. orca_sdk/_generated_api_client/models/filter_item.py +0 -231
  128. orca_sdk/_generated_api_client/models/filter_item_field_type_0_item.py +0 -15
  129. orca_sdk/_generated_api_client/models/filter_item_field_type_2_item_type_1.py +0 -16
  130. orca_sdk/_generated_api_client/models/filter_item_op.py +0 -16
  131. orca_sdk/_generated_api_client/models/find_duplicates_analysis_result.py +0 -70
  132. orca_sdk/_generated_api_client/models/finetune_embedding_model_request.py +0 -259
  133. orca_sdk/_generated_api_client/models/finetune_embedding_model_request_training_args.py +0 -66
  134. orca_sdk/_generated_api_client/models/finetuned_embedding_model_metadata.py +0 -166
  135. orca_sdk/_generated_api_client/models/get_memories_request.py +0 -70
  136. orca_sdk/_generated_api_client/models/internal_server_error_response.py +0 -80
  137. orca_sdk/_generated_api_client/models/label_class_metrics.py +0 -108
  138. orca_sdk/_generated_api_client/models/label_prediction_memory_lookup.py +0 -274
  139. orca_sdk/_generated_api_client/models/label_prediction_memory_lookup_metadata.py +0 -68
  140. orca_sdk/_generated_api_client/models/label_prediction_result.py +0 -101
  141. orca_sdk/_generated_api_client/models/label_prediction_with_memories_and_feedback.py +0 -232
  142. orca_sdk/_generated_api_client/models/labeled_memory.py +0 -197
  143. orca_sdk/_generated_api_client/models/labeled_memory_insert.py +0 -108
  144. orca_sdk/_generated_api_client/models/labeled_memory_insert_metadata.py +0 -68
  145. orca_sdk/_generated_api_client/models/labeled_memory_lookup.py +0 -258
  146. orca_sdk/_generated_api_client/models/labeled_memory_lookup_metadata.py +0 -68
  147. orca_sdk/_generated_api_client/models/labeled_memory_metadata.py +0 -68
  148. orca_sdk/_generated_api_client/models/labeled_memory_metrics.py +0 -277
  149. orca_sdk/_generated_api_client/models/labeled_memory_update.py +0 -171
  150. orca_sdk/_generated_api_client/models/labeled_memory_update_metadata_type_0.py +0 -68
  151. orca_sdk/_generated_api_client/models/labeled_memoryset_metadata.py +0 -195
  152. orca_sdk/_generated_api_client/models/list_analyses_memoryset_name_or_id_analysis_get_type_type_0.py +0 -9
  153. orca_sdk/_generated_api_client/models/list_memories_request.py +0 -104
  154. orca_sdk/_generated_api_client/models/list_predictions_request.py +0 -234
  155. orca_sdk/_generated_api_client/models/list_predictions_request_sort_item_item_type_0.py +0 -9
  156. orca_sdk/_generated_api_client/models/list_predictions_request_sort_item_item_type_1.py +0 -9
  157. orca_sdk/_generated_api_client/models/lookup_request.py +0 -81
  158. orca_sdk/_generated_api_client/models/memoryset_analysis_request.py +0 -83
  159. orca_sdk/_generated_api_client/models/memoryset_analysis_request_type.py +0 -9
  160. orca_sdk/_generated_api_client/models/memoryset_analysis_response.py +0 -180
  161. orca_sdk/_generated_api_client/models/memoryset_analysis_response_config.py +0 -66
  162. orca_sdk/_generated_api_client/models/memoryset_analysis_response_type.py +0 -9
  163. orca_sdk/_generated_api_client/models/not_found_error_response.py +0 -100
  164. orca_sdk/_generated_api_client/models/not_found_error_response_resource_type_0.py +0 -20
  165. orca_sdk/_generated_api_client/models/prediction_feedback.py +0 -157
  166. orca_sdk/_generated_api_client/models/prediction_feedback_category.py +0 -115
  167. orca_sdk/_generated_api_client/models/prediction_feedback_request.py +0 -122
  168. orca_sdk/_generated_api_client/models/prediction_feedback_result.py +0 -102
  169. orca_sdk/_generated_api_client/models/prediction_request.py +0 -169
  170. orca_sdk/_generated_api_client/models/pretrained_embedding_model_metadata.py +0 -97
  171. orca_sdk/_generated_api_client/models/pretrained_embedding_model_name.py +0 -11
  172. orca_sdk/_generated_api_client/models/rac_head_type.py +0 -11
  173. orca_sdk/_generated_api_client/models/rac_model_metadata.py +0 -191
  174. orca_sdk/_generated_api_client/models/service_unavailable_error_response.py +0 -80
  175. orca_sdk/_generated_api_client/models/task.py +0 -198
  176. orca_sdk/_generated_api_client/models/task_status.py +0 -14
  177. orca_sdk/_generated_api_client/models/task_status_info.py +0 -133
  178. orca_sdk/_generated_api_client/models/unauthenticated_error_response.py +0 -72
  179. orca_sdk/_generated_api_client/models/unauthorized_error_response.py +0 -80
  180. orca_sdk/_generated_api_client/models/unprocessable_input_error_response.py +0 -94
  181. orca_sdk/_generated_api_client/models/update_prediction_request.py +0 -93
  182. orca_sdk/_generated_api_client/py.typed +0 -1
  183. orca_sdk/_generated_api_client/types.py +0 -56
  184. orca_sdk/_utils/task.py +0 -73
  185. orca_sdk-0.1.1.dist-info/RECORD +0 -175
@@ -2,60 +2,79 @@ import pytest
2
2
 
3
3
  from .classification_model import ClassificationModel
4
4
  from .memoryset import LabeledMemoryLookup
5
- from .telemetry import FeedbackCategory, LabelPrediction
5
+ from .telemetry import ClassificationPrediction, FeedbackCategory
6
6
 
7
7
 
8
- def test_get_prediction(model: ClassificationModel):
9
- predictions = model.predict(["Do you love soup?", "Are cats cute?"])
10
- prediction_with_telemetry = LabelPrediction.get(predictions[0].prediction_id)
8
+ def test_get_prediction(classification_model: ClassificationModel):
9
+ predictions = classification_model.predict(["Do you love soup?", "Are cats cute?"])
10
+ assert len(predictions) == 2
11
+ assert predictions[0].prediction_id is not None
12
+ assert predictions[1].prediction_id is not None
13
+ prediction_with_telemetry = ClassificationPrediction.get(predictions[0].prediction_id)
11
14
  assert prediction_with_telemetry is not None
12
15
  assert prediction_with_telemetry.label == 0
13
16
  assert prediction_with_telemetry.input_value == "Do you love soup?"
14
17
 
15
18
 
16
- def test_get_predictions(model: ClassificationModel):
17
- predictions = model.predict(["Do you love soup?", "Are cats cute?"])
18
- prediction_with_telemetry = LabelPrediction.get([predictions[0].prediction_id, predictions[1].prediction_id])
19
+ def test_get_predictions(classification_model: ClassificationModel):
20
+ predictions = classification_model.predict(["Do you love soup?", "Are cats cute?"])
21
+ assert len(predictions) == 2
22
+ assert predictions[0].prediction_id is not None
23
+ assert predictions[1].prediction_id is not None
24
+ prediction_with_telemetry = ClassificationPrediction.get(
25
+ [predictions[0].prediction_id, predictions[1].prediction_id]
26
+ )
19
27
  assert len(prediction_with_telemetry) == 2
20
28
  assert prediction_with_telemetry[0].label == 0
21
29
  assert prediction_with_telemetry[0].input_value == "Do you love soup?"
30
+ assert prediction_with_telemetry[1].label == 1
22
31
 
23
32
 
24
- def test_get_prediction_memory_lookups(model: ClassificationModel):
25
- prediction = model.predict("Do you love soup?")
33
+ def test_get_predictions_with_expected_label_match(classification_model: ClassificationModel):
34
+ classification_model.predict(
35
+ ["Do you love soup?", "Are cats cute?"], expected_labels=[0, 0], tags={"expected_label_match"}
36
+ )
37
+ classification_model.predict("no expectations", tags={"expected_label_match"})
38
+ assert len(classification_model.predictions(tag="expected_label_match")) == 3
39
+ assert len(classification_model.predictions(expected_label_match=True, tag="expected_label_match")) == 1
40
+ assert len(classification_model.predictions(expected_label_match=False, tag="expected_label_match")) == 1
41
+
42
+
43
+ def test_get_prediction_memory_lookups(classification_model: ClassificationModel):
44
+ prediction = classification_model.predict("Do you love soup?")
26
45
  assert isinstance(prediction.memory_lookups, list)
27
46
  assert len(prediction.memory_lookups) > 0
28
47
  assert all(isinstance(lookup, LabeledMemoryLookup) for lookup in prediction.memory_lookups)
29
48
 
30
49
 
31
- def test_record_feedback(model: ClassificationModel):
32
- prediction = model.predict("Do you love soup?")
50
+ def test_record_feedback(classification_model: ClassificationModel):
51
+ prediction = classification_model.predict("Do you love soup?")
33
52
  assert "correct" not in prediction.feedback
34
53
  prediction.record_feedback(category="correct", value=prediction.label == 0)
35
54
  assert prediction.feedback["correct"] is True
36
55
 
37
56
 
38
- def test_record_feedback_with_invalid_value(model: ClassificationModel):
57
+ def test_record_feedback_with_invalid_value(classification_model: ClassificationModel):
39
58
  with pytest.raises(ValueError, match=r"Invalid input.*"):
40
- model.predict("Do you love soup?").record_feedback(category="correct", value="not a bool") # type: ignore
59
+ classification_model.predict("Do you love soup?").record_feedback(category="correct", value="not a bool") # type: ignore
41
60
 
42
61
 
43
- def test_record_feedback_with_inconsistent_value_for_category(model: ClassificationModel):
44
- model.predict("Do you love soup?").record_feedback(category="correct", value=True)
62
+ def test_record_feedback_with_inconsistent_value_for_category(classification_model: ClassificationModel):
63
+ classification_model.predict("Do you love soup?").record_feedback(category="correct", value=True)
45
64
  with pytest.raises(ValueError, match=r"Invalid input.*"):
46
- model.predict("Do you love soup?").record_feedback(category="correct", value=-1.0)
65
+ classification_model.predict("Do you love soup?").record_feedback(category="correct", value=-1.0)
47
66
 
48
67
 
49
- def test_delete_feedback(model: ClassificationModel):
50
- prediction = model.predict("Do you love soup?")
68
+ def test_delete_feedback(classification_model: ClassificationModel):
69
+ prediction = classification_model.predict("Do you love soup?")
51
70
  prediction.record_feedback(category="test_delete", value=True)
52
71
  assert "test_delete" in prediction.feedback
53
72
  prediction.delete_feedback("test_delete")
54
73
  assert "test_delete" not in prediction.feedback
55
74
 
56
75
 
57
- def test_list_feedback_categories(model: ClassificationModel):
58
- prediction = model.predict("Do you love soup?")
76
+ def test_list_feedback_categories(classification_model: ClassificationModel):
77
+ prediction = classification_model.predict("Do you love soup?")
59
78
  prediction.record_feedback(category="correct", value=True)
60
79
  prediction.record_feedback(category="confidence", value=0.8)
61
80
  categories = FeedbackCategory.all()
@@ -64,8 +83,8 @@ def test_list_feedback_categories(model: ClassificationModel):
64
83
  assert any(c.name == "confidence" and c.value_type == float for c in categories)
65
84
 
66
85
 
67
- def test_drop_feedback_category(model: ClassificationModel):
68
- prediction = model.predict("Do you love soup?")
86
+ def test_drop_feedback_category(classification_model: ClassificationModel):
87
+ prediction = classification_model.predict("Do you love soup?")
69
88
  prediction.record_feedback(category="test_category", value=True)
70
89
  assert any(c.name == "test_category" for c in FeedbackCategory.all())
71
90
  FeedbackCategory.drop("test_category")
@@ -74,8 +93,8 @@ def test_drop_feedback_category(model: ClassificationModel):
74
93
  assert "test_category" not in prediction.feedback
75
94
 
76
95
 
77
- def test_update_prediction(model: ClassificationModel):
78
- prediction = model.predict("Do you love soup?")
96
+ def test_update_prediction(classification_model: ClassificationModel):
97
+ prediction = classification_model.predict("Do you love soup?")
79
98
  assert prediction.expected_label is None
80
99
  assert prediction.tags == set()
81
100
  # update expected label
@@ -1,24 +1,25 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: orca_sdk
3
- Version: 0.1.1
3
+ Version: 0.1.2
4
4
  Summary: SDK for interacting with Orca Services
5
- License: Apache-2.0
5
+ License-Expression: Apache-2.0
6
6
  Author: Orca DB Inc.
7
7
  Author-email: dev-rel@orcadb.ai
8
- Requires-Python: >=3.10,<3.13
9
- Classifier: License :: OSI Approved :: Apache Software License
8
+ Requires-Python: >=3.11,<3.14
10
9
  Classifier: Programming Language :: Python :: 3
11
- Classifier: Programming Language :: Python :: 3.10
12
10
  Classifier: Programming Language :: Python :: 3.11
13
11
  Classifier: Programming Language :: Python :: 3.12
14
- Requires-Dist: attrs (>=22.2.0)
15
- Requires-Dist: datasets (>=3.1.0,<4.0.0)
16
- Requires-Dist: gradio (==5.13.0)
17
- Requires-Dist: httpx (>=0.20.0,<0.29.0)
18
- Requires-Dist: pandas (>=2.2.3,<3.0.0)
19
- Requires-Dist: pyarrow (>=18.0.0,<19.0.0)
20
- Requires-Dist: python-dateutil (>=2.8.0,<3.0.0)
21
- Requires-Dist: torch (>=2.5.1,<3.0.0)
12
+ Classifier: Programming Language :: Python :: 3.13
13
+ Requires-Dist: datasets (>=3.1.0,<4)
14
+ Requires-Dist: gradio (>=5.44.1,<6)
15
+ Requires-Dist: httpx (>=0.28.1)
16
+ Requires-Dist: httpx-retries (>=0.4.3,<0.5.0)
17
+ Requires-Dist: numpy (>=2.1.0,<3)
18
+ Requires-Dist: pandas (>=2.2.3,<3)
19
+ Requires-Dist: pyarrow (>=18.0.0,<19)
20
+ Requires-Dist: python-dotenv (>=1.1.0)
21
+ Requires-Dist: scikit-learn (>=1.6.1,<2)
22
+ Requires-Dist: torch (>=2.8.0,<3)
22
23
  Description-Content-Type: text/markdown
23
24
 
24
25
  <!--
@@ -45,7 +46,7 @@ You can find the documentation for all things Orca at [docs.orcadb.ai](https://d
45
46
 
46
47
  ## Installation
47
48
 
48
- Orca SDK is compatible with Python 3.10 or higher and is available on [PyPI](https://pypi.org/project/orca_sdk/). You can install it with your favorite python package manager:
49
+ OrcaSDK is compatible with Python 3.10 or higher and is available on [PyPI](https://pypi.org/project/orca_sdk/). You can install it with your favorite python package manager:
49
50
 
50
51
  - Pip: `pip install orca_sdk`
51
52
  - Conda: `conda install orca_sdk`
@@ -69,9 +70,26 @@ model = ClassificationModel("my_model", memoryset)
69
70
 
70
71
  # Make predictions
71
72
  prediction = model.predict("my input")
73
+
74
+ # Get Action Recommendation
75
+ action, rationale = prediction.recommend_action()
76
+ print(f"Recommended action: {action}")
77
+ print(f"Rationale: {rationale}")
78
+
79
+ # Generate and add synthetic memory suggestions
80
+ if action == "add_memories":
81
+ suggestions = prediction.generate_memory_suggestions(num_memories=3)
82
+
83
+ # Review suggestions
84
+ for suggestion in suggestions:
85
+ print(f"Suggested: '{suggestion['value']}' -> {suggestion['label']}")
86
+
87
+ # Add suggestions to memoryset
88
+ model.memoryset.insert(suggestions)
89
+ print(f"Added {len(suggestions)} new memories to improve model performance!")
72
90
  ```
73
91
 
74
- For a more detailed walkthrough, check out our [Quick Start Guide](https://docs.orcadb.ai/quickstart/).
92
+ For a more detailed walkthrough, check out our [Quick Start Guide](https://docs.orcadb.ai/quickstart-sdk/).
75
93
 
76
94
  ## Support
77
95
 
@@ -0,0 +1,40 @@
1
+ orca_sdk/__init__.py,sha256=bNbT7BlBGo5ZWYHBiPUz77dIc344l7czz7AsuBrdzyM,1001
2
+ orca_sdk/_shared/__init__.py,sha256=3Kt0Hu3QLI5FEp9nqGTxqAm3hAoBJKcagfaGQZ-lbJQ,223
3
+ orca_sdk/_shared/metrics.py,sha256=LEZfAUWUtUWv_WWy9F_yjGLlUQHQpmR9WxG2fbKxa7U,14419
4
+ orca_sdk/_shared/metrics_test.py,sha256=Rw1MaH37FppNsMnW8Ir9vMd8xxnZt3eo2Iypx1igtBI,9440
5
+ orca_sdk/_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ orca_sdk/_utils/analysis_ui.py,sha256=nT-M_YcNRCVPQzvuqYNFKnNHhYkADYBvq1GlIUePrWw,9232
7
+ orca_sdk/_utils/analysis_ui_style.css,sha256=q_ba_-_KtgztepHg829zLzypaxKayl7ySC1-oYDzV3k,836
8
+ orca_sdk/_utils/auth.py,sha256=Yf39jucuAkrM-TbTsLm_iRgLbLEcAIRzlHrCqgy8RiM,2483
9
+ orca_sdk/_utils/auth_test.py,sha256=ygVWv1Ex53LaxIP7p2hzPHl8l9qYyBD5IGmEFJMps6s,1056
10
+ orca_sdk/_utils/common.py,sha256=wUm2pNDWytEecC5WiDWd02-yCZw3Akx0bIutG4lHsFA,805
11
+ orca_sdk/_utils/data_parsing.py,sha256=gkAwWEC8qRt3vRUObe7n7Pr0azOayNwc2yFY04WFp7E,5220
12
+ orca_sdk/_utils/data_parsing_test.py,sha256=fNEYzPzE1jt3KWE2Kj91KqIeuv-L5REHFAa98zkNGSQ,8962
13
+ orca_sdk/_utils/pagination.py,sha256=986z0QPZixrZeurJWorF6eMgnTRdDF84AagEA6qNbMw,4245
14
+ orca_sdk/_utils/pagination_test.py,sha256=BUylCrcHnwoKEBmMUzVr0lwLpA35ivcCwdBK4rMw9y8,4887
15
+ orca_sdk/_utils/prediction_result_ui.css,sha256=sqBlkRLnovb5X5EcUDdB6iGpH63nVRlTW4uAmXuD0WM,258
16
+ orca_sdk/_utils/prediction_result_ui.py,sha256=Ur_FY7dz3oWNmtPiP3Wl3yRlEMgK8q9UfT-SDu9UPxA,4805
17
+ orca_sdk/_utils/tqdm_file_reader.py,sha256=Lw7Cg1UgNuRUoN6jjqZb-IlV00H-kbRcrZLdudr1GxE,324
18
+ orca_sdk/_utils/value_parser.py,sha256=c3qMABCCDQcIjn9N1orYYnlRwDW9JWdGwW_2TDZPLdI,1286
19
+ orca_sdk/_utils/value_parser_test.py,sha256=OybsiC-Obi32RRi9NIuwrVBRAnlyPMV1xVAaevSrb7M,1079
20
+ orca_sdk/classification_model.py,sha256=A_3efuBSYF3hUxu1VbSlZNpzBF9CwuGEEtvgSPyTl9M,32696
21
+ orca_sdk/classification_model_test.py,sha256=fJx4s3fcKwQ1z-K0LsmbM9gVakWjejs595WeM2AlnR8,20405
22
+ orca_sdk/client.py,sha256=8SJBt38AzmQNJQvkmO9tx1yqlkW8kBMcNNJgRD5ZtLk,123279
23
+ orca_sdk/conftest.py,sha256=p5ae1XS0Ra9l-OuQzaUw3YyM0lfsA1GpK7grSqKnKPc,9589
24
+ orca_sdk/credentials.py,sha256=YuWipb5r1R_uPRe0nrm8mbbrfrXKFimgFOxny9bzAbI,5063
25
+ orca_sdk/credentials_test.py,sha256=ZIIZtfv507UyIIgLhnECWn6KS5NjbfHMdT31f8k0zJM,1623
26
+ orca_sdk/datasource.py,sha256=BfjutQ12cuvjMSyPTTiJVopKgDwy8PxoRkbfDM7tHXw,20262
27
+ orca_sdk/datasource_test.py,sha256=mVEYWZVpgpGo9RDXmcqlXEIZeGDPiLG4K87wS2-nJuc,11810
28
+ orca_sdk/embedding_model.py,sha256=sgOEJE-U99qU3qkKAdtZbZqNXY48wjkHqwOQ9KZLd3Q,27285
29
+ orca_sdk/embedding_model_test.py,sha256=1aELyCuIzxSxUg7Z4tYtNOd8-hV5hFb-gsZTNh712OQ,7765
30
+ orca_sdk/job.py,sha256=yHmHgm5vf2DHJlvAGgA2o1mNbKs3yoJ5RMeUpPSwl7E,12858
31
+ orca_sdk/job_test.py,sha256=nRSWxd_1UIfrj9oMVvrXjt6OBkBpddYAjb2y6P-DTUg,4327
32
+ orca_sdk/memoryset.py,sha256=L6Y1Hw6D93XHYUdz0zPcTsgmJZWcODSTLOqXFLN-T3A,85854
33
+ orca_sdk/memoryset_test.py,sha256=hmbRERbea7vEWlSLJeeZcH4FEKXIDoUyQci7KdatfiU,21400
34
+ orca_sdk/regression_model.py,sha256=YNrpp9G-kT9YL2Dl5IAZMVzyS7N4NNESWWxxjhFQJ8c,25987
35
+ orca_sdk/regression_model_test.py,sha256=J8u9xZ9Y1qmMcKRTB0wyPDABvr0C3lHHI_FaGwQOmPs,15386
36
+ orca_sdk/telemetry.py,sha256=qTEPkOlqjxsPaS-HR5Jh5ZnIvuF58aIy5OpzA-wQkAE,25713
37
+ orca_sdk/telemetry_test.py,sha256=eT66C5lFdNg-pQdo2I__BP7Tn5fTc9aTkVo9ZhWwhU0,5519
38
+ orca_sdk-0.1.2.dist-info/METADATA,sha256=SMUalU7RTXbbjSdHF7H7zOE2CigaflRRa-yKNzat3rE,3659
39
+ orca_sdk-0.1.2.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
40
+ orca_sdk-0.1.2.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.9.0
2
+ Generator: poetry-core 2.2.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,3 +0,0 @@
1
- import logging
2
-
3
- logging.getLogger("httpx").setLevel(logging.WARNING)
@@ -1,193 +0,0 @@
1
- """Contains methods for accessing the API"""
2
-
3
- from .auth.check_authentication_auth_get import sync as check_authentication
4
- from .auth.create_api_key_auth_api_key_post import sync as create_api_key
5
- from .auth.delete_api_key_auth_api_key_name_or_id_delete import sync as delete_api_key
6
- from .auth.delete_org_auth_org_delete import sync as delete_org
7
- from .auth.list_api_keys_auth_api_key_get import sync as list_api_keys
8
- from .classification_model.create_evaluation_classification_model_model_name_or_id_evaluation_post import (
9
- sync as create_evaluation,
10
- )
11
- from .classification_model.create_model_classification_model_post import (
12
- sync as create_model,
13
- )
14
- from .classification_model.delete_evaluation_classification_model_model_name_or_id_evaluation_task_id_delete import (
15
- sync as delete_evaluation,
16
- )
17
- from .classification_model.delete_model_classification_model_name_or_id_delete import (
18
- sync as delete_model,
19
- )
20
- from .classification_model.get_evaluation_classification_model_model_name_or_id_evaluation_task_id_get import (
21
- sync as get_evaluation,
22
- )
23
- from .classification_model.get_model_classification_model_name_or_id_get import (
24
- sync as get_model,
25
- )
26
- from .classification_model.list_evaluations_classification_model_model_name_or_id_evaluation_get import (
27
- sync as list_evaluations,
28
- )
29
- from .classification_model.list_models_classification_model_get import (
30
- sync as list_models,
31
- )
32
- from .classification_model.predict_gpu_classification_model_name_or_id_prediction_post import (
33
- sync as predict_gpu,
34
- )
35
- from .datasource.create_datasource_datasource_post import sync as create_datasource
36
- from .datasource.delete_datasource_datasource_name_or_id_delete import (
37
- sync as delete_datasource,
38
- )
39
- from .datasource.get_datasource_datasource_name_or_id_get import sync as get_datasource
40
- from .datasource.list_datasources_datasource_get import sync as list_datasources
41
- from .default.healthcheck_get import sync as healthcheck
42
- from .default.healthcheck_gpu_get import sync as healthcheck_gpu
43
- from .finetuned_embedding_model.create_finetuned_embedding_model_finetuned_embedding_model_post import (
44
- sync as create_finetuned_embedding_model,
45
- )
46
- from .finetuned_embedding_model.delete_finetuned_embedding_model_finetuned_embedding_model_name_or_id_delete import (
47
- sync as delete_finetuned_embedding_model,
48
- )
49
- from .finetuned_embedding_model.embed_with_finetuned_model_gpu_finetuned_embedding_model_name_or_id_embedding_post import (
50
- sync as embed_with_finetuned_model_gpu,
51
- )
52
- from .finetuned_embedding_model.get_finetuned_embedding_model_finetuned_embedding_model_name_or_id_get import (
53
- sync as get_finetuned_embedding_model,
54
- )
55
- from .finetuned_embedding_model.list_finetuned_embedding_models_finetuned_embedding_model_get import (
56
- sync as list_finetuned_embedding_models,
57
- )
58
- from .memoryset.clone_memoryset_memoryset_name_or_id_clone_post import (
59
- sync as clone_memoryset,
60
- )
61
- from .memoryset.create_analysis_memoryset_name_or_id_analysis_post import (
62
- sync as create_analysis,
63
- )
64
- from .memoryset.create_memoryset_memoryset_post import sync as create_memoryset
65
- from .memoryset.delete_memories_memoryset_name_or_id_memories_delete_post import (
66
- sync as delete_memories,
67
- )
68
- from .memoryset.delete_memory_memoryset_name_or_id_memory_memory_id_delete import (
69
- sync as delete_memory,
70
- )
71
- from .memoryset.delete_memoryset_memoryset_name_or_id_delete import (
72
- sync as delete_memoryset,
73
- )
74
- from .memoryset.get_analysis_memoryset_name_or_id_analysis_analysis_task_id_get import (
75
- sync as get_analysis,
76
- )
77
- from .memoryset.get_memories_memoryset_name_or_id_memories_get_post import (
78
- sync as get_memories,
79
- )
80
- from .memoryset.get_memory_memoryset_name_or_id_memory_memory_id_get import (
81
- sync as get_memory,
82
- )
83
- from .memoryset.get_memoryset_memoryset_name_or_id_get import sync as get_memoryset
84
- from .memoryset.insert_memories_gpu_memoryset_name_or_id_memory_post import (
85
- sync as insert_memories_gpu,
86
- )
87
- from .memoryset.list_analyses_memoryset_name_or_id_analysis_get import (
88
- sync as list_analyses,
89
- )
90
- from .memoryset.list_memorysets_memoryset_get import sync as list_memorysets
91
- from .memoryset.memoryset_lookup_gpu_memoryset_name_or_id_lookup_post import (
92
- sync as memoryset_lookup_gpu,
93
- )
94
- from .memoryset.query_memoryset_memoryset_name_or_id_memories_post import (
95
- sync as query_memoryset,
96
- )
97
- from .memoryset.update_memories_gpu_memoryset_name_or_id_memories_patch import (
98
- sync as update_memories_gpu,
99
- )
100
- from .memoryset.update_memory_gpu_memoryset_name_or_id_memory_patch import (
101
- sync as update_memory_gpu,
102
- )
103
- from .pretrained_embedding_model.embed_with_pretrained_model_gpu_pretrained_embedding_model_model_name_embedding_post import (
104
- sync as embed_with_pretrained_model_gpu,
105
- )
106
- from .pretrained_embedding_model.get_pretrained_embedding_model_pretrained_embedding_model_model_name_get import (
107
- sync as get_pretrained_embedding_model,
108
- )
109
- from .pretrained_embedding_model.list_pretrained_embedding_models_pretrained_embedding_model_get import (
110
- sync as list_pretrained_embedding_models,
111
- )
112
- from .task.abort_task_task_task_id_abort_delete import sync as abort_task
113
- from .task.get_task_status_task_task_id_status_get import sync as get_task_status_task
114
- from .task.list_tasks_task_get import sync as list_tasks
115
- from .telemetry.drop_feedback_category_with_data_telemetry_feedback_category_name_or_id_delete import (
116
- sync as drop_feedback_category_with_data,
117
- )
118
- from .telemetry.get_feedback_category_telemetry_feedback_category_name_or_id_get import (
119
- sync as get_feedback_category,
120
- )
121
- from .telemetry.get_prediction_telemetry_prediction_prediction_id_get import (
122
- sync as get_prediction,
123
- )
124
- from .telemetry.list_feedback_categories_telemetry_feedback_category_get import (
125
- sync as list_feedback_categories,
126
- )
127
- from .telemetry.list_predictions_telemetry_prediction_post import (
128
- sync as list_predictions,
129
- )
130
- from .telemetry.record_prediction_feedback_telemetry_prediction_feedback_put import (
131
- sync as record_prediction_feedback,
132
- )
133
- from .telemetry.update_prediction_telemetry_prediction_prediction_id_patch import (
134
- sync as update_prediction,
135
- )
136
-
137
- __all__ = [
138
- "list_datasources",
139
- "create_datasource",
140
- "delete_datasource",
141
- "get_datasource",
142
- "check_authentication",
143
- "create_api_key",
144
- "list_api_keys",
145
- "delete_api_key",
146
- "delete_org",
147
- "get_finetuned_embedding_model",
148
- "create_finetuned_embedding_model",
149
- "list_finetuned_embedding_models",
150
- "delete_finetuned_embedding_model",
151
- "embed_with_finetuned_model_gpu",
152
- "list_pretrained_embedding_models",
153
- "get_pretrained_embedding_model",
154
- "embed_with_pretrained_model_gpu",
155
- "healthcheck",
156
- "healthcheck_gpu",
157
- "create_analysis",
158
- "update_memory_gpu",
159
- "get_memoryset",
160
- "get_memories",
161
- "delete_memoryset",
162
- "list_analyses",
163
- "delete_memories",
164
- "clone_memoryset",
165
- "query_memoryset",
166
- "list_memorysets",
167
- "create_memoryset",
168
- "get_memory",
169
- "insert_memories_gpu",
170
- "memoryset_lookup_gpu",
171
- "update_memories_gpu",
172
- "delete_memory",
173
- "get_analysis",
174
- "get_task_status_task",
175
- "abort_task",
176
- "list_tasks",
177
- "list_predictions",
178
- "update_prediction",
179
- "list_feedback_categories",
180
- "get_prediction",
181
- "drop_feedback_category_with_data",
182
- "record_prediction_feedback",
183
- "get_feedback_category",
184
- "create_model",
185
- "delete_model",
186
- "predict_gpu",
187
- "get_model",
188
- "delete_evaluation",
189
- "create_evaluation",
190
- "list_evaluations",
191
- "list_models",
192
- "get_evaluation",
193
- ]
File without changes
@@ -1,128 +0,0 @@
1
- """
2
- This file is generated by the openapi-python-client tool via the generate_api_client.py script
3
-
4
- It is a customized template from the openapi-python-client tool's default template:
5
- https://github.com/openapi-generators/openapi-python-client/blob/861ef5622f10fc96d240dc9becb0edf94e61446c/openapi_python_client/templates/endpoint_module.py.jinja
6
-
7
- The main changes are:
8
- - Update the API call responses to either return the successful response type or raise an error by:
9
- - Updating the _parse_response function to raise an error if the response status code is not in the 2xx range
10
- - Inject a client into every method via a context manager
11
- """
12
-
13
- from http import HTTPStatus
14
- from typing import Any, cast
15
-
16
- import httpx
17
-
18
- from ...client import _client_context
19
- from ...errors import get_error_for_response
20
- from ...types import Response
21
-
22
-
23
- def _get_kwargs() -> dict[str, Any]:
24
- _kwargs: dict[str, Any] = {
25
- "method": "get",
26
- "url": "/auth/",
27
- }
28
-
29
- return _kwargs
30
-
31
-
32
- def _parse_response(*, response: httpx.Response) -> bool:
33
- if response.status_code == 200:
34
- response_200 = cast(bool, response.json())
35
- return response_200
36
- if response.status_code == 401:
37
- raise get_error_for_response(response)
38
- if response.status_code == 500:
39
- raise get_error_for_response(response)
40
- if response.status_code == 503:
41
- raise get_error_for_response(response)
42
- if response.status_code == 422:
43
- raise get_error_for_response(response)
44
-
45
-
46
- def _build_response(*, response: httpx.Response) -> Response[bool]:
47
- return Response(
48
- status_code=HTTPStatus(response.status_code),
49
- content=response.content,
50
- headers=response.headers,
51
- parsed=_parse_response(response=response),
52
- )
53
-
54
-
55
- def sync_detailed() -> Response[bool]:
56
- """Check Authentication
57
-
58
- Returns true if the api key header is valid for the org (will be false for admin api key)
59
-
60
- Raises:
61
- errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
62
- httpx.TimeoutException: If the request takes longer than Client.timeout.
63
-
64
- Returns:
65
- Response[bool]
66
- """
67
-
68
- kwargs = _get_kwargs()
69
-
70
- with _client_context() as client:
71
- response = client.get_httpx_client().request(
72
- **kwargs,
73
- )
74
-
75
- return _build_response(response=response)
76
-
77
-
78
- def sync() -> bool:
79
- """Check Authentication
80
-
81
- Returns true if the api key header is valid for the org (will be false for admin api key)
82
-
83
- Raises:
84
- errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
85
- httpx.TimeoutException: If the request takes longer than Client.timeout.
86
-
87
- Returns:
88
- bool
89
- """
90
-
91
- return sync_detailed().parsed
92
-
93
-
94
- async def asyncio_detailed() -> Response[bool]:
95
- """Check Authentication
96
-
97
- Returns true if the api key header is valid for the org (will be false for admin api key)
98
-
99
- Raises:
100
- errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
101
- httpx.TimeoutException: If the request takes longer than Client.timeout.
102
-
103
- Returns:
104
- Response[bool]
105
- """
106
-
107
- kwargs = _get_kwargs()
108
-
109
- with _client_context() as client:
110
- response = await client.get_async_httpx_client().request(**kwargs)
111
-
112
- return _build_response(response=response)
113
-
114
-
115
- async def asyncio() -> bool:
116
- """Check Authentication
117
-
118
- Returns true if the api key header is valid for the org (will be false for admin api key)
119
-
120
- Raises:
121
- errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
122
- httpx.TimeoutException: If the request takes longer than Client.timeout.
123
-
124
- Returns:
125
- bool
126
- """
127
-
128
- return (await asyncio_detailed()).parsed