orca-sdk 0.1.1__py3-none-any.whl → 0.1.3__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 (186) 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 +31 -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/async_client.py +3795 -0
  17. orca_sdk/classification_model.py +601 -129
  18. orca_sdk/classification_model_test.py +415 -117
  19. orca_sdk/client.py +3787 -0
  20. orca_sdk/conftest.py +184 -38
  21. orca_sdk/credentials.py +162 -20
  22. orca_sdk/credentials_test.py +100 -16
  23. orca_sdk/datasource.py +268 -68
  24. orca_sdk/datasource_test.py +266 -18
  25. orca_sdk/embedding_model.py +434 -82
  26. orca_sdk/embedding_model_test.py +66 -33
  27. orca_sdk/job.py +343 -0
  28. orca_sdk/job_test.py +108 -0
  29. orca_sdk/memoryset.py +1690 -324
  30. orca_sdk/memoryset_test.py +456 -119
  31. orca_sdk/regression_model.py +694 -0
  32. orca_sdk/regression_model_test.py +378 -0
  33. orca_sdk/telemetry.py +460 -143
  34. orca_sdk/telemetry_test.py +43 -24
  35. {orca_sdk-0.1.1.dist-info → orca_sdk-0.1.3.dist-info}/METADATA +34 -16
  36. orca_sdk-0.1.3.dist-info/RECORD +41 -0
  37. {orca_sdk-0.1.1.dist-info → orca_sdk-0.1.3.dist-info}/WHEEL +1 -1
  38. orca_sdk/_generated_api_client/__init__.py +0 -3
  39. orca_sdk/_generated_api_client/api/__init__.py +0 -193
  40. orca_sdk/_generated_api_client/api/auth/__init__.py +0 -0
  41. orca_sdk/_generated_api_client/api/auth/check_authentication_auth_get.py +0 -128
  42. orca_sdk/_generated_api_client/api/auth/create_api_key_auth_api_key_post.py +0 -170
  43. orca_sdk/_generated_api_client/api/auth/delete_api_key_auth_api_key_name_or_id_delete.py +0 -156
  44. orca_sdk/_generated_api_client/api/auth/delete_org_auth_org_delete.py +0 -130
  45. orca_sdk/_generated_api_client/api/auth/list_api_keys_auth_api_key_get.py +0 -127
  46. orca_sdk/_generated_api_client/api/classification_model/__init__.py +0 -0
  47. orca_sdk/_generated_api_client/api/classification_model/create_evaluation_classification_model_model_name_or_id_evaluation_post.py +0 -183
  48. orca_sdk/_generated_api_client/api/classification_model/create_model_classification_model_post.py +0 -170
  49. orca_sdk/_generated_api_client/api/classification_model/delete_evaluation_classification_model_model_name_or_id_evaluation_task_id_delete.py +0 -168
  50. orca_sdk/_generated_api_client/api/classification_model/delete_model_classification_model_name_or_id_delete.py +0 -154
  51. orca_sdk/_generated_api_client/api/classification_model/get_evaluation_classification_model_model_name_or_id_evaluation_task_id_get.py +0 -170
  52. orca_sdk/_generated_api_client/api/classification_model/get_model_classification_model_name_or_id_get.py +0 -156
  53. orca_sdk/_generated_api_client/api/classification_model/list_evaluations_classification_model_model_name_or_id_evaluation_get.py +0 -161
  54. orca_sdk/_generated_api_client/api/classification_model/list_models_classification_model_get.py +0 -127
  55. orca_sdk/_generated_api_client/api/classification_model/predict_gpu_classification_model_name_or_id_prediction_post.py +0 -190
  56. orca_sdk/_generated_api_client/api/datasource/__init__.py +0 -0
  57. orca_sdk/_generated_api_client/api/datasource/create_datasource_datasource_post.py +0 -167
  58. orca_sdk/_generated_api_client/api/datasource/delete_datasource_datasource_name_or_id_delete.py +0 -156
  59. orca_sdk/_generated_api_client/api/datasource/get_datasource_datasource_name_or_id_get.py +0 -156
  60. orca_sdk/_generated_api_client/api/datasource/list_datasources_datasource_get.py +0 -127
  61. orca_sdk/_generated_api_client/api/default/__init__.py +0 -0
  62. orca_sdk/_generated_api_client/api/default/healthcheck_get.py +0 -118
  63. orca_sdk/_generated_api_client/api/default/healthcheck_gpu_get.py +0 -118
  64. orca_sdk/_generated_api_client/api/finetuned_embedding_model/__init__.py +0 -0
  65. orca_sdk/_generated_api_client/api/finetuned_embedding_model/create_finetuned_embedding_model_finetuned_embedding_model_post.py +0 -168
  66. orca_sdk/_generated_api_client/api/finetuned_embedding_model/delete_finetuned_embedding_model_finetuned_embedding_model_name_or_id_delete.py +0 -156
  67. 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
  68. orca_sdk/_generated_api_client/api/finetuned_embedding_model/get_finetuned_embedding_model_finetuned_embedding_model_name_or_id_get.py +0 -156
  69. orca_sdk/_generated_api_client/api/finetuned_embedding_model/list_finetuned_embedding_models_finetuned_embedding_model_get.py +0 -127
  70. orca_sdk/_generated_api_client/api/memoryset/__init__.py +0 -0
  71. orca_sdk/_generated_api_client/api/memoryset/clone_memoryset_memoryset_name_or_id_clone_post.py +0 -181
  72. orca_sdk/_generated_api_client/api/memoryset/create_analysis_memoryset_name_or_id_analysis_post.py +0 -183
  73. orca_sdk/_generated_api_client/api/memoryset/create_memoryset_memoryset_post.py +0 -168
  74. orca_sdk/_generated_api_client/api/memoryset/delete_memories_memoryset_name_or_id_memories_delete_post.py +0 -181
  75. orca_sdk/_generated_api_client/api/memoryset/delete_memory_memoryset_name_or_id_memory_memory_id_delete.py +0 -167
  76. orca_sdk/_generated_api_client/api/memoryset/delete_memoryset_memoryset_name_or_id_delete.py +0 -156
  77. orca_sdk/_generated_api_client/api/memoryset/get_analysis_memoryset_name_or_id_analysis_analysis_task_id_get.py +0 -169
  78. orca_sdk/_generated_api_client/api/memoryset/get_memories_memoryset_name_or_id_memories_get_post.py +0 -188
  79. orca_sdk/_generated_api_client/api/memoryset/get_memory_memoryset_name_or_id_memory_memory_id_get.py +0 -169
  80. orca_sdk/_generated_api_client/api/memoryset/get_memoryset_memoryset_name_or_id_get.py +0 -156
  81. orca_sdk/_generated_api_client/api/memoryset/insert_memories_gpu_memoryset_name_or_id_memory_post.py +0 -184
  82. orca_sdk/_generated_api_client/api/memoryset/list_analyses_memoryset_name_or_id_analysis_get.py +0 -260
  83. orca_sdk/_generated_api_client/api/memoryset/list_memorysets_memoryset_get.py +0 -127
  84. orca_sdk/_generated_api_client/api/memoryset/memoryset_lookup_gpu_memoryset_name_or_id_lookup_post.py +0 -193
  85. orca_sdk/_generated_api_client/api/memoryset/query_memoryset_memoryset_name_or_id_memories_post.py +0 -188
  86. orca_sdk/_generated_api_client/api/memoryset/update_memories_gpu_memoryset_name_or_id_memories_patch.py +0 -191
  87. orca_sdk/_generated_api_client/api/memoryset/update_memory_gpu_memoryset_name_or_id_memory_patch.py +0 -187
  88. orca_sdk/_generated_api_client/api/pretrained_embedding_model/__init__.py +0 -0
  89. orca_sdk/_generated_api_client/api/pretrained_embedding_model/embed_with_pretrained_model_gpu_pretrained_embedding_model_model_name_embedding_post.py +0 -188
  90. orca_sdk/_generated_api_client/api/pretrained_embedding_model/get_pretrained_embedding_model_pretrained_embedding_model_model_name_get.py +0 -157
  91. orca_sdk/_generated_api_client/api/pretrained_embedding_model/list_pretrained_embedding_models_pretrained_embedding_model_get.py +0 -127
  92. orca_sdk/_generated_api_client/api/task/__init__.py +0 -0
  93. orca_sdk/_generated_api_client/api/task/abort_task_task_task_id_abort_delete.py +0 -154
  94. orca_sdk/_generated_api_client/api/task/get_task_status_task_task_id_status_get.py +0 -156
  95. orca_sdk/_generated_api_client/api/task/list_tasks_task_get.py +0 -243
  96. orca_sdk/_generated_api_client/api/telemetry/__init__.py +0 -0
  97. orca_sdk/_generated_api_client/api/telemetry/drop_feedback_category_with_data_telemetry_feedback_category_name_or_id_delete.py +0 -162
  98. orca_sdk/_generated_api_client/api/telemetry/get_feedback_category_telemetry_feedback_category_name_or_id_get.py +0 -156
  99. orca_sdk/_generated_api_client/api/telemetry/get_prediction_telemetry_prediction_prediction_id_get.py +0 -157
  100. orca_sdk/_generated_api_client/api/telemetry/list_feedback_categories_telemetry_feedback_category_get.py +0 -127
  101. orca_sdk/_generated_api_client/api/telemetry/list_predictions_telemetry_prediction_post.py +0 -175
  102. orca_sdk/_generated_api_client/api/telemetry/record_prediction_feedback_telemetry_prediction_feedback_put.py +0 -171
  103. orca_sdk/_generated_api_client/api/telemetry/update_prediction_telemetry_prediction_prediction_id_patch.py +0 -181
  104. orca_sdk/_generated_api_client/client.py +0 -216
  105. orca_sdk/_generated_api_client/errors.py +0 -38
  106. orca_sdk/_generated_api_client/models/__init__.py +0 -159
  107. orca_sdk/_generated_api_client/models/analyze_neighbor_labels_result.py +0 -84
  108. orca_sdk/_generated_api_client/models/api_key_metadata.py +0 -118
  109. orca_sdk/_generated_api_client/models/base_model.py +0 -55
  110. orca_sdk/_generated_api_client/models/body_create_datasource_datasource_post.py +0 -176
  111. orca_sdk/_generated_api_client/models/classification_evaluation_result.py +0 -114
  112. orca_sdk/_generated_api_client/models/clone_labeled_memoryset_request.py +0 -150
  113. orca_sdk/_generated_api_client/models/column_info.py +0 -114
  114. orca_sdk/_generated_api_client/models/column_type.py +0 -14
  115. orca_sdk/_generated_api_client/models/conflict_error_response.py +0 -80
  116. orca_sdk/_generated_api_client/models/create_api_key_request.py +0 -99
  117. orca_sdk/_generated_api_client/models/create_api_key_response.py +0 -126
  118. orca_sdk/_generated_api_client/models/create_labeled_memoryset_request.py +0 -259
  119. orca_sdk/_generated_api_client/models/create_rac_model_request.py +0 -209
  120. orca_sdk/_generated_api_client/models/datasource_metadata.py +0 -142
  121. orca_sdk/_generated_api_client/models/delete_memories_request.py +0 -70
  122. orca_sdk/_generated_api_client/models/embed_request.py +0 -127
  123. orca_sdk/_generated_api_client/models/embedding_finetuning_method.py +0 -9
  124. orca_sdk/_generated_api_client/models/evaluation_request.py +0 -180
  125. orca_sdk/_generated_api_client/models/evaluation_response.py +0 -140
  126. orca_sdk/_generated_api_client/models/feedback_type.py +0 -9
  127. orca_sdk/_generated_api_client/models/field_validation_error.py +0 -103
  128. orca_sdk/_generated_api_client/models/filter_item.py +0 -231
  129. orca_sdk/_generated_api_client/models/filter_item_field_type_0_item.py +0 -15
  130. orca_sdk/_generated_api_client/models/filter_item_field_type_2_item_type_1.py +0 -16
  131. orca_sdk/_generated_api_client/models/filter_item_op.py +0 -16
  132. orca_sdk/_generated_api_client/models/find_duplicates_analysis_result.py +0 -70
  133. orca_sdk/_generated_api_client/models/finetune_embedding_model_request.py +0 -259
  134. orca_sdk/_generated_api_client/models/finetune_embedding_model_request_training_args.py +0 -66
  135. orca_sdk/_generated_api_client/models/finetuned_embedding_model_metadata.py +0 -166
  136. orca_sdk/_generated_api_client/models/get_memories_request.py +0 -70
  137. orca_sdk/_generated_api_client/models/internal_server_error_response.py +0 -80
  138. orca_sdk/_generated_api_client/models/label_class_metrics.py +0 -108
  139. orca_sdk/_generated_api_client/models/label_prediction_memory_lookup.py +0 -274
  140. orca_sdk/_generated_api_client/models/label_prediction_memory_lookup_metadata.py +0 -68
  141. orca_sdk/_generated_api_client/models/label_prediction_result.py +0 -101
  142. orca_sdk/_generated_api_client/models/label_prediction_with_memories_and_feedback.py +0 -232
  143. orca_sdk/_generated_api_client/models/labeled_memory.py +0 -197
  144. orca_sdk/_generated_api_client/models/labeled_memory_insert.py +0 -108
  145. orca_sdk/_generated_api_client/models/labeled_memory_insert_metadata.py +0 -68
  146. orca_sdk/_generated_api_client/models/labeled_memory_lookup.py +0 -258
  147. orca_sdk/_generated_api_client/models/labeled_memory_lookup_metadata.py +0 -68
  148. orca_sdk/_generated_api_client/models/labeled_memory_metadata.py +0 -68
  149. orca_sdk/_generated_api_client/models/labeled_memory_metrics.py +0 -277
  150. orca_sdk/_generated_api_client/models/labeled_memory_update.py +0 -171
  151. orca_sdk/_generated_api_client/models/labeled_memory_update_metadata_type_0.py +0 -68
  152. orca_sdk/_generated_api_client/models/labeled_memoryset_metadata.py +0 -195
  153. orca_sdk/_generated_api_client/models/list_analyses_memoryset_name_or_id_analysis_get_type_type_0.py +0 -9
  154. orca_sdk/_generated_api_client/models/list_memories_request.py +0 -104
  155. orca_sdk/_generated_api_client/models/list_predictions_request.py +0 -234
  156. orca_sdk/_generated_api_client/models/list_predictions_request_sort_item_item_type_0.py +0 -9
  157. orca_sdk/_generated_api_client/models/list_predictions_request_sort_item_item_type_1.py +0 -9
  158. orca_sdk/_generated_api_client/models/lookup_request.py +0 -81
  159. orca_sdk/_generated_api_client/models/memoryset_analysis_request.py +0 -83
  160. orca_sdk/_generated_api_client/models/memoryset_analysis_request_type.py +0 -9
  161. orca_sdk/_generated_api_client/models/memoryset_analysis_response.py +0 -180
  162. orca_sdk/_generated_api_client/models/memoryset_analysis_response_config.py +0 -66
  163. orca_sdk/_generated_api_client/models/memoryset_analysis_response_type.py +0 -9
  164. orca_sdk/_generated_api_client/models/not_found_error_response.py +0 -100
  165. orca_sdk/_generated_api_client/models/not_found_error_response_resource_type_0.py +0 -20
  166. orca_sdk/_generated_api_client/models/prediction_feedback.py +0 -157
  167. orca_sdk/_generated_api_client/models/prediction_feedback_category.py +0 -115
  168. orca_sdk/_generated_api_client/models/prediction_feedback_request.py +0 -122
  169. orca_sdk/_generated_api_client/models/prediction_feedback_result.py +0 -102
  170. orca_sdk/_generated_api_client/models/prediction_request.py +0 -169
  171. orca_sdk/_generated_api_client/models/pretrained_embedding_model_metadata.py +0 -97
  172. orca_sdk/_generated_api_client/models/pretrained_embedding_model_name.py +0 -11
  173. orca_sdk/_generated_api_client/models/rac_head_type.py +0 -11
  174. orca_sdk/_generated_api_client/models/rac_model_metadata.py +0 -191
  175. orca_sdk/_generated_api_client/models/service_unavailable_error_response.py +0 -80
  176. orca_sdk/_generated_api_client/models/task.py +0 -198
  177. orca_sdk/_generated_api_client/models/task_status.py +0 -14
  178. orca_sdk/_generated_api_client/models/task_status_info.py +0 -133
  179. orca_sdk/_generated_api_client/models/unauthenticated_error_response.py +0 -72
  180. orca_sdk/_generated_api_client/models/unauthorized_error_response.py +0 -80
  181. orca_sdk/_generated_api_client/models/unprocessable_input_error_response.py +0 -94
  182. orca_sdk/_generated_api_client/models/update_prediction_request.py +0 -93
  183. orca_sdk/_generated_api_client/py.typed +0 -1
  184. orca_sdk/_generated_api_client/types.py +0 -56
  185. orca_sdk/_utils/task.py +0 -73
  186. 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.3
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,41 @@
1
+ orca_sdk/__init__.py,sha256=xyjNwkLQXaX8A-UYgGwYDjv2btOXArT_yiMTfmW7KA8,1003
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=nC252O171_3_wn4KBAN7kg8GNvoZFiQ5Xtzkrm5dWDo,2645
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/async_client.py,sha256=HK52VxltotpDdq-aTgsCHQPsDAYzOSZDxdlbOnal99c,125459
21
+ orca_sdk/classification_model.py,sha256=WJM6oLBuGrxleTWakc-ZgSRfNyiZxb6-GIMH-S7k12w,39700
22
+ orca_sdk/classification_model_test.py,sha256=_gaDg8QB0h0ByN4UwTk2fIIDXE4UzahuJBjz7NSPK28,23605
23
+ orca_sdk/client.py,sha256=dcGBnzIwaU74CMzUh1ObKJbVmZekF5n57gQY6YcQwHE,124550
24
+ orca_sdk/conftest.py,sha256=RtINF1xea2iMycMkpMXIOOqRbfWeIZsceSAemhBmgNE,9761
25
+ orca_sdk/credentials.py,sha256=80_1r8n5jruEvN_E629SaRrRhKvF_NhWUEZyZzPXkqQ,6620
26
+ orca_sdk/credentials_test.py,sha256=TLbXJMz3IlThvtSrHeLM7jRsKnrncA_ahOTpHg15Ei4,4089
27
+ orca_sdk/datasource.py,sha256=DJt1Hr8iwaTFbtFD1aqbUPytpmjPr39qISeqSumoraM,20668
28
+ orca_sdk/datasource_test.py,sha256=yBR0NbsAzChV97pSOU0IvlfF5_WbMe49wZeWNXxwNl4,12128
29
+ orca_sdk/embedding_model.py,sha256=IQCpGUUlKHtz33Ld1-Ag8eLMk72qT7K-cHDjBJGJqhQ,27689
30
+ orca_sdk/embedding_model_test.py,sha256=-NItbNb3tTVj5jAvSi3WjV3FP448q08lmT5iObg9vwA,8133
31
+ orca_sdk/job.py,sha256=BOHg9ksVcN26VtAmuA2cNjGed_Gsx2zbdCO6FBZjuqI,13119
32
+ orca_sdk/job_test.py,sha256=nRSWxd_1UIfrj9oMVvrXjt6OBkBpddYAjb2y6P-DTUg,4327
33
+ orca_sdk/memoryset.py,sha256=angGB6OUJRDoBa2xzl4WsYhNsRRj99dEKEaAKUqgxO8,100113
34
+ orca_sdk/memoryset_test.py,sha256=wqoHXP60CBvtsReCunQNUxj6_ZDT67TTTluguQapigs,25368
35
+ orca_sdk/regression_model.py,sha256=kIT2i4XMrTBZXXVqDENoYILLF7Zqa8o2ndhraXHUPbY,26437
36
+ orca_sdk/regression_model_test.py,sha256=slwxbty_vL9d24OCn5xN61eKyri5GS7Jv2YmpEOMTrM,15856
37
+ orca_sdk/telemetry.py,sha256=C0rTudfAV3_t_uADATrl06d7vk-Sgop24FiSSqYhqmc,26209
38
+ orca_sdk/telemetry_test.py,sha256=eT66C5lFdNg-pQdo2I__BP7Tn5fTc9aTkVo9ZhWwhU0,5519
39
+ orca_sdk-0.1.3.dist-info/METADATA,sha256=tbUzJDcZGUOkwPeToA74JXtkJErdpmtx7UtL1mhzm_M,3659
40
+ orca_sdk-0.1.3.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
41
+ orca_sdk-0.1.3.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