orca-sdk 0.0.78__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 (188) hide show
  1. orca_sdk/__init__.py +24 -0
  2. orca_sdk/_generated_api_client/__init__.py +3 -0
  3. orca_sdk/_generated_api_client/api/__init__.py +205 -0
  4. orca_sdk/_generated_api_client/api/auth/__init__.py +0 -0
  5. orca_sdk/_generated_api_client/api/auth/check_authentication_auth_get.py +130 -0
  6. orca_sdk/_generated_api_client/api/auth/create_api_key_auth_api_key_post.py +172 -0
  7. orca_sdk/_generated_api_client/api/auth/delete_api_key_auth_api_key_name_or_id_delete.py +158 -0
  8. orca_sdk/_generated_api_client/api/auth/delete_org_auth_org_delete.py +132 -0
  9. orca_sdk/_generated_api_client/api/auth/list_api_keys_auth_api_key_get.py +129 -0
  10. orca_sdk/_generated_api_client/api/classification_model/__init__.py +0 -0
  11. orca_sdk/_generated_api_client/api/classification_model/create_evaluation_classification_model_model_name_or_id_evaluation_post.py +185 -0
  12. orca_sdk/_generated_api_client/api/classification_model/create_model_classification_model_post.py +172 -0
  13. orca_sdk/_generated_api_client/api/classification_model/delete_evaluation_classification_model_model_name_or_id_evaluation_task_id_delete.py +170 -0
  14. orca_sdk/_generated_api_client/api/classification_model/delete_model_classification_model_name_or_id_delete.py +156 -0
  15. orca_sdk/_generated_api_client/api/classification_model/get_evaluation_classification_model_model_name_or_id_evaluation_task_id_get.py +172 -0
  16. orca_sdk/_generated_api_client/api/classification_model/get_model_classification_model_name_or_id_get.py +158 -0
  17. orca_sdk/_generated_api_client/api/classification_model/list_evaluations_classification_model_model_name_or_id_evaluation_get.py +163 -0
  18. orca_sdk/_generated_api_client/api/classification_model/list_models_classification_model_get.py +129 -0
  19. orca_sdk/_generated_api_client/api/classification_model/predict_gpu_classification_model_name_or_id_prediction_post.py +192 -0
  20. orca_sdk/_generated_api_client/api/datasource/__init__.py +0 -0
  21. orca_sdk/_generated_api_client/api/datasource/create_datasource_datasource_post.py +169 -0
  22. orca_sdk/_generated_api_client/api/datasource/create_embedding_evaluation_datasource_name_or_id_embedding_evaluation_post.py +185 -0
  23. orca_sdk/_generated_api_client/api/datasource/delete_datasource_datasource_name_or_id_delete.py +158 -0
  24. orca_sdk/_generated_api_client/api/datasource/get_datasource_datasource_name_or_id_get.py +158 -0
  25. orca_sdk/_generated_api_client/api/datasource/get_embedding_evaluation_datasource_name_or_id_embedding_evaluation_task_id_get.py +171 -0
  26. orca_sdk/_generated_api_client/api/datasource/list_datasources_datasource_get.py +129 -0
  27. orca_sdk/_generated_api_client/api/datasource/list_embedding_evaluations_datasource_name_or_id_embedding_evaluation_get.py +237 -0
  28. orca_sdk/_generated_api_client/api/default/__init__.py +0 -0
  29. orca_sdk/_generated_api_client/api/default/healthcheck_get.py +120 -0
  30. orca_sdk/_generated_api_client/api/default/healthcheck_gpu_get.py +120 -0
  31. orca_sdk/_generated_api_client/api/finetuned_embedding_model/__init__.py +0 -0
  32. orca_sdk/_generated_api_client/api/finetuned_embedding_model/create_finetuned_embedding_model_finetuned_embedding_model_post.py +170 -0
  33. orca_sdk/_generated_api_client/api/finetuned_embedding_model/delete_finetuned_embedding_model_finetuned_embedding_model_name_or_id_delete.py +158 -0
  34. orca_sdk/_generated_api_client/api/finetuned_embedding_model/embed_with_finetuned_model_gpu_finetuned_embedding_model_name_or_id_embedding_post.py +191 -0
  35. orca_sdk/_generated_api_client/api/finetuned_embedding_model/get_finetuned_embedding_model_finetuned_embedding_model_name_or_id_get.py +158 -0
  36. orca_sdk/_generated_api_client/api/finetuned_embedding_model/list_finetuned_embedding_models_finetuned_embedding_model_get.py +129 -0
  37. orca_sdk/_generated_api_client/api/memoryset/__init__.py +0 -0
  38. orca_sdk/_generated_api_client/api/memoryset/clone_memoryset_memoryset_name_or_id_clone_post.py +183 -0
  39. orca_sdk/_generated_api_client/api/memoryset/create_analysis_memoryset_name_or_id_analysis_post.py +185 -0
  40. orca_sdk/_generated_api_client/api/memoryset/create_memoryset_memoryset_post.py +170 -0
  41. orca_sdk/_generated_api_client/api/memoryset/delete_memories_memoryset_name_or_id_memories_delete_post.py +183 -0
  42. orca_sdk/_generated_api_client/api/memoryset/delete_memory_memoryset_name_or_id_memory_memory_id_delete.py +169 -0
  43. orca_sdk/_generated_api_client/api/memoryset/delete_memoryset_memoryset_name_or_id_delete.py +158 -0
  44. orca_sdk/_generated_api_client/api/memoryset/get_analysis_memoryset_name_or_id_analysis_analysis_task_id_get.py +171 -0
  45. orca_sdk/_generated_api_client/api/memoryset/get_memories_memoryset_name_or_id_memories_get_post.py +190 -0
  46. orca_sdk/_generated_api_client/api/memoryset/get_memory_memoryset_name_or_id_memory_memory_id_get.py +171 -0
  47. orca_sdk/_generated_api_client/api/memoryset/get_memoryset_memoryset_name_or_id_get.py +158 -0
  48. orca_sdk/_generated_api_client/api/memoryset/insert_memories_gpu_memoryset_name_or_id_memory_post.py +186 -0
  49. orca_sdk/_generated_api_client/api/memoryset/list_analyses_memoryset_name_or_id_analysis_get.py +262 -0
  50. orca_sdk/_generated_api_client/api/memoryset/list_memorysets_memoryset_get.py +129 -0
  51. orca_sdk/_generated_api_client/api/memoryset/memoryset_lookup_gpu_memoryset_name_or_id_lookup_post.py +195 -0
  52. orca_sdk/_generated_api_client/api/memoryset/query_memoryset_memoryset_name_or_id_memories_post.py +190 -0
  53. orca_sdk/_generated_api_client/api/memoryset/update_memories_gpu_memoryset_name_or_id_memories_patch.py +193 -0
  54. orca_sdk/_generated_api_client/api/memoryset/update_memory_gpu_memoryset_name_or_id_memory_patch.py +189 -0
  55. orca_sdk/_generated_api_client/api/pretrained_embedding_model/__init__.py +0 -0
  56. orca_sdk/_generated_api_client/api/pretrained_embedding_model/embed_with_pretrained_model_gpu_pretrained_embedding_model_model_name_embedding_post.py +194 -0
  57. orca_sdk/_generated_api_client/api/pretrained_embedding_model/get_pretrained_embedding_model_pretrained_embedding_model_model_name_get.py +163 -0
  58. orca_sdk/_generated_api_client/api/pretrained_embedding_model/list_pretrained_embedding_models_pretrained_embedding_model_get.py +129 -0
  59. orca_sdk/_generated_api_client/api/task/__init__.py +0 -0
  60. orca_sdk/_generated_api_client/api/task/abort_task_task_task_id_abort_delete.py +156 -0
  61. orca_sdk/_generated_api_client/api/task/get_task_status_task_task_id_status_get.py +158 -0
  62. orca_sdk/_generated_api_client/api/task/list_tasks_task_get.py +245 -0
  63. orca_sdk/_generated_api_client/api/telemetry/__init__.py +0 -0
  64. orca_sdk/_generated_api_client/api/telemetry/drop_feedback_category_with_data_telemetry_feedback_category_name_or_id_delete.py +164 -0
  65. orca_sdk/_generated_api_client/api/telemetry/get_feedback_category_telemetry_feedback_category_name_or_id_get.py +158 -0
  66. orca_sdk/_generated_api_client/api/telemetry/get_prediction_telemetry_prediction_prediction_id_get.py +159 -0
  67. orca_sdk/_generated_api_client/api/telemetry/list_feedback_categories_telemetry_feedback_category_get.py +129 -0
  68. orca_sdk/_generated_api_client/api/telemetry/list_predictions_telemetry_prediction_post.py +177 -0
  69. orca_sdk/_generated_api_client/api/telemetry/record_prediction_feedback_telemetry_prediction_feedback_put.py +173 -0
  70. orca_sdk/_generated_api_client/api/telemetry/update_prediction_telemetry_prediction_prediction_id_patch.py +183 -0
  71. orca_sdk/_generated_api_client/client.py +216 -0
  72. orca_sdk/_generated_api_client/errors.py +38 -0
  73. orca_sdk/_generated_api_client/models/__init__.py +179 -0
  74. orca_sdk/_generated_api_client/models/analyze_neighbor_labels_result.py +116 -0
  75. orca_sdk/_generated_api_client/models/api_key_metadata.py +137 -0
  76. orca_sdk/_generated_api_client/models/api_key_metadata_scope_item.py +9 -0
  77. orca_sdk/_generated_api_client/models/base_model.py +55 -0
  78. orca_sdk/_generated_api_client/models/body_create_datasource_datasource_post.py +176 -0
  79. orca_sdk/_generated_api_client/models/classification_evaluation_result.py +147 -0
  80. orca_sdk/_generated_api_client/models/clone_labeled_memoryset_request.py +150 -0
  81. orca_sdk/_generated_api_client/models/column_info.py +114 -0
  82. orca_sdk/_generated_api_client/models/column_type.py +14 -0
  83. orca_sdk/_generated_api_client/models/conflict_error_response.py +80 -0
  84. orca_sdk/_generated_api_client/models/create_api_key_request.py +120 -0
  85. orca_sdk/_generated_api_client/models/create_api_key_request_scope_item.py +9 -0
  86. orca_sdk/_generated_api_client/models/create_api_key_response.py +145 -0
  87. orca_sdk/_generated_api_client/models/create_api_key_response_scope_item.py +9 -0
  88. orca_sdk/_generated_api_client/models/create_labeled_memoryset_request.py +279 -0
  89. orca_sdk/_generated_api_client/models/create_rac_model_request.py +209 -0
  90. orca_sdk/_generated_api_client/models/datasource_metadata.py +142 -0
  91. orca_sdk/_generated_api_client/models/delete_memories_request.py +70 -0
  92. orca_sdk/_generated_api_client/models/embed_request.py +127 -0
  93. orca_sdk/_generated_api_client/models/embedding_evaluation_request.py +179 -0
  94. orca_sdk/_generated_api_client/models/embedding_evaluation_response.py +148 -0
  95. orca_sdk/_generated_api_client/models/embedding_evaluation_result.py +86 -0
  96. orca_sdk/_generated_api_client/models/embedding_finetuning_method.py +9 -0
  97. orca_sdk/_generated_api_client/models/embedding_model_result.py +114 -0
  98. orca_sdk/_generated_api_client/models/evaluation_request.py +180 -0
  99. orca_sdk/_generated_api_client/models/evaluation_response.py +140 -0
  100. orca_sdk/_generated_api_client/models/feedback_type.py +9 -0
  101. orca_sdk/_generated_api_client/models/field_validation_error.py +103 -0
  102. orca_sdk/_generated_api_client/models/filter_item.py +231 -0
  103. orca_sdk/_generated_api_client/models/filter_item_field_type_0_item.py +15 -0
  104. orca_sdk/_generated_api_client/models/filter_item_field_type_2_item_type_1.py +20 -0
  105. orca_sdk/_generated_api_client/models/filter_item_op.py +16 -0
  106. orca_sdk/_generated_api_client/models/find_duplicates_analysis_result.py +70 -0
  107. orca_sdk/_generated_api_client/models/finetune_embedding_model_request.py +259 -0
  108. orca_sdk/_generated_api_client/models/finetune_embedding_model_request_training_args.py +66 -0
  109. orca_sdk/_generated_api_client/models/finetuned_embedding_model_metadata.py +166 -0
  110. orca_sdk/_generated_api_client/models/get_memories_request.py +70 -0
  111. orca_sdk/_generated_api_client/models/internal_server_error_response.py +80 -0
  112. orca_sdk/_generated_api_client/models/label_class_metrics.py +108 -0
  113. orca_sdk/_generated_api_client/models/label_prediction_memory_lookup.py +274 -0
  114. orca_sdk/_generated_api_client/models/label_prediction_memory_lookup_metadata.py +68 -0
  115. orca_sdk/_generated_api_client/models/label_prediction_result.py +115 -0
  116. orca_sdk/_generated_api_client/models/label_prediction_with_memories_and_feedback.py +246 -0
  117. orca_sdk/_generated_api_client/models/labeled_memory.py +197 -0
  118. orca_sdk/_generated_api_client/models/labeled_memory_insert.py +128 -0
  119. orca_sdk/_generated_api_client/models/labeled_memory_insert_metadata.py +68 -0
  120. orca_sdk/_generated_api_client/models/labeled_memory_lookup.py +258 -0
  121. orca_sdk/_generated_api_client/models/labeled_memory_lookup_metadata.py +68 -0
  122. orca_sdk/_generated_api_client/models/labeled_memory_metadata.py +68 -0
  123. orca_sdk/_generated_api_client/models/labeled_memory_metrics.py +237 -0
  124. orca_sdk/_generated_api_client/models/labeled_memory_update.py +171 -0
  125. orca_sdk/_generated_api_client/models/labeled_memory_update_metadata_type_0.py +68 -0
  126. orca_sdk/_generated_api_client/models/labeled_memoryset_metadata.py +195 -0
  127. orca_sdk/_generated_api_client/models/list_analyses_memoryset_name_or_id_analysis_get_type_type_0.py +9 -0
  128. orca_sdk/_generated_api_client/models/list_memories_request.py +104 -0
  129. orca_sdk/_generated_api_client/models/list_predictions_request.py +257 -0
  130. orca_sdk/_generated_api_client/models/lookup_request.py +81 -0
  131. orca_sdk/_generated_api_client/models/memory_metrics.py +156 -0
  132. orca_sdk/_generated_api_client/models/memoryset_analysis_request.py +83 -0
  133. orca_sdk/_generated_api_client/models/memoryset_analysis_request_type.py +9 -0
  134. orca_sdk/_generated_api_client/models/memoryset_analysis_response.py +180 -0
  135. orca_sdk/_generated_api_client/models/memoryset_analysis_response_config.py +66 -0
  136. orca_sdk/_generated_api_client/models/memoryset_analysis_response_type.py +9 -0
  137. orca_sdk/_generated_api_client/models/not_found_error_response.py +100 -0
  138. orca_sdk/_generated_api_client/models/not_found_error_response_resource_type_0.py +21 -0
  139. orca_sdk/_generated_api_client/models/precision_recall_curve.py +94 -0
  140. orca_sdk/_generated_api_client/models/prediction_feedback.py +157 -0
  141. orca_sdk/_generated_api_client/models/prediction_feedback_category.py +115 -0
  142. orca_sdk/_generated_api_client/models/prediction_feedback_request.py +122 -0
  143. orca_sdk/_generated_api_client/models/prediction_feedback_result.py +102 -0
  144. orca_sdk/_generated_api_client/models/prediction_request.py +169 -0
  145. orca_sdk/_generated_api_client/models/prediction_sort_item_item_type_0.py +10 -0
  146. orca_sdk/_generated_api_client/models/prediction_sort_item_item_type_1.py +9 -0
  147. orca_sdk/_generated_api_client/models/pretrained_embedding_model_metadata.py +97 -0
  148. orca_sdk/_generated_api_client/models/pretrained_embedding_model_name.py +12 -0
  149. orca_sdk/_generated_api_client/models/rac_head_type.py +11 -0
  150. orca_sdk/_generated_api_client/models/rac_model_metadata.py +191 -0
  151. orca_sdk/_generated_api_client/models/roc_curve.py +94 -0
  152. orca_sdk/_generated_api_client/models/service_unavailable_error_response.py +80 -0
  153. orca_sdk/_generated_api_client/models/task.py +198 -0
  154. orca_sdk/_generated_api_client/models/task_status.py +14 -0
  155. orca_sdk/_generated_api_client/models/task_status_info.py +133 -0
  156. orca_sdk/_generated_api_client/models/unauthenticated_error_response.py +72 -0
  157. orca_sdk/_generated_api_client/models/unauthorized_error_response.py +80 -0
  158. orca_sdk/_generated_api_client/models/unprocessable_input_error_response.py +94 -0
  159. orca_sdk/_generated_api_client/models/update_prediction_request.py +93 -0
  160. orca_sdk/_generated_api_client/py.typed +1 -0
  161. orca_sdk/_generated_api_client/types.py +56 -0
  162. orca_sdk/_utils/__init__.py +0 -0
  163. orca_sdk/_utils/analysis_ui.py +192 -0
  164. orca_sdk/_utils/analysis_ui_style.css +54 -0
  165. orca_sdk/_utils/auth.py +68 -0
  166. orca_sdk/_utils/auth_test.py +31 -0
  167. orca_sdk/_utils/common.py +37 -0
  168. orca_sdk/_utils/data_parsing.py +99 -0
  169. orca_sdk/_utils/data_parsing_test.py +244 -0
  170. orca_sdk/_utils/prediction_result_ui.css +18 -0
  171. orca_sdk/_utils/prediction_result_ui.py +64 -0
  172. orca_sdk/_utils/task.py +73 -0
  173. orca_sdk/classification_model.py +508 -0
  174. orca_sdk/classification_model_test.py +272 -0
  175. orca_sdk/conftest.py +116 -0
  176. orca_sdk/credentials.py +126 -0
  177. orca_sdk/credentials_test.py +37 -0
  178. orca_sdk/datasource.py +333 -0
  179. orca_sdk/datasource_test.py +96 -0
  180. orca_sdk/embedding_model.py +347 -0
  181. orca_sdk/embedding_model_test.py +176 -0
  182. orca_sdk/memoryset.py +1209 -0
  183. orca_sdk/memoryset_test.py +287 -0
  184. orca_sdk/telemetry.py +398 -0
  185. orca_sdk/telemetry_test.py +109 -0
  186. orca_sdk-0.0.78.dist-info/METADATA +79 -0
  187. orca_sdk-0.0.78.dist-info/RECORD +188 -0
  188. orca_sdk-0.0.78.dist-info/WHEEL +4 -0
@@ -0,0 +1,72 @@
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/model.py.jinja
6
+
7
+ The main change is:
8
+ - Fix typing issues
9
+ """
10
+
11
+ # flake8: noqa: C901
12
+
13
+ from typing import Any, Literal, Type, TypeVar, cast
14
+
15
+ from attrs import define as _attrs_define
16
+ from attrs import field as _attrs_field
17
+
18
+ T = TypeVar("T", bound="UnauthenticatedErrorResponse")
19
+
20
+
21
+ @_attrs_define
22
+ class UnauthenticatedErrorResponse:
23
+ """
24
+ Attributes:
25
+ status_code (Literal[401]):
26
+ """
27
+
28
+ status_code: Literal[401]
29
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
30
+
31
+ def to_dict(self) -> dict[str, Any]:
32
+ status_code = self.status_code
33
+
34
+ field_dict: dict[str, Any] = {}
35
+ field_dict.update(self.additional_properties)
36
+ field_dict.update(
37
+ {
38
+ "status_code": status_code,
39
+ }
40
+ )
41
+
42
+ return field_dict
43
+
44
+ @classmethod
45
+ def from_dict(cls: Type[T], src_dict: dict[str, Any]) -> T:
46
+ d = src_dict.copy()
47
+ status_code = cast(Literal[401], d.pop("status_code"))
48
+ if status_code != 401:
49
+ raise ValueError(f"status_code must match const 401, got '{status_code}'")
50
+
51
+ unauthenticated_error_response = cls(
52
+ status_code=status_code,
53
+ )
54
+
55
+ unauthenticated_error_response.additional_properties = d
56
+ return unauthenticated_error_response
57
+
58
+ @property
59
+ def additional_keys(self) -> list[str]:
60
+ return list(self.additional_properties.keys())
61
+
62
+ def __getitem__(self, key: str) -> Any:
63
+ return self.additional_properties[key]
64
+
65
+ def __setitem__(self, key: str, value: Any) -> None:
66
+ self.additional_properties[key] = value
67
+
68
+ def __delitem__(self, key: str) -> None:
69
+ del self.additional_properties[key]
70
+
71
+ def __contains__(self, key: str) -> bool:
72
+ return key in self.additional_properties
@@ -0,0 +1,80 @@
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/model.py.jinja
6
+
7
+ The main change is:
8
+ - Fix typing issues
9
+ """
10
+
11
+ # flake8: noqa: C901
12
+
13
+ from typing import Any, Literal, Type, TypeVar, cast
14
+
15
+ from attrs import define as _attrs_define
16
+ from attrs import field as _attrs_field
17
+
18
+ T = TypeVar("T", bound="UnauthorizedErrorResponse")
19
+
20
+
21
+ @_attrs_define
22
+ class UnauthorizedErrorResponse:
23
+ """
24
+ Attributes:
25
+ status_code (Literal[403]):
26
+ reason (str):
27
+ """
28
+
29
+ status_code: Literal[403]
30
+ reason: str
31
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
32
+
33
+ def to_dict(self) -> dict[str, Any]:
34
+ status_code = self.status_code
35
+
36
+ reason = self.reason
37
+
38
+ field_dict: dict[str, Any] = {}
39
+ field_dict.update(self.additional_properties)
40
+ field_dict.update(
41
+ {
42
+ "status_code": status_code,
43
+ "reason": reason,
44
+ }
45
+ )
46
+
47
+ return field_dict
48
+
49
+ @classmethod
50
+ def from_dict(cls: Type[T], src_dict: dict[str, Any]) -> T:
51
+ d = src_dict.copy()
52
+ status_code = cast(Literal[403], d.pop("status_code"))
53
+ if status_code != 403:
54
+ raise ValueError(f"status_code must match const 403, got '{status_code}'")
55
+
56
+ reason = d.pop("reason")
57
+
58
+ unauthorized_error_response = cls(
59
+ status_code=status_code,
60
+ reason=reason,
61
+ )
62
+
63
+ unauthorized_error_response.additional_properties = d
64
+ return unauthorized_error_response
65
+
66
+ @property
67
+ def additional_keys(self) -> list[str]:
68
+ return list(self.additional_properties.keys())
69
+
70
+ def __getitem__(self, key: str) -> Any:
71
+ return self.additional_properties[key]
72
+
73
+ def __setitem__(self, key: str, value: Any) -> None:
74
+ self.additional_properties[key] = value
75
+
76
+ def __delitem__(self, key: str) -> None:
77
+ del self.additional_properties[key]
78
+
79
+ def __contains__(self, key: str) -> bool:
80
+ return key in self.additional_properties
@@ -0,0 +1,94 @@
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/model.py.jinja
6
+
7
+ The main change is:
8
+ - Fix typing issues
9
+ """
10
+
11
+ # flake8: noqa: C901
12
+
13
+ from typing import TYPE_CHECKING, Any, List, Literal, Type, TypeVar, cast
14
+
15
+ from attrs import define as _attrs_define
16
+ from attrs import field as _attrs_field
17
+
18
+ if TYPE_CHECKING:
19
+ from ..models.field_validation_error import FieldValidationError
20
+
21
+
22
+ T = TypeVar("T", bound="UnprocessableInputErrorResponse")
23
+
24
+
25
+ @_attrs_define
26
+ class UnprocessableInputErrorResponse:
27
+ """
28
+ Attributes:
29
+ status_code (Literal[422]):
30
+ validation_issues (List['FieldValidationError']):
31
+ """
32
+
33
+ status_code: Literal[422]
34
+ validation_issues: List["FieldValidationError"]
35
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
36
+
37
+ def to_dict(self) -> dict[str, Any]:
38
+ status_code = self.status_code
39
+
40
+ validation_issues = []
41
+ for validation_issues_item_data in self.validation_issues:
42
+ validation_issues_item = validation_issues_item_data.to_dict()
43
+ validation_issues.append(validation_issues_item)
44
+
45
+ field_dict: dict[str, Any] = {}
46
+ field_dict.update(self.additional_properties)
47
+ field_dict.update(
48
+ {
49
+ "status_code": status_code,
50
+ "validation_issues": validation_issues,
51
+ }
52
+ )
53
+
54
+ return field_dict
55
+
56
+ @classmethod
57
+ def from_dict(cls: Type[T], src_dict: dict[str, Any]) -> T:
58
+ from ..models.field_validation_error import FieldValidationError
59
+
60
+ d = src_dict.copy()
61
+ status_code = cast(Literal[422], d.pop("status_code"))
62
+ if status_code != 422:
63
+ raise ValueError(f"status_code must match const 422, got '{status_code}'")
64
+
65
+ validation_issues = []
66
+ _validation_issues = d.pop("validation_issues")
67
+ for validation_issues_item_data in _validation_issues:
68
+ validation_issues_item = FieldValidationError.from_dict(validation_issues_item_data)
69
+
70
+ validation_issues.append(validation_issues_item)
71
+
72
+ unprocessable_input_error_response = cls(
73
+ status_code=status_code,
74
+ validation_issues=validation_issues,
75
+ )
76
+
77
+ unprocessable_input_error_response.additional_properties = d
78
+ return unprocessable_input_error_response
79
+
80
+ @property
81
+ def additional_keys(self) -> list[str]:
82
+ return list(self.additional_properties.keys())
83
+
84
+ def __getitem__(self, key: str) -> Any:
85
+ return self.additional_properties[key]
86
+
87
+ def __setitem__(self, key: str, value: Any) -> None:
88
+ self.additional_properties[key] = value
89
+
90
+ def __delitem__(self, key: str) -> None:
91
+ del self.additional_properties[key]
92
+
93
+ def __contains__(self, key: str) -> bool:
94
+ return key in self.additional_properties
@@ -0,0 +1,93 @@
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/model.py.jinja
6
+
7
+ The main change is:
8
+ - Fix typing issues
9
+ """
10
+
11
+ # flake8: noqa: C901
12
+
13
+ from typing import Any, List, Type, TypeVar, Union, cast
14
+
15
+ from attrs import define as _attrs_define
16
+ from attrs import field as _attrs_field
17
+
18
+ from ..types import UNSET, Unset
19
+
20
+ T = TypeVar("T", bound="UpdatePredictionRequest")
21
+
22
+
23
+ @_attrs_define
24
+ class UpdatePredictionRequest:
25
+ """
26
+ Attributes:
27
+ expected_label (Union[None, Unset, int]):
28
+ tags (Union[Unset, List[str]]):
29
+ """
30
+
31
+ expected_label: Union[None, Unset, int] = UNSET
32
+ tags: Union[Unset, List[str]] = UNSET
33
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
34
+
35
+ def to_dict(self) -> dict[str, Any]:
36
+ expected_label: Union[None, Unset, int]
37
+ if isinstance(self.expected_label, Unset):
38
+ expected_label = UNSET
39
+ else:
40
+ expected_label = self.expected_label
41
+
42
+ tags: Union[Unset, List[str]] = UNSET
43
+ if not isinstance(self.tags, Unset):
44
+ tags = self.tags
45
+
46
+ field_dict: dict[str, Any] = {}
47
+ field_dict.update(self.additional_properties)
48
+ field_dict.update({})
49
+ if expected_label is not UNSET:
50
+ field_dict["expected_label"] = expected_label
51
+ if tags is not UNSET:
52
+ field_dict["tags"] = tags
53
+
54
+ return field_dict
55
+
56
+ @classmethod
57
+ def from_dict(cls: Type[T], src_dict: dict[str, Any]) -> T:
58
+ d = src_dict.copy()
59
+
60
+ def _parse_expected_label(data: object) -> Union[None, Unset, int]:
61
+ if data is None:
62
+ return data
63
+ if isinstance(data, Unset):
64
+ return data
65
+ return cast(Union[None, Unset, int], data)
66
+
67
+ expected_label = _parse_expected_label(d.pop("expected_label", UNSET))
68
+
69
+ tags = cast(List[str], d.pop("tags", UNSET))
70
+
71
+ update_prediction_request = cls(
72
+ expected_label=expected_label,
73
+ tags=tags,
74
+ )
75
+
76
+ update_prediction_request.additional_properties = d
77
+ return update_prediction_request
78
+
79
+ @property
80
+ def additional_keys(self) -> list[str]:
81
+ return list(self.additional_properties.keys())
82
+
83
+ def __getitem__(self, key: str) -> Any:
84
+ return self.additional_properties[key]
85
+
86
+ def __setitem__(self, key: str, value: Any) -> None:
87
+ self.additional_properties[key] = value
88
+
89
+ def __delitem__(self, key: str) -> None:
90
+ del self.additional_properties[key]
91
+
92
+ def __contains__(self, key: str) -> bool:
93
+ return key in self.additional_properties
@@ -0,0 +1 @@
1
+ # Marker file for PEP 561
@@ -0,0 +1,56 @@
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/types.py.jinja
6
+
7
+ The main change is:
8
+ - Make Response's parsed type required
9
+ """
10
+
11
+ from collections.abc import MutableMapping
12
+ from http import HTTPStatus
13
+ from typing import BinaryIO, Generic, Literal, Optional, TypeVar
14
+
15
+ from attrs import define
16
+
17
+ """ Contains some shared types for properties """
18
+
19
+
20
+ class Unset:
21
+ def __bool__(self) -> Literal[False]:
22
+ return False
23
+
24
+
25
+ UNSET: Unset = Unset()
26
+
27
+ FileJsonType = tuple[Optional[str], BinaryIO, Optional[str]]
28
+
29
+
30
+ @define
31
+ class File:
32
+ """Contains information for file uploads"""
33
+
34
+ payload: BinaryIO
35
+ file_name: Optional[str] = None
36
+ mime_type: Optional[str] = None
37
+
38
+ def to_tuple(self) -> FileJsonType:
39
+ """Return a tuple representation that httpx will accept for multipart/form-data"""
40
+ return self.file_name, self.payload, self.mime_type
41
+
42
+
43
+ T = TypeVar("T")
44
+
45
+
46
+ @define
47
+ class Response(Generic[T]):
48
+ """A response from an endpoint"""
49
+
50
+ status_code: HTTPStatus
51
+ content: bytes
52
+ headers: MutableMapping[str, str]
53
+ parsed: T
54
+
55
+
56
+ __all__ = ["UNSET", "File", "FileJsonType", "Response", "Unset"]
File without changes
@@ -0,0 +1,192 @@
1
+ from __future__ import annotations
2
+
3
+ import logging
4
+ import re
5
+ from pathlib import Path
6
+ from typing import TypedDict, cast
7
+
8
+ import gradio as gr
9
+
10
+ from ..memoryset import LabeledMemory, LabeledMemoryset
11
+
12
+ # Suppress all httpx logs
13
+ logging.getLogger("httpx").setLevel(logging.CRITICAL)
14
+
15
+ # Optionally suppress other libraries Gradio might use
16
+ logging.getLogger("gradio").setLevel(logging.CRITICAL)
17
+
18
+
19
+ class RelabelStatus(TypedDict):
20
+ memory_id: str
21
+ approved: bool
22
+ new_label: int | None
23
+ full_memory: LabeledMemory
24
+
25
+
26
+ def display_suggested_memory_relabels(memoryset: LabeledMemoryset):
27
+ suggested_relabels = memoryset.query(
28
+ filters=[("metrics.neighbor_predicted_label_matches_current_label", "==", False)]
29
+ )
30
+ # Sort memories by confidence score (higher confidence first)
31
+ suggested_relabels.sort(key=lambda x: (x.metrics["neighbor_predicted_label_confidence"] or 0.0), reverse=True)
32
+
33
+ def update_approved(memory_id: str, selected: bool, current_memory_relabel_map: dict[str, RelabelStatus]):
34
+ current_memory_relabel_map[memory_id]["approved"] = selected
35
+ return current_memory_relabel_map
36
+
37
+ def approve_all(current_all_approved, selected: bool):
38
+ for mem_id in current_all_approved:
39
+ current_all_approved[mem_id]["approved"] = selected
40
+ return current_all_approved, selected
41
+
42
+ def apply_selected(current_memory_relabel_map: dict[str, RelabelStatus], progress=gr.Progress(track_tqdm=True)):
43
+ progress(0, desc="Processing label updates...")
44
+ to_be_deleted = []
45
+ approved_relabels = [mem for mem in current_memory_relabel_map.values() if mem["approved"]]
46
+ for memory in progress.tqdm(approved_relabels, desc="Applying label updates..."):
47
+ memory = cast(RelabelStatus, memory)
48
+ new_label = memory["new_label"]
49
+ assert isinstance(new_label, int)
50
+ memoryset.update(
51
+ {
52
+ "memory_id": memory["memory_id"],
53
+ "label": new_label,
54
+ }
55
+ )
56
+ to_be_deleted.append(memory["memory_id"])
57
+ for mem_id in to_be_deleted:
58
+ del current_memory_relabel_map[mem_id]
59
+ return (
60
+ current_memory_relabel_map,
61
+ gr.HTML(
62
+ f"<h1 style='display: inline-block; position: fixed; z-index: 1000; left: 36px; top: 14px;'>Suggested Label Updates: {len(current_memory_relabel_map)}</h1>",
63
+ ),
64
+ )
65
+
66
+ def update_label(mem_id: str, label: str, current_memory_relabel_map: dict[str, RelabelStatus]):
67
+ match = re.search(r".*\((\d+)\)$", label)
68
+ if match:
69
+ new_label = int(match.group(1))
70
+ current_memory_relabel_map[mem_id]["new_label"] = new_label
71
+ confidence = "--"
72
+ current_metrics = current_memory_relabel_map[mem_id]["full_memory"].metrics
73
+ if current_metrics and new_label == current_metrics["neighbor_predicted_label"]:
74
+ confidence = (
75
+ round(current_metrics["neighbor_predicted_label_confidence"] or 0.0, 2) if current_metrics else 0
76
+ )
77
+ return (
78
+ gr.HTML(
79
+ f"<p style='font-size: 10px; color: #888;'>Confidence: {confidence}</p>",
80
+ elem_classes="no-padding",
81
+ ),
82
+ current_memory_relabel_map,
83
+ )
84
+ else:
85
+ logging.error(f"Invalid label format: {label}")
86
+
87
+ with gr.Blocks(
88
+ fill_width=True,
89
+ title="Suggested Label Updates",
90
+ css_paths=str(Path(__file__).parent / "analysis_ui_style.css"),
91
+ ) as demo:
92
+ label_names = memoryset.label_names
93
+
94
+ refresh = gr.State(False)
95
+ all_approved = gr.State(False)
96
+ memory_relabel_map = gr.State(
97
+ {
98
+ mem.memory_id: RelabelStatus(
99
+ memory_id=mem.memory_id,
100
+ approved=False,
101
+ new_label=(
102
+ mem.metrics["neighbor_predicted_label"]
103
+ if (mem.metrics and isinstance(mem.metrics["neighbor_predicted_label"], int))
104
+ else None
105
+ ),
106
+ full_memory=mem,
107
+ )
108
+ for mem in suggested_relabels
109
+ }
110
+ )
111
+
112
+ @gr.render(
113
+ inputs=[memory_relabel_map, all_approved],
114
+ triggers=[demo.load, refresh.change, all_approved.change, memory_relabel_map.change],
115
+ )
116
+ def render_table(current_memory_relabel_map, current_all_approved):
117
+ if len(current_memory_relabel_map):
118
+ with gr.Group(elem_classes="header"):
119
+ title = gr.HTML(
120
+ f"<h1 style='display: inline-block; position: fixed; z-index: 1000; left: 36px; top: 14px;'>Suggested Label Updates: {len(current_memory_relabel_map)}</h1>"
121
+ )
122
+ apply_selected_button = gr.Button("Apply Selected", elem_classes="button")
123
+ apply_selected_button.click(
124
+ apply_selected,
125
+ inputs=[memory_relabel_map],
126
+ outputs=[memory_relabel_map, title],
127
+ show_progress="full",
128
+ )
129
+ with gr.Row(equal_height=True, variant="panel", elem_classes="margin-top"):
130
+ with gr.Column(scale=9):
131
+ gr.Markdown("**Value**")
132
+ with gr.Column(scale=2, min_width=90):
133
+ gr.Markdown("**Current Label**")
134
+ with gr.Column(scale=3, min_width=150):
135
+ gr.Markdown("**Suggested Label**", elem_classes="centered")
136
+ with gr.Column(scale=2, min_width=50):
137
+ approve_all_checkbox = gr.Checkbox(
138
+ show_label=False,
139
+ value=current_all_approved,
140
+ label="",
141
+ container=False,
142
+ elem_classes="centered",
143
+ )
144
+ approve_all_checkbox.change(
145
+ approve_all,
146
+ inputs=[memory_relabel_map, approve_all_checkbox],
147
+ outputs=[memory_relabel_map, all_approved],
148
+ )
149
+ for i, memory_relabel in enumerate(current_memory_relabel_map.values()):
150
+ mem = memory_relabel["full_memory"]
151
+ with gr.Row(equal_height=True, variant="panel", elem_classes="white" if i % 2 == 0 else None):
152
+ with gr.Column(scale=9):
153
+ assert isinstance(mem.value, str)
154
+ gr.Markdown(mem.value, label="Value", height=50)
155
+ with gr.Column(scale=2, min_width=90):
156
+ gr.Markdown(f"{mem.label_name} ({mem.label})", label="Current Label", height=50)
157
+ with gr.Column(scale=3, min_width=150):
158
+ dropdown = gr.Dropdown(
159
+ choices=[f"{label_name} ({i})" for i, label_name in enumerate(label_names)],
160
+ label="SuggestedLabel",
161
+ value=f"{label_names[mem.metrics.neighbor_predicted_label]} ({mem.metrics.neighbor_predicted_label})",
162
+ interactive=True,
163
+ container=False,
164
+ )
165
+ confidence = gr.HTML(
166
+ f"<p style='font-size: 10px; color: #888;'>Confidence: {mem.metrics.neighbor_predicted_label_confidence:.2f}</p>",
167
+ elem_classes="no-padding",
168
+ )
169
+ dropdown.change(
170
+ lambda val, map, mem_id=mem.memory_id: update_label(mem_id, val, map),
171
+ inputs=[dropdown, memory_relabel_map],
172
+ outputs=[confidence, memory_relabel_map],
173
+ )
174
+ with gr.Column(scale=2, min_width=50):
175
+ checkbox = gr.Checkbox(
176
+ show_label=False,
177
+ label="",
178
+ value=current_memory_relabel_map[mem.memory_id]["approved"],
179
+ container=False,
180
+ elem_classes="centered",
181
+ interactive=True,
182
+ )
183
+ checkbox.input(
184
+ lambda selected, map, mem_id=mem.memory_id: update_approved(mem_id, selected, map),
185
+ inputs=[checkbox, memory_relabel_map],
186
+ outputs=[memory_relabel_map],
187
+ )
188
+
189
+ else:
190
+ gr.HTML("<h1>No suggested label updates</h1>")
191
+
192
+ demo.launch()
@@ -0,0 +1,54 @@
1
+ .white {
2
+ background-color: white;
3
+ }
4
+ .centered input {
5
+ margin: auto;
6
+ }
7
+ .centered p {
8
+ text-align: center;
9
+ }
10
+ .button {
11
+ display: inline-block;
12
+ max-width: 250px;
13
+ background-color: #2b9a66;
14
+ color: white;
15
+ position: fixed;
16
+ z-index: 1000;
17
+ right: 36px;
18
+ border-radius: 8px;
19
+ top: 12px;
20
+ }
21
+ .margin-top {
22
+ margin-top: 60px;
23
+ }
24
+ .header {
25
+ position: fixed;
26
+ z-index: 1000;
27
+ height: 64px;
28
+ left: 0;
29
+ top: 0;
30
+ border-radius: 0;
31
+ }
32
+
33
+ input[type='checkbox']:checked,
34
+ input[type='checkbox']:checked:hover,
35
+ input[type='checkbox']:checked:focus {
36
+ background-color: #2b9a66;
37
+ border-color: #2b9a66;
38
+ }
39
+ input[type='checkbox']:focus {
40
+ border-color: #2b9a66;
41
+ }
42
+ .html-container:has(.no-padding) {
43
+ padding: 0;
44
+ }
45
+
46
+ .progress-bar {
47
+ background-color: #2b9a66;
48
+ }
49
+ .header .full {
50
+ position: fixed !important;
51
+ z-index: 1100;
52
+ background-color: #e4e4e7;
53
+ height: 68px;
54
+ }