orca-sdk 0.1.0__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 (175) hide show
  1. orca_sdk/__init__.py +19 -0
  2. orca_sdk/_generated_api_client/__init__.py +3 -0
  3. orca_sdk/_generated_api_client/api/__init__.py +193 -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 +128 -0
  6. orca_sdk/_generated_api_client/api/auth/create_api_key_auth_api_key_post.py +170 -0
  7. orca_sdk/_generated_api_client/api/auth/delete_api_key_auth_api_key_name_or_id_delete.py +156 -0
  8. orca_sdk/_generated_api_client/api/auth/delete_org_auth_org_delete.py +130 -0
  9. orca_sdk/_generated_api_client/api/auth/list_api_keys_auth_api_key_get.py +127 -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 +183 -0
  12. orca_sdk/_generated_api_client/api/classification_model/create_model_classification_model_post.py +170 -0
  13. orca_sdk/_generated_api_client/api/classification_model/delete_evaluation_classification_model_model_name_or_id_evaluation_task_id_delete.py +168 -0
  14. orca_sdk/_generated_api_client/api/classification_model/delete_model_classification_model_name_or_id_delete.py +154 -0
  15. orca_sdk/_generated_api_client/api/classification_model/get_evaluation_classification_model_model_name_or_id_evaluation_task_id_get.py +170 -0
  16. orca_sdk/_generated_api_client/api/classification_model/get_model_classification_model_name_or_id_get.py +156 -0
  17. orca_sdk/_generated_api_client/api/classification_model/list_evaluations_classification_model_model_name_or_id_evaluation_get.py +161 -0
  18. orca_sdk/_generated_api_client/api/classification_model/list_models_classification_model_get.py +127 -0
  19. orca_sdk/_generated_api_client/api/classification_model/predict_gpu_classification_model_name_or_id_prediction_post.py +190 -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 +167 -0
  22. orca_sdk/_generated_api_client/api/datasource/delete_datasource_datasource_name_or_id_delete.py +156 -0
  23. orca_sdk/_generated_api_client/api/datasource/get_datasource_datasource_name_or_id_get.py +156 -0
  24. orca_sdk/_generated_api_client/api/datasource/list_datasources_datasource_get.py +127 -0
  25. orca_sdk/_generated_api_client/api/default/__init__.py +0 -0
  26. orca_sdk/_generated_api_client/api/default/healthcheck_get.py +118 -0
  27. orca_sdk/_generated_api_client/api/default/healthcheck_gpu_get.py +118 -0
  28. orca_sdk/_generated_api_client/api/finetuned_embedding_model/__init__.py +0 -0
  29. orca_sdk/_generated_api_client/api/finetuned_embedding_model/create_finetuned_embedding_model_finetuned_embedding_model_post.py +168 -0
  30. orca_sdk/_generated_api_client/api/finetuned_embedding_model/delete_finetuned_embedding_model_finetuned_embedding_model_name_or_id_delete.py +156 -0
  31. orca_sdk/_generated_api_client/api/finetuned_embedding_model/embed_with_finetuned_model_gpu_finetuned_embedding_model_name_or_id_embedding_post.py +189 -0
  32. orca_sdk/_generated_api_client/api/finetuned_embedding_model/get_finetuned_embedding_model_finetuned_embedding_model_name_or_id_get.py +156 -0
  33. orca_sdk/_generated_api_client/api/finetuned_embedding_model/list_finetuned_embedding_models_finetuned_embedding_model_get.py +127 -0
  34. orca_sdk/_generated_api_client/api/memoryset/__init__.py +0 -0
  35. orca_sdk/_generated_api_client/api/memoryset/clone_memoryset_memoryset_name_or_id_clone_post.py +181 -0
  36. orca_sdk/_generated_api_client/api/memoryset/create_analysis_memoryset_name_or_id_analysis_post.py +183 -0
  37. orca_sdk/_generated_api_client/api/memoryset/create_memoryset_memoryset_post.py +168 -0
  38. orca_sdk/_generated_api_client/api/memoryset/delete_memories_memoryset_name_or_id_memories_delete_post.py +181 -0
  39. orca_sdk/_generated_api_client/api/memoryset/delete_memory_memoryset_name_or_id_memory_memory_id_delete.py +167 -0
  40. orca_sdk/_generated_api_client/api/memoryset/delete_memoryset_memoryset_name_or_id_delete.py +156 -0
  41. orca_sdk/_generated_api_client/api/memoryset/get_analysis_memoryset_name_or_id_analysis_analysis_task_id_get.py +169 -0
  42. orca_sdk/_generated_api_client/api/memoryset/get_memories_memoryset_name_or_id_memories_get_post.py +188 -0
  43. orca_sdk/_generated_api_client/api/memoryset/get_memory_memoryset_name_or_id_memory_memory_id_get.py +169 -0
  44. orca_sdk/_generated_api_client/api/memoryset/get_memoryset_memoryset_name_or_id_get.py +156 -0
  45. orca_sdk/_generated_api_client/api/memoryset/insert_memories_gpu_memoryset_name_or_id_memory_post.py +184 -0
  46. orca_sdk/_generated_api_client/api/memoryset/list_analyses_memoryset_name_or_id_analysis_get.py +260 -0
  47. orca_sdk/_generated_api_client/api/memoryset/list_memorysets_memoryset_get.py +127 -0
  48. orca_sdk/_generated_api_client/api/memoryset/memoryset_lookup_gpu_memoryset_name_or_id_lookup_post.py +193 -0
  49. orca_sdk/_generated_api_client/api/memoryset/query_memoryset_memoryset_name_or_id_memories_post.py +188 -0
  50. orca_sdk/_generated_api_client/api/memoryset/update_memories_gpu_memoryset_name_or_id_memories_patch.py +191 -0
  51. orca_sdk/_generated_api_client/api/memoryset/update_memory_gpu_memoryset_name_or_id_memory_patch.py +187 -0
  52. orca_sdk/_generated_api_client/api/pretrained_embedding_model/__init__.py +0 -0
  53. orca_sdk/_generated_api_client/api/pretrained_embedding_model/embed_with_pretrained_model_gpu_pretrained_embedding_model_model_name_embedding_post.py +188 -0
  54. orca_sdk/_generated_api_client/api/pretrained_embedding_model/get_pretrained_embedding_model_pretrained_embedding_model_model_name_get.py +157 -0
  55. orca_sdk/_generated_api_client/api/pretrained_embedding_model/list_pretrained_embedding_models_pretrained_embedding_model_get.py +127 -0
  56. orca_sdk/_generated_api_client/api/task/__init__.py +0 -0
  57. orca_sdk/_generated_api_client/api/task/abort_task_task_task_id_abort_delete.py +154 -0
  58. orca_sdk/_generated_api_client/api/task/get_task_status_task_task_id_status_get.py +156 -0
  59. orca_sdk/_generated_api_client/api/task/list_tasks_task_get.py +243 -0
  60. orca_sdk/_generated_api_client/api/telemetry/__init__.py +0 -0
  61. orca_sdk/_generated_api_client/api/telemetry/drop_feedback_category_with_data_telemetry_feedback_category_name_or_id_delete.py +162 -0
  62. orca_sdk/_generated_api_client/api/telemetry/get_feedback_category_telemetry_feedback_category_name_or_id_get.py +156 -0
  63. orca_sdk/_generated_api_client/api/telemetry/get_prediction_telemetry_prediction_prediction_id_get.py +157 -0
  64. orca_sdk/_generated_api_client/api/telemetry/list_feedback_categories_telemetry_feedback_category_get.py +127 -0
  65. orca_sdk/_generated_api_client/api/telemetry/list_predictions_telemetry_prediction_post.py +175 -0
  66. orca_sdk/_generated_api_client/api/telemetry/record_prediction_feedback_telemetry_prediction_feedback_put.py +171 -0
  67. orca_sdk/_generated_api_client/api/telemetry/update_prediction_telemetry_prediction_prediction_id_patch.py +181 -0
  68. orca_sdk/_generated_api_client/client.py +216 -0
  69. orca_sdk/_generated_api_client/errors.py +38 -0
  70. orca_sdk/_generated_api_client/models/__init__.py +159 -0
  71. orca_sdk/_generated_api_client/models/analyze_neighbor_labels_result.py +84 -0
  72. orca_sdk/_generated_api_client/models/api_key_metadata.py +118 -0
  73. orca_sdk/_generated_api_client/models/base_model.py +55 -0
  74. orca_sdk/_generated_api_client/models/body_create_datasource_datasource_post.py +176 -0
  75. orca_sdk/_generated_api_client/models/classification_evaluation_result.py +114 -0
  76. orca_sdk/_generated_api_client/models/clone_labeled_memoryset_request.py +150 -0
  77. orca_sdk/_generated_api_client/models/column_info.py +114 -0
  78. orca_sdk/_generated_api_client/models/column_type.py +14 -0
  79. orca_sdk/_generated_api_client/models/conflict_error_response.py +80 -0
  80. orca_sdk/_generated_api_client/models/create_api_key_request.py +99 -0
  81. orca_sdk/_generated_api_client/models/create_api_key_response.py +126 -0
  82. orca_sdk/_generated_api_client/models/create_labeled_memoryset_request.py +259 -0
  83. orca_sdk/_generated_api_client/models/create_rac_model_request.py +209 -0
  84. orca_sdk/_generated_api_client/models/datasource_metadata.py +142 -0
  85. orca_sdk/_generated_api_client/models/delete_memories_request.py +70 -0
  86. orca_sdk/_generated_api_client/models/embed_request.py +127 -0
  87. orca_sdk/_generated_api_client/models/embedding_finetuning_method.py +9 -0
  88. orca_sdk/_generated_api_client/models/evaluation_request.py +180 -0
  89. orca_sdk/_generated_api_client/models/evaluation_response.py +140 -0
  90. orca_sdk/_generated_api_client/models/feedback_type.py +9 -0
  91. orca_sdk/_generated_api_client/models/field_validation_error.py +103 -0
  92. orca_sdk/_generated_api_client/models/filter_item.py +231 -0
  93. orca_sdk/_generated_api_client/models/filter_item_field_type_0_item.py +15 -0
  94. orca_sdk/_generated_api_client/models/filter_item_field_type_2_item_type_1.py +16 -0
  95. orca_sdk/_generated_api_client/models/filter_item_op.py +16 -0
  96. orca_sdk/_generated_api_client/models/find_duplicates_analysis_result.py +70 -0
  97. orca_sdk/_generated_api_client/models/finetune_embedding_model_request.py +259 -0
  98. orca_sdk/_generated_api_client/models/finetune_embedding_model_request_training_args.py +66 -0
  99. orca_sdk/_generated_api_client/models/finetuned_embedding_model_metadata.py +166 -0
  100. orca_sdk/_generated_api_client/models/get_memories_request.py +70 -0
  101. orca_sdk/_generated_api_client/models/internal_server_error_response.py +80 -0
  102. orca_sdk/_generated_api_client/models/label_class_metrics.py +108 -0
  103. orca_sdk/_generated_api_client/models/label_prediction_memory_lookup.py +274 -0
  104. orca_sdk/_generated_api_client/models/label_prediction_memory_lookup_metadata.py +68 -0
  105. orca_sdk/_generated_api_client/models/label_prediction_result.py +101 -0
  106. orca_sdk/_generated_api_client/models/label_prediction_with_memories_and_feedback.py +232 -0
  107. orca_sdk/_generated_api_client/models/labeled_memory.py +197 -0
  108. orca_sdk/_generated_api_client/models/labeled_memory_insert.py +108 -0
  109. orca_sdk/_generated_api_client/models/labeled_memory_insert_metadata.py +68 -0
  110. orca_sdk/_generated_api_client/models/labeled_memory_lookup.py +258 -0
  111. orca_sdk/_generated_api_client/models/labeled_memory_lookup_metadata.py +68 -0
  112. orca_sdk/_generated_api_client/models/labeled_memory_metadata.py +68 -0
  113. orca_sdk/_generated_api_client/models/labeled_memory_metrics.py +277 -0
  114. orca_sdk/_generated_api_client/models/labeled_memory_update.py +171 -0
  115. orca_sdk/_generated_api_client/models/labeled_memory_update_metadata_type_0.py +68 -0
  116. orca_sdk/_generated_api_client/models/labeled_memoryset_metadata.py +195 -0
  117. orca_sdk/_generated_api_client/models/list_analyses_memoryset_name_or_id_analysis_get_type_type_0.py +9 -0
  118. orca_sdk/_generated_api_client/models/list_memories_request.py +104 -0
  119. orca_sdk/_generated_api_client/models/list_predictions_request.py +234 -0
  120. orca_sdk/_generated_api_client/models/list_predictions_request_sort_item_item_type_0.py +9 -0
  121. orca_sdk/_generated_api_client/models/list_predictions_request_sort_item_item_type_1.py +9 -0
  122. orca_sdk/_generated_api_client/models/lookup_request.py +81 -0
  123. orca_sdk/_generated_api_client/models/memoryset_analysis_request.py +83 -0
  124. orca_sdk/_generated_api_client/models/memoryset_analysis_request_type.py +9 -0
  125. orca_sdk/_generated_api_client/models/memoryset_analysis_response.py +180 -0
  126. orca_sdk/_generated_api_client/models/memoryset_analysis_response_config.py +66 -0
  127. orca_sdk/_generated_api_client/models/memoryset_analysis_response_type.py +9 -0
  128. orca_sdk/_generated_api_client/models/not_found_error_response.py +100 -0
  129. orca_sdk/_generated_api_client/models/not_found_error_response_resource_type_0.py +20 -0
  130. orca_sdk/_generated_api_client/models/prediction_feedback.py +157 -0
  131. orca_sdk/_generated_api_client/models/prediction_feedback_category.py +115 -0
  132. orca_sdk/_generated_api_client/models/prediction_feedback_request.py +122 -0
  133. orca_sdk/_generated_api_client/models/prediction_feedback_result.py +102 -0
  134. orca_sdk/_generated_api_client/models/prediction_request.py +169 -0
  135. orca_sdk/_generated_api_client/models/pretrained_embedding_model_metadata.py +97 -0
  136. orca_sdk/_generated_api_client/models/pretrained_embedding_model_name.py +11 -0
  137. orca_sdk/_generated_api_client/models/rac_head_type.py +11 -0
  138. orca_sdk/_generated_api_client/models/rac_model_metadata.py +191 -0
  139. orca_sdk/_generated_api_client/models/service_unavailable_error_response.py +80 -0
  140. orca_sdk/_generated_api_client/models/task.py +198 -0
  141. orca_sdk/_generated_api_client/models/task_status.py +14 -0
  142. orca_sdk/_generated_api_client/models/task_status_info.py +133 -0
  143. orca_sdk/_generated_api_client/models/unauthenticated_error_response.py +72 -0
  144. orca_sdk/_generated_api_client/models/unauthorized_error_response.py +80 -0
  145. orca_sdk/_generated_api_client/models/unprocessable_input_error_response.py +94 -0
  146. orca_sdk/_generated_api_client/models/update_prediction_request.py +93 -0
  147. orca_sdk/_generated_api_client/py.typed +1 -0
  148. orca_sdk/_generated_api_client/types.py +56 -0
  149. orca_sdk/_utils/__init__.py +0 -0
  150. orca_sdk/_utils/analysis_ui.py +194 -0
  151. orca_sdk/_utils/analysis_ui_style.css +54 -0
  152. orca_sdk/_utils/auth.py +63 -0
  153. orca_sdk/_utils/auth_test.py +31 -0
  154. orca_sdk/_utils/common.py +37 -0
  155. orca_sdk/_utils/data_parsing.py +99 -0
  156. orca_sdk/_utils/data_parsing_test.py +244 -0
  157. orca_sdk/_utils/prediction_result_ui.css +18 -0
  158. orca_sdk/_utils/prediction_result_ui.py +64 -0
  159. orca_sdk/_utils/task.py +73 -0
  160. orca_sdk/classification_model.py +499 -0
  161. orca_sdk/classification_model_test.py +266 -0
  162. orca_sdk/conftest.py +117 -0
  163. orca_sdk/datasource.py +333 -0
  164. orca_sdk/datasource_test.py +95 -0
  165. orca_sdk/embedding_model.py +336 -0
  166. orca_sdk/embedding_model_test.py +173 -0
  167. orca_sdk/labeled_memoryset.py +1154 -0
  168. orca_sdk/labeled_memoryset_test.py +271 -0
  169. orca_sdk/orca_credentials.py +75 -0
  170. orca_sdk/orca_credentials_test.py +37 -0
  171. orca_sdk/telemetry.py +386 -0
  172. orca_sdk/telemetry_test.py +100 -0
  173. orca_sdk-0.1.0.dist-info/METADATA +39 -0
  174. orca_sdk-0.1.0.dist-info/RECORD +175 -0
  175. orca_sdk-0.1.0.dist-info/WHEEL +4 -0
@@ -0,0 +1,171 @@
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, Dict, List
15
+
16
+ import httpx
17
+
18
+ from ...client import _client_context
19
+ from ...errors import get_error_for_response
20
+ from ...models.prediction_feedback_request import PredictionFeedbackRequest
21
+ from ...models.prediction_feedback_result import PredictionFeedbackResult
22
+ from ...types import Response
23
+
24
+
25
+ def _get_kwargs(
26
+ *,
27
+ body: List["PredictionFeedbackRequest"],
28
+ ) -> dict[str, Any]:
29
+ headers: Dict[str, Any] = {}
30
+
31
+ _kwargs: dict[str, Any] = {
32
+ "method": "put",
33
+ "url": "/telemetry/prediction/feedback",
34
+ }
35
+
36
+ _body = []
37
+ for body_item_data in body:
38
+ body_item = body_item_data.to_dict()
39
+ _body.append(body_item)
40
+
41
+ _kwargs["json"] = _body
42
+ headers["Content-Type"] = "application/json"
43
+
44
+ _kwargs["headers"] = headers
45
+ return _kwargs
46
+
47
+
48
+ def _parse_response(*, response: httpx.Response) -> PredictionFeedbackResult:
49
+ if response.status_code == 200:
50
+ response_200 = PredictionFeedbackResult.from_dict(response.json())
51
+
52
+ return response_200
53
+ if response.status_code == 401:
54
+ raise get_error_for_response(response)
55
+ if response.status_code == 500:
56
+ raise get_error_for_response(response)
57
+ if response.status_code == 503:
58
+ raise get_error_for_response(response)
59
+ if response.status_code == 422:
60
+ raise get_error_for_response(response)
61
+
62
+
63
+ def _build_response(*, response: httpx.Response) -> Response[PredictionFeedbackResult]:
64
+ return Response(
65
+ status_code=HTTPStatus(response.status_code),
66
+ content=response.content,
67
+ headers=response.headers,
68
+ parsed=_parse_response(response=response),
69
+ )
70
+
71
+
72
+ def sync_detailed(
73
+ *,
74
+ body: List["PredictionFeedbackRequest"],
75
+ ) -> Response[PredictionFeedbackResult]:
76
+ """Record Prediction Feedback
77
+
78
+ Args:
79
+ body (List['PredictionFeedbackRequest']):
80
+
81
+ Raises:
82
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
83
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
84
+
85
+ Returns:
86
+ Response[PredictionFeedbackResult]
87
+ """
88
+
89
+ kwargs = _get_kwargs(
90
+ body=body,
91
+ )
92
+
93
+ with _client_context() as client:
94
+ response = client.get_httpx_client().request(
95
+ **kwargs,
96
+ )
97
+
98
+ return _build_response(response=response)
99
+
100
+
101
+ def sync(
102
+ *,
103
+ body: List["PredictionFeedbackRequest"],
104
+ ) -> PredictionFeedbackResult:
105
+ """Record Prediction Feedback
106
+
107
+ Args:
108
+ body (List['PredictionFeedbackRequest']):
109
+
110
+ Raises:
111
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
112
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
113
+
114
+ Returns:
115
+ PredictionFeedbackResult
116
+ """
117
+
118
+ return sync_detailed(
119
+ body=body,
120
+ ).parsed
121
+
122
+
123
+ async def asyncio_detailed(
124
+ *,
125
+ body: List["PredictionFeedbackRequest"],
126
+ ) -> Response[PredictionFeedbackResult]:
127
+ """Record Prediction Feedback
128
+
129
+ Args:
130
+ body (List['PredictionFeedbackRequest']):
131
+
132
+ Raises:
133
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
134
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
135
+
136
+ Returns:
137
+ Response[PredictionFeedbackResult]
138
+ """
139
+
140
+ kwargs = _get_kwargs(
141
+ body=body,
142
+ )
143
+
144
+ with _client_context() as client:
145
+ response = await client.get_async_httpx_client().request(**kwargs)
146
+
147
+ return _build_response(response=response)
148
+
149
+
150
+ async def asyncio(
151
+ *,
152
+ body: List["PredictionFeedbackRequest"],
153
+ ) -> PredictionFeedbackResult:
154
+ """Record Prediction Feedback
155
+
156
+ Args:
157
+ body (List['PredictionFeedbackRequest']):
158
+
159
+ Raises:
160
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
161
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
162
+
163
+ Returns:
164
+ PredictionFeedbackResult
165
+ """
166
+
167
+ return (
168
+ await asyncio_detailed(
169
+ body=body,
170
+ )
171
+ ).parsed
@@ -0,0 +1,181 @@
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, Dict
15
+
16
+ import httpx
17
+
18
+ from ...client import _client_context
19
+ from ...errors import get_error_for_response
20
+ from ...models.update_prediction_request import UpdatePredictionRequest
21
+ from ...types import Response
22
+
23
+
24
+ def _get_kwargs(
25
+ prediction_id: str,
26
+ *,
27
+ body: UpdatePredictionRequest,
28
+ ) -> dict[str, Any]:
29
+ headers: Dict[str, Any] = {}
30
+
31
+ _kwargs: dict[str, Any] = {
32
+ "method": "patch",
33
+ "url": f"/telemetry/prediction/{prediction_id}",
34
+ }
35
+
36
+ _body = body.to_dict()
37
+
38
+ _kwargs["json"] = _body
39
+ headers["Content-Type"] = "application/json"
40
+
41
+ _kwargs["headers"] = headers
42
+ return _kwargs
43
+
44
+
45
+ def _parse_response(*, response: httpx.Response) -> None:
46
+ if response.status_code == 200:
47
+ response_200 = response.json()
48
+ return response_200
49
+ if response.status_code == 401:
50
+ raise get_error_for_response(response)
51
+ if response.status_code == 500:
52
+ raise get_error_for_response(response)
53
+ if response.status_code == 503:
54
+ raise get_error_for_response(response)
55
+ if response.status_code == 422:
56
+ raise get_error_for_response(response)
57
+ if response.status_code == 404:
58
+ raise get_error_for_response(response)
59
+
60
+
61
+ def _build_response(*, response: httpx.Response) -> Response[None]:
62
+ return Response(
63
+ status_code=HTTPStatus(response.status_code),
64
+ content=response.content,
65
+ headers=response.headers,
66
+ parsed=_parse_response(response=response),
67
+ )
68
+
69
+
70
+ def sync_detailed(
71
+ prediction_id: str,
72
+ *,
73
+ body: UpdatePredictionRequest,
74
+ ) -> Response[None]:
75
+ """Update Prediction
76
+
77
+ Args:
78
+ prediction_id (str):
79
+ body (UpdatePredictionRequest):
80
+
81
+ Raises:
82
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
83
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
84
+
85
+ Returns:
86
+ Response[None]
87
+ """
88
+
89
+ kwargs = _get_kwargs(
90
+ prediction_id=prediction_id,
91
+ body=body,
92
+ )
93
+
94
+ with _client_context() as client:
95
+ response = client.get_httpx_client().request(
96
+ **kwargs,
97
+ )
98
+
99
+ return _build_response(response=response)
100
+
101
+
102
+ def sync(
103
+ prediction_id: str,
104
+ *,
105
+ body: UpdatePredictionRequest,
106
+ ) -> None:
107
+ """Update Prediction
108
+
109
+ Args:
110
+ prediction_id (str):
111
+ body (UpdatePredictionRequest):
112
+
113
+ Raises:
114
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
115
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
116
+
117
+ Returns:
118
+ None
119
+ """
120
+
121
+ return sync_detailed(
122
+ prediction_id=prediction_id,
123
+ body=body,
124
+ ).parsed
125
+
126
+
127
+ async def asyncio_detailed(
128
+ prediction_id: str,
129
+ *,
130
+ body: UpdatePredictionRequest,
131
+ ) -> Response[None]:
132
+ """Update Prediction
133
+
134
+ Args:
135
+ prediction_id (str):
136
+ body (UpdatePredictionRequest):
137
+
138
+ Raises:
139
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
140
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
141
+
142
+ Returns:
143
+ Response[None]
144
+ """
145
+
146
+ kwargs = _get_kwargs(
147
+ prediction_id=prediction_id,
148
+ body=body,
149
+ )
150
+
151
+ with _client_context() as client:
152
+ response = await client.get_async_httpx_client().request(**kwargs)
153
+
154
+ return _build_response(response=response)
155
+
156
+
157
+ async def asyncio(
158
+ prediction_id: str,
159
+ *,
160
+ body: UpdatePredictionRequest,
161
+ ) -> None:
162
+ """Update Prediction
163
+
164
+ Args:
165
+ prediction_id (str):
166
+ body (UpdatePredictionRequest):
167
+
168
+ Raises:
169
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
170
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
171
+
172
+ Returns:
173
+ None
174
+ """
175
+
176
+ return (
177
+ await asyncio_detailed(
178
+ prediction_id=prediction_id,
179
+ body=body,
180
+ )
181
+ ).parsed
@@ -0,0 +1,216 @@
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/5cfe4e1d594951725844ea470fc9d61f40c08093/openapi_python_client/templates/client.py.jinja
6
+
7
+ The main changes are:
8
+ - add a lazy initialized global client singleton that is injected into every api method via a context manager
9
+ - add methods for setting headers and base URL on the global client singleton
10
+ """
11
+
12
+ import os
13
+ import ssl
14
+ from contextlib import contextmanager
15
+ from typing import Any, Optional, Union
16
+
17
+ import httpx
18
+ from attrs import define, evolve, field
19
+
20
+
21
+ @define
22
+ class Client:
23
+ """A class for keeping track of data related to the API
24
+
25
+ The following are accepted as keyword arguments and will be used to construct httpx Clients internally:
26
+
27
+ ``base_url``: The base URL for the API, all requests are made to a relative path to this URL
28
+
29
+ ``cookies``: A dictionary of cookies to be sent with every request
30
+
31
+ ``headers``: A dictionary of headers to be sent with every request
32
+
33
+ ``timeout``: The maximum amount of a time a request can take. API functions will raise
34
+ httpx.TimeoutException if this is exceeded.
35
+
36
+ ``verify_ssl``: Whether or not to verify the SSL certificate of the API server. This should be True in production,
37
+ but can be set to False for testing purposes.
38
+
39
+ ``follow_redirects``: Whether or not to follow redirects. Default value is False.
40
+
41
+ ``httpx_args``: A dictionary of additional arguments to be passed to the ``httpx.Client`` and ``httpx.AsyncClient`` constructor.
42
+
43
+
44
+ Attributes:
45
+ raise_on_unexpected_status: Whether or not to raise an errors.UnexpectedStatus if the API returns a
46
+ status code that was not documented in the source OpenAPI document. Can also be provided as a keyword
47
+ argument to the constructor.
48
+ """
49
+
50
+ raise_on_unexpected_status: bool = field(default=False, kw_only=True)
51
+ _base_url: str = field(alias="base_url")
52
+ _cookies: dict[str, str] = field(factory=dict, kw_only=True, alias="cookies")
53
+ _headers: dict[str, str] = field(factory=dict, kw_only=True, alias="headers")
54
+ _timeout: Optional[httpx.Timeout] = field(default=None, kw_only=True, alias="timeout")
55
+ _verify_ssl: Union[str, bool, ssl.SSLContext] = field(default=True, kw_only=True, alias="verify_ssl")
56
+ _follow_redirects: bool = field(default=False, kw_only=True, alias="follow_redirects")
57
+ _httpx_args: dict[str, Any] = field(factory=dict, kw_only=True, alias="httpx_args")
58
+ _client: Optional[httpx.Client] = field(default=None, init=False)
59
+ _async_client: Optional[httpx.AsyncClient] = field(default=None, init=False)
60
+
61
+ def with_headers(self, headers: dict[str, str]) -> "Client":
62
+ """Get a new client matching this one with additional headers"""
63
+ if self._client is not None:
64
+ self._client.headers.update(headers)
65
+ if self._async_client is not None:
66
+ self._async_client.headers.update(headers)
67
+ return evolve(self, headers={**self._headers, **headers})
68
+
69
+ def with_cookies(self, cookies: dict[str, str]) -> "Client":
70
+ """Get a new client matching this one with additional cookies"""
71
+ if self._client is not None:
72
+ self._client.cookies.update(cookies)
73
+ if self._async_client is not None:
74
+ self._async_client.cookies.update(cookies)
75
+ return evolve(self, cookies={**self._cookies, **cookies})
76
+
77
+ def with_timeout(self, timeout: httpx.Timeout) -> "Client":
78
+ """Get a new client matching this one with a new timeout (in seconds)"""
79
+ if self._client is not None:
80
+ self._client.timeout = timeout
81
+ if self._async_client is not None:
82
+ self._async_client.timeout = timeout
83
+ return evolve(self, timeout=timeout)
84
+
85
+ def set_httpx_client(self, client: httpx.Client) -> "Client":
86
+ """Manually set the underlying httpx.Client
87
+
88
+ **NOTE**: This will override any other settings on the client, including cookies, headers, and timeout.
89
+ """
90
+ self._client = client
91
+ return self
92
+
93
+ def get_httpx_client(self) -> httpx.Client:
94
+ """Get the underlying httpx.Client, constructing a new one if not previously set"""
95
+ if self._client is None:
96
+ self._client = httpx.Client(
97
+ base_url=self._base_url,
98
+ cookies=self._cookies,
99
+ headers=self._headers,
100
+ timeout=self._timeout,
101
+ verify=self._verify_ssl,
102
+ follow_redirects=self._follow_redirects,
103
+ **self._httpx_args,
104
+ )
105
+ return self._client
106
+
107
+ def __enter__(self) -> "Client":
108
+ """Enter a context manager for self.client—you cannot enter twice (see httpx docs)"""
109
+ self.get_httpx_client().__enter__()
110
+ return self
111
+
112
+ def __exit__(self, *args: Any, **kwargs: Any) -> None:
113
+ """Exit a context manager for internal httpx.Client (see httpx docs)"""
114
+ self.get_httpx_client().__exit__(*args, **kwargs)
115
+
116
+ def set_async_httpx_client(self, async_client: httpx.AsyncClient) -> "Client":
117
+ """Manually the underlying httpx.AsyncClient
118
+
119
+ **NOTE**: This will override any other settings on the client, including cookies, headers, and timeout.
120
+ """
121
+ self._async_client = async_client
122
+ return self
123
+
124
+ def get_async_httpx_client(self) -> httpx.AsyncClient:
125
+ """Get the underlying httpx.AsyncClient, constructing a new one if not previously set"""
126
+ if self._async_client is None:
127
+ self._async_client = httpx.AsyncClient(
128
+ base_url=self._base_url,
129
+ cookies=self._cookies,
130
+ headers=self._headers,
131
+ timeout=self._timeout,
132
+ verify=self._verify_ssl,
133
+ follow_redirects=self._follow_redirects,
134
+ **self._httpx_args,
135
+ )
136
+ return self._async_client
137
+
138
+ async def __aenter__(self) -> "Client":
139
+ """Enter a context manager for underlying httpx.AsyncClient—you cannot enter twice (see httpx docs)"""
140
+ await self.get_async_httpx_client().__aenter__()
141
+ return self
142
+
143
+ async def __aexit__(self, *args: Any, **kwargs: Any) -> None:
144
+ """Exit a context manager for underlying httpx.AsyncClient (see httpx docs)"""
145
+ await self.get_async_httpx_client().__aexit__(*args, **kwargs)
146
+
147
+
148
+ # this must be initialized lazily to ensure that the environment variables are set
149
+ _client: Optional["Client"] = None
150
+
151
+
152
+ def get_base_url():
153
+ """Get the base URL for the global client singleton"""
154
+ global _client
155
+ if _client is not None:
156
+ return _client._base_url
157
+ return os.environ.get("ORCA_API_URL", "https://api.orcadb.ai/")
158
+
159
+
160
+ def get_headers():
161
+ """Get the headers for the global client singleton"""
162
+ global _client
163
+ if _client is not None:
164
+ return _client._headers
165
+ headers = {}
166
+ api_key = os.environ.get("ORCA_API_KEY")
167
+ if api_key is not None:
168
+ headers["Api-Key"] = api_key
169
+ return headers
170
+
171
+
172
+ def get_client():
173
+ """Get the global client singleton"""
174
+ global _client
175
+ if _client is None:
176
+ _client = Client(base_url=get_base_url(), headers=get_headers())
177
+ return _client
178
+
179
+
180
+ def set_headers(headers: dict[str, str]):
181
+ """Set the headers for the global client singleton"""
182
+ global _client
183
+ _client = Client(base_url=get_base_url(), headers=headers)
184
+ return _client
185
+
186
+
187
+ def set_base_url(base_url: str):
188
+ """Set the base URL for the global client singleton"""
189
+ global _client
190
+ _client = Client(base_url=base_url, headers=_client._headers if _client is not None else {})
191
+ return _client
192
+
193
+
194
+ @contextmanager
195
+ def headers_context(headers: dict[str, str]):
196
+ """Set the headers for the global client singleton within a context manager"""
197
+ global _client
198
+ old_client = get_client()
199
+ set_headers(headers=headers)
200
+ yield
201
+ _client = old_client
202
+
203
+
204
+ @contextmanager
205
+ def base_url_context(base_url: str):
206
+ """Set the base URL for the global client singleton within a context manager"""
207
+ global _client
208
+ old_client = get_client()
209
+ set_base_url(base_url=base_url)
210
+ yield
211
+ _client = old_client
212
+
213
+
214
+ @contextmanager
215
+ def _client_context():
216
+ yield get_client()
@@ -0,0 +1,38 @@
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/errors.py.jinja
6
+
7
+ The main change is:
8
+ - Returning the appropriate python exception for Orca API's error responses
9
+ """
10
+
11
+ import httpx
12
+
13
+
14
+ def get_error_for_response(response: httpx.Response):
15
+ """Raise an appropriate exception based on the response status code and content"""
16
+ if response.status_code == 401:
17
+ return ValueError("Invalid API key")
18
+ elif response.status_code == 403:
19
+ return PermissionError(response.json()["reason"])
20
+ elif response.status_code == 404:
21
+ resource = response.json()["resource"]
22
+ if resource is not None:
23
+ return LookupError(f"The {resource} you are looking for does not exist")
24
+ else:
25
+ return RuntimeError(f"Unknown API route: {response.url}")
26
+ elif response.status_code == 405:
27
+ return RuntimeError(f"Unknown method {response.request.method} for API route: {response.url}")
28
+ elif response.status_code == 409:
29
+ return RuntimeError(response.json()["constraint"])
30
+ elif response.status_code == 422:
31
+ issues = [f"{issue['loc'][-1]}: {issue['msg']}" for issue in response.json()["validation_issues"]]
32
+ return ValueError("Invalid input:\n\t" + "\n\t".join(issues))
33
+ elif response.status_code == 500:
34
+ return RuntimeError(f"Unexpected server error: {response.json()['message']}")
35
+ elif response.status_code == 503:
36
+ return RuntimeError("Orca API is currently unavailable, please try again later")
37
+ else:
38
+ return RuntimeError(f"Unexpected status code: {response.status_code}")