mirascope 2.0.0a4__py3-none-any.whl → 2.0.0a6__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 (215) hide show
  1. mirascope/__init__.py +10 -1
  2. mirascope/_stubs.py +363 -0
  3. mirascope/api/__init__.py +8 -0
  4. mirascope/api/_generated/__init__.py +119 -1
  5. mirascope/api/_generated/annotations/__init__.py +33 -0
  6. mirascope/api/_generated/annotations/client.py +474 -0
  7. mirascope/api/_generated/annotations/raw_client.py +1095 -0
  8. mirascope/api/_generated/annotations/types/__init__.py +31 -0
  9. mirascope/api/_generated/annotations/types/annotations_create_request_label.py +5 -0
  10. mirascope/api/_generated/annotations/types/annotations_create_response.py +35 -0
  11. mirascope/api/_generated/annotations/types/annotations_create_response_label.py +5 -0
  12. mirascope/api/_generated/annotations/types/annotations_get_response.py +35 -0
  13. mirascope/api/_generated/annotations/types/annotations_get_response_label.py +5 -0
  14. mirascope/api/_generated/annotations/types/annotations_list_request_label.py +5 -0
  15. mirascope/api/_generated/annotations/types/annotations_list_response.py +21 -0
  16. mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item.py +35 -0
  17. mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item_label.py +5 -0
  18. mirascope/api/_generated/annotations/types/annotations_update_request_label.py +5 -0
  19. mirascope/api/_generated/annotations/types/annotations_update_response.py +35 -0
  20. mirascope/api/_generated/annotations/types/annotations_update_response_label.py +5 -0
  21. mirascope/api/_generated/api_keys/__init__.py +7 -0
  22. mirascope/api/_generated/api_keys/client.py +429 -0
  23. mirascope/api/_generated/api_keys/raw_client.py +788 -0
  24. mirascope/api/_generated/api_keys/types/__init__.py +9 -0
  25. mirascope/api/_generated/api_keys/types/api_keys_create_response.py +28 -0
  26. mirascope/api/_generated/api_keys/types/api_keys_get_response.py +27 -0
  27. mirascope/api/_generated/api_keys/types/api_keys_list_response_item.py +27 -0
  28. mirascope/api/_generated/client.py +12 -0
  29. mirascope/api/_generated/core/client_wrapper.py +2 -14
  30. mirascope/api/_generated/core/datetime_utils.py +1 -3
  31. mirascope/api/_generated/core/file.py +2 -5
  32. mirascope/api/_generated/core/http_client.py +36 -112
  33. mirascope/api/_generated/core/jsonable_encoder.py +1 -3
  34. mirascope/api/_generated/core/pydantic_utilities.py +19 -74
  35. mirascope/api/_generated/core/query_encoder.py +1 -3
  36. mirascope/api/_generated/core/serialization.py +4 -10
  37. mirascope/api/_generated/docs/client.py +2 -6
  38. mirascope/api/_generated/docs/raw_client.py +4 -20
  39. mirascope/api/_generated/environments/__init__.py +17 -0
  40. mirascope/api/_generated/environments/client.py +500 -0
  41. mirascope/api/_generated/environments/raw_client.py +999 -0
  42. mirascope/api/_generated/environments/types/__init__.py +15 -0
  43. mirascope/api/_generated/environments/types/environments_create_response.py +24 -0
  44. mirascope/api/_generated/environments/types/environments_get_response.py +24 -0
  45. mirascope/api/_generated/environments/types/environments_list_response_item.py +24 -0
  46. mirascope/api/_generated/environments/types/environments_update_response.py +24 -0
  47. mirascope/api/_generated/errors/__init__.py +2 -0
  48. mirascope/api/_generated/errors/bad_request_error.py +1 -5
  49. mirascope/api/_generated/errors/conflict_error.py +1 -5
  50. mirascope/api/_generated/errors/forbidden_error.py +1 -5
  51. mirascope/api/_generated/errors/internal_server_error.py +1 -6
  52. mirascope/api/_generated/errors/not_found_error.py +1 -5
  53. mirascope/api/_generated/errors/unauthorized_error.py +11 -0
  54. mirascope/api/_generated/functions/__init__.py +29 -0
  55. mirascope/api/_generated/functions/client.py +433 -0
  56. mirascope/api/_generated/functions/raw_client.py +1049 -0
  57. mirascope/api/_generated/functions/types/__init__.py +29 -0
  58. mirascope/api/_generated/functions/types/functions_create_request_dependencies_value.py +20 -0
  59. mirascope/api/_generated/functions/types/functions_create_response.py +37 -0
  60. mirascope/api/_generated/functions/types/functions_create_response_dependencies_value.py +20 -0
  61. mirascope/api/_generated/functions/types/functions_find_by_hash_response.py +39 -0
  62. mirascope/api/_generated/functions/types/functions_find_by_hash_response_dependencies_value.py +20 -0
  63. mirascope/api/_generated/functions/types/functions_get_response.py +37 -0
  64. mirascope/api/_generated/functions/types/functions_get_response_dependencies_value.py +20 -0
  65. mirascope/api/_generated/functions/types/functions_list_response.py +21 -0
  66. mirascope/api/_generated/functions/types/functions_list_response_functions_item.py +41 -0
  67. mirascope/api/_generated/functions/types/functions_list_response_functions_item_dependencies_value.py +20 -0
  68. mirascope/api/_generated/health/client.py +2 -6
  69. mirascope/api/_generated/health/raw_client.py +5 -23
  70. mirascope/api/_generated/health/types/health_check_response.py +1 -3
  71. mirascope/api/_generated/organizations/__init__.py +2 -0
  72. mirascope/api/_generated/organizations/client.py +94 -27
  73. mirascope/api/_generated/organizations/raw_client.py +246 -128
  74. mirascope/api/_generated/organizations/types/__init__.py +2 -0
  75. mirascope/api/_generated/organizations/types/organizations_create_response.py +5 -3
  76. mirascope/api/_generated/organizations/types/organizations_create_response_role.py +1 -3
  77. mirascope/api/_generated/organizations/types/organizations_credits_response.py +19 -0
  78. mirascope/api/_generated/organizations/types/organizations_get_response.py +5 -3
  79. mirascope/api/_generated/organizations/types/organizations_get_response_role.py +1 -3
  80. mirascope/api/_generated/organizations/types/organizations_list_response_item.py +5 -3
  81. mirascope/api/_generated/organizations/types/organizations_list_response_item_role.py +1 -3
  82. mirascope/api/_generated/organizations/types/organizations_update_response.py +5 -3
  83. mirascope/api/_generated/organizations/types/organizations_update_response_role.py +1 -3
  84. mirascope/api/_generated/projects/__init__.py +2 -12
  85. mirascope/api/_generated/projects/client.py +38 -68
  86. mirascope/api/_generated/projects/raw_client.py +92 -163
  87. mirascope/api/_generated/projects/types/__init__.py +1 -6
  88. mirascope/api/_generated/projects/types/projects_create_response.py +4 -9
  89. mirascope/api/_generated/projects/types/projects_get_response.py +4 -9
  90. mirascope/api/_generated/projects/types/projects_list_response_item.py +4 -9
  91. mirascope/api/_generated/projects/types/projects_update_response.py +4 -9
  92. mirascope/api/_generated/reference.md +1862 -70
  93. mirascope/api/_generated/traces/__init__.py +22 -0
  94. mirascope/api/_generated/traces/client.py +398 -0
  95. mirascope/api/_generated/traces/raw_client.py +902 -18
  96. mirascope/api/_generated/traces/types/__init__.py +32 -0
  97. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item.py +4 -11
  98. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource.py +2 -6
  99. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item.py +1 -3
  100. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value.py +8 -24
  101. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_array_value.py +2 -6
  102. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value.py +3 -9
  103. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value_values_item.py +2 -6
  104. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item.py +3 -9
  105. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope.py +4 -8
  106. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item.py +2 -6
  107. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value.py +8 -24
  108. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_array_value.py +2 -6
  109. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value.py +3 -9
  110. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value_values_item.py +1 -3
  111. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item.py +6 -18
  112. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item.py +3 -9
  113. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value.py +8 -24
  114. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_array_value.py +2 -6
  115. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value.py +2 -6
  116. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value_values_item.py +1 -3
  117. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_status.py +2 -6
  118. mirascope/api/_generated/traces/types/traces_create_response.py +2 -5
  119. mirascope/api/_generated/traces/types/traces_create_response_partial_success.py +3 -9
  120. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response.py +54 -0
  121. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_functions_item.py +24 -0
  122. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_models_item.py +22 -0
  123. mirascope/api/_generated/traces/types/traces_get_trace_detail_response.py +33 -0
  124. mirascope/api/_generated/traces/types/traces_get_trace_detail_response_spans_item.py +90 -0
  125. mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item.py +26 -0
  126. mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item_operator.py +7 -0
  127. mirascope/api/_generated/traces/types/traces_search_request_sort_by.py +7 -0
  128. mirascope/api/_generated/traces/types/traces_search_request_sort_order.py +5 -0
  129. mirascope/api/_generated/traces/types/traces_search_response.py +26 -0
  130. mirascope/api/_generated/traces/types/traces_search_response_spans_item.py +41 -0
  131. mirascope/api/_generated/types/__init__.py +18 -0
  132. mirascope/api/_generated/types/already_exists_error.py +1 -3
  133. mirascope/api/_generated/types/click_house_error.py +22 -0
  134. mirascope/api/_generated/types/database_error.py +1 -3
  135. mirascope/api/_generated/types/http_api_decode_error.py +1 -3
  136. mirascope/api/_generated/types/internal_server_error_body.py +49 -0
  137. mirascope/api/_generated/types/issue.py +1 -3
  138. mirascope/api/_generated/types/issue_tag.py +1 -8
  139. mirascope/api/_generated/types/not_found_error_body.py +1 -3
  140. mirascope/api/_generated/types/number_from_string.py +3 -0
  141. mirascope/api/_generated/types/permission_denied_error.py +1 -3
  142. mirascope/api/_generated/types/permission_denied_error_tag.py +1 -3
  143. mirascope/api/_generated/types/property_key_key.py +1 -3
  144. mirascope/api/_generated/types/stripe_error.py +20 -0
  145. mirascope/api/_generated/types/unauthorized_error_body.py +21 -0
  146. mirascope/api/_generated/types/unauthorized_error_tag.py +5 -0
  147. mirascope/llm/__init__.py +6 -2
  148. mirascope/llm/content/tool_call.py +6 -0
  149. mirascope/llm/exceptions.py +28 -0
  150. mirascope/llm/formatting/__init__.py +2 -2
  151. mirascope/llm/formatting/format.py +120 -8
  152. mirascope/llm/formatting/types.py +1 -56
  153. mirascope/llm/mcp/__init__.py +2 -2
  154. mirascope/llm/mcp/mcp_client.py +130 -0
  155. mirascope/llm/providers/__init__.py +26 -5
  156. mirascope/llm/providers/anthropic/__init__.py +3 -21
  157. mirascope/llm/providers/anthropic/_utils/__init__.py +2 -0
  158. mirascope/llm/providers/anthropic/_utils/beta_decode.py +4 -2
  159. mirascope/llm/providers/anthropic/_utils/beta_encode.py +13 -12
  160. mirascope/llm/providers/anthropic/_utils/decode.py +4 -2
  161. mirascope/llm/providers/anthropic/_utils/encode.py +57 -14
  162. mirascope/llm/providers/anthropic/_utils/errors.py +46 -0
  163. mirascope/llm/providers/anthropic/beta_provider.py +6 -0
  164. mirascope/llm/providers/anthropic/provider.py +5 -0
  165. mirascope/llm/providers/base/__init__.py +5 -2
  166. mirascope/llm/providers/base/_utils.py +2 -7
  167. mirascope/llm/providers/base/base_provider.py +173 -58
  168. mirascope/llm/providers/base/params.py +63 -34
  169. mirascope/llm/providers/google/__init__.py +2 -17
  170. mirascope/llm/providers/google/_utils/__init__.py +2 -0
  171. mirascope/llm/providers/google/_utils/decode.py +17 -8
  172. mirascope/llm/providers/google/_utils/encode.py +105 -16
  173. mirascope/llm/providers/google/_utils/errors.py +49 -0
  174. mirascope/llm/providers/google/model_info.py +1 -0
  175. mirascope/llm/providers/google/provider.py +9 -5
  176. mirascope/llm/providers/mirascope/__init__.py +5 -0
  177. mirascope/llm/providers/mirascope/_utils.py +77 -0
  178. mirascope/llm/providers/mirascope/provider.py +318 -0
  179. mirascope/llm/providers/mlx/__init__.py +2 -17
  180. mirascope/llm/providers/mlx/_utils.py +9 -2
  181. mirascope/llm/providers/mlx/provider.py +8 -0
  182. mirascope/llm/providers/ollama/__init__.py +1 -13
  183. mirascope/llm/providers/openai/__init__.py +10 -1
  184. mirascope/llm/providers/openai/_utils/__init__.py +5 -0
  185. mirascope/llm/providers/openai/_utils/errors.py +46 -0
  186. mirascope/llm/providers/openai/completions/__init__.py +2 -20
  187. mirascope/llm/providers/openai/completions/_utils/decode.py +14 -3
  188. mirascope/llm/providers/openai/completions/_utils/encode.py +15 -12
  189. mirascope/llm/providers/openai/completions/base_provider.py +6 -6
  190. mirascope/llm/providers/openai/provider.py +14 -1
  191. mirascope/llm/providers/openai/responses/__init__.py +1 -17
  192. mirascope/llm/providers/openai/responses/_utils/decode.py +2 -2
  193. mirascope/llm/providers/openai/responses/_utils/encode.py +43 -15
  194. mirascope/llm/providers/openai/responses/provider.py +13 -7
  195. mirascope/llm/providers/provider_id.py +1 -0
  196. mirascope/llm/providers/provider_registry.py +59 -3
  197. mirascope/llm/providers/together/__init__.py +1 -13
  198. mirascope/llm/responses/base_stream_response.py +24 -20
  199. mirascope/llm/tools/decorator.py +8 -4
  200. mirascope/llm/tools/tool_schema.py +33 -6
  201. mirascope/llm/tools/tools.py +84 -16
  202. mirascope/ops/__init__.py +60 -109
  203. mirascope/ops/_internal/closure.py +62 -11
  204. mirascope/ops/_internal/instrumentation/llm/llm.py +1 -2
  205. mirascope/ops/_internal/traced_functions.py +23 -4
  206. mirascope/ops/_internal/versioned_functions.py +54 -43
  207. {mirascope-2.0.0a4.dist-info → mirascope-2.0.0a6.dist-info}/METADATA +7 -7
  208. mirascope-2.0.0a6.dist-info/RECORD +316 -0
  209. mirascope/llm/formatting/_utils.py +0 -78
  210. mirascope/llm/mcp/client.py +0 -118
  211. mirascope/llm/providers/_missing_import_stubs.py +0 -49
  212. mirascope/llm/providers/load_provider.py +0 -54
  213. mirascope-2.0.0a4.dist-info/RECORD +0 -247
  214. {mirascope-2.0.0a4.dist-info → mirascope-2.0.0a6.dist-info}/WHEEL +0 -0
  215. {mirascope-2.0.0a4.dist-info → mirascope-2.0.0a6.dist-info}/licenses/LICENSE +0 -0
@@ -3,21 +3,7 @@
3
3
  # nopycln: file
4
4
  import datetime as dt
5
5
  from collections import defaultdict
6
- from typing import (
7
- Any,
8
- Callable,
9
- ClassVar,
10
- Dict,
11
- List,
12
- Mapping,
13
- Optional,
14
- Set,
15
- Tuple,
16
- Type,
17
- TypeVar,
18
- Union,
19
- cast,
20
- )
6
+ from typing import Any, Callable, ClassVar, Dict, List, Mapping, Optional, Set, Tuple, Type, TypeVar, Union, cast
21
7
 
22
8
  import pydantic
23
9
 
@@ -51,18 +37,14 @@ Model = TypeVar("Model", bound=pydantic.BaseModel)
51
37
 
52
38
 
53
39
  def parse_obj_as(type_: Type[T], object_: Any) -> T:
54
- dealiased_object = convert_and_respect_annotation_metadata(
55
- object_=object_, annotation=type_, direction="read"
56
- )
40
+ dealiased_object = convert_and_respect_annotation_metadata(object_=object_, annotation=type_, direction="read")
57
41
  if IS_PYDANTIC_V2:
58
42
  adapter = pydantic.TypeAdapter(type_) # type: ignore[attr-defined]
59
43
  return adapter.validate_python(dealiased_object)
60
44
  return pydantic.parse_obj_as(type_, dealiased_object)
61
45
 
62
46
 
63
- def to_jsonable_with_fallback(
64
- obj: Any, fallback_serializer: Callable[[Any], Any]
65
- ) -> Any:
47
+ def to_jsonable_with_fallback(obj: Any, fallback_serializer: Callable[[Any], Any]) -> Any:
66
48
  if IS_PYDANTIC_V2:
67
49
  from pydantic_core import to_jsonable_python
68
50
 
@@ -78,14 +60,9 @@ class UniversalBaseModel(pydantic.BaseModel):
78
60
  )
79
61
 
80
62
  @pydantic.model_serializer(mode="wrap", when_used="json") # type: ignore[attr-defined]
81
- def serialize_model(
82
- self, handler: pydantic.SerializerFunctionWrapHandler
83
- ) -> Any: # type: ignore[name-defined]
63
+ def serialize_model(self, handler: pydantic.SerializerFunctionWrapHandler) -> Any: # type: ignore[name-defined]
84
64
  serialized = handler(self)
85
- data = {
86
- k: serialize_datetime(v) if isinstance(v, dt.datetime) else v
87
- for k, v in serialized.items()
88
- }
65
+ data = {k: serialize_datetime(v) if isinstance(v, dt.datetime) else v for k, v in serialized.items()}
89
66
  return data
90
67
 
91
68
  else:
@@ -95,21 +72,13 @@ class UniversalBaseModel(pydantic.BaseModel):
95
72
  json_encoders = {dt.datetime: serialize_datetime}
96
73
 
97
74
  @classmethod
98
- def model_construct(
99
- cls: Type["Model"], _fields_set: Optional[Set[str]] = None, **values: Any
100
- ) -> "Model":
101
- dealiased_object = convert_and_respect_annotation_metadata(
102
- object_=values, annotation=cls, direction="read"
103
- )
75
+ def model_construct(cls: Type["Model"], _fields_set: Optional[Set[str]] = None, **values: Any) -> "Model":
76
+ dealiased_object = convert_and_respect_annotation_metadata(object_=values, annotation=cls, direction="read")
104
77
  return cls.construct(_fields_set, **dealiased_object)
105
78
 
106
79
  @classmethod
107
- def construct(
108
- cls: Type["Model"], _fields_set: Optional[Set[str]] = None, **values: Any
109
- ) -> "Model":
110
- dealiased_object = convert_and_respect_annotation_metadata(
111
- object_=values, annotation=cls, direction="read"
112
- )
80
+ def construct(cls: Type["Model"], _fields_set: Optional[Set[str]] = None, **values: Any) -> "Model":
81
+ dealiased_object = convert_and_respect_annotation_metadata(object_=values, annotation=cls, direction="read")
113
82
  if IS_PYDANTIC_V2:
114
83
  return super().model_construct(_fields_set, **dealiased_object) # type: ignore[misc]
115
84
  return super().construct(_fields_set, **dealiased_object)
@@ -163,9 +132,7 @@ class UniversalBaseModel(pydantic.BaseModel):
163
132
  # If the default values are non-null act like they've been set
164
133
  # This effectively allows exclude_unset to work like exclude_none where
165
134
  # the latter passes through intentionally set none values.
166
- if default is not None or (
167
- "exclude_unset" in kwargs and not kwargs["exclude_unset"]
168
- ):
135
+ if default is not None or ("exclude_unset" in kwargs and not kwargs["exclude_unset"]):
169
136
  _fields_set.add(name)
170
137
 
171
138
  if default is not None:
@@ -178,35 +145,25 @@ class UniversalBaseModel(pydantic.BaseModel):
178
145
  **kwargs,
179
146
  }
180
147
 
181
- dict_dump = super().dict(
182
- **kwargs_with_defaults_exclude_unset_include_fields
183
- )
148
+ dict_dump = super().dict(**kwargs_with_defaults_exclude_unset_include_fields)
184
149
 
185
- return convert_and_respect_annotation_metadata(
186
- object_=dict_dump, annotation=self.__class__, direction="write"
187
- )
150
+ return convert_and_respect_annotation_metadata(object_=dict_dump, annotation=self.__class__, direction="write")
188
151
 
189
152
 
190
- def _union_list_of_pydantic_dicts(
191
- source: List[Any], destination: List[Any]
192
- ) -> List[Any]:
153
+ def _union_list_of_pydantic_dicts(source: List[Any], destination: List[Any]) -> List[Any]:
193
154
  converted_list: List[Any] = []
194
155
  for i, item in enumerate(source):
195
156
  destination_value = destination[i]
196
157
  if isinstance(item, dict):
197
158
  converted_list.append(deep_union_pydantic_dicts(item, destination_value))
198
159
  elif isinstance(item, list):
199
- converted_list.append(
200
- _union_list_of_pydantic_dicts(item, destination_value)
201
- )
160
+ converted_list.append(_union_list_of_pydantic_dicts(item, destination_value))
202
161
  else:
203
162
  converted_list.append(item)
204
163
  return converted_list
205
164
 
206
165
 
207
- def deep_union_pydantic_dicts(
208
- source: Dict[str, Any], destination: Dict[str, Any]
209
- ) -> Dict[str, Any]:
166
+ def deep_union_pydantic_dicts(source: Dict[str, Any], destination: Dict[str, Any]) -> Dict[str, Any]:
210
167
  for key, value in source.items():
211
168
  node = destination.setdefault(key, {})
212
169
  if isinstance(value, dict):
@@ -233,9 +190,7 @@ else:
233
190
 
234
191
 
235
192
  def encode_by_type(o: Any) -> Any:
236
- encoders_by_class_tuples: Dict[Callable[[Any], Any], Tuple[Any, ...]] = defaultdict(
237
- tuple
238
- )
193
+ encoders_by_class_tuples: Dict[Callable[[Any], Any], Tuple[Any, ...]] = defaultdict(tuple)
239
194
  for type_, encoder in encoders_by_type.items():
240
195
  encoders_by_class_tuples[encoder] += (type_,)
241
196
 
@@ -262,26 +217,16 @@ def universal_root_validator(
262
217
  ) -> Callable[[AnyCallable], AnyCallable]:
263
218
  def decorator(func: AnyCallable) -> AnyCallable:
264
219
  if IS_PYDANTIC_V2:
265
- return cast(
266
- AnyCallable,
267
- pydantic.model_validator(mode="before" if pre else "after")(func),
268
- ) # type: ignore[attr-defined]
220
+ return cast(AnyCallable, pydantic.model_validator(mode="before" if pre else "after")(func)) # type: ignore[attr-defined]
269
221
  return cast(AnyCallable, pydantic.root_validator(pre=pre)(func)) # type: ignore[call-overload]
270
222
 
271
223
  return decorator
272
224
 
273
225
 
274
- def universal_field_validator(
275
- field_name: str, pre: bool = False
276
- ) -> Callable[[AnyCallable], AnyCallable]:
226
+ def universal_field_validator(field_name: str, pre: bool = False) -> Callable[[AnyCallable], AnyCallable]:
277
227
  def decorator(func: AnyCallable) -> AnyCallable:
278
228
  if IS_PYDANTIC_V2:
279
- return cast(
280
- AnyCallable,
281
- pydantic.field_validator(field_name, mode="before" if pre else "after")(
282
- func
283
- ),
284
- ) # type: ignore[attr-defined]
229
+ return cast(AnyCallable, pydantic.field_validator(field_name, mode="before" if pre else "after")(func)) # type: ignore[attr-defined]
285
230
  return cast(AnyCallable, pydantic.validator(field_name, pre=pre)(func))
286
231
 
287
232
  return decorator
@@ -6,9 +6,7 @@ import pydantic
6
6
 
7
7
 
8
8
  # Flattens dicts to be of the form {"key[subkey][subkey2]": value} where value is not a dict
9
- def traverse_query_dict(
10
- dict_flat: Dict[str, Any], key_prefix: Optional[str] = None
11
- ) -> List[Tuple[str, Any]]:
9
+ def traverse_query_dict(dict_flat: Dict[str, Any], key_prefix: Optional[str] = None) -> List[Tuple[str, Any]]:
12
10
  result = []
13
11
  for k, v in dict_flat.items():
14
12
  key = f"{key_prefix}[{k}]" if key_prefix is not None else k
@@ -67,9 +67,7 @@ def convert_and_respect_annotation_metadata(
67
67
  ):
68
68
  return _convert_mapping(object_, clean_type, direction)
69
69
  # TypedDicts
70
- if typing_extensions.is_typeddict(clean_type) and isinstance(
71
- object_, typing.Mapping
72
- ):
70
+ if typing_extensions.is_typeddict(clean_type) and isinstance(object_, typing.Mapping):
73
71
  return _convert_mapping(object_, clean_type, direction)
74
72
 
75
73
  if (
@@ -163,9 +161,7 @@ def _convert_mapping(
163
161
  ) -> typing.Mapping[str, object]:
164
162
  converted_object: typing.Dict[str, object] = {}
165
163
  try:
166
- annotations = typing_extensions.get_type_hints(
167
- expected_type, include_extras=True
168
- )
164
+ annotations = typing_extensions.get_type_hints(expected_type, include_extras=True)
169
165
  except NameError:
170
166
  # The TypedDict contains a circular reference, so
171
167
  # we use the __annotations__ attribute directly.
@@ -189,10 +185,8 @@ def _convert_mapping(
189
185
  object_=value, annotation=type_, direction=direction
190
186
  )
191
187
  else:
192
- converted_object[
193
- _alias_key(key, type_, direction, aliases_to_field_names)
194
- ] = convert_and_respect_annotation_metadata(
195
- object_=value, annotation=type_, direction=direction
188
+ converted_object[_alias_key(key, type_, direction, aliases_to_field_names)] = (
189
+ convert_and_respect_annotation_metadata(object_=value, annotation=type_, direction=direction)
196
190
  )
197
191
  return converted_object
198
192
 
@@ -22,9 +22,7 @@ class DocsClient:
22
22
  """
23
23
  return self._raw_client
24
24
 
25
- def openapi(
26
- self, *, request_options: typing.Optional[RequestOptions] = None
27
- ) -> typing.Optional[typing.Any]:
25
+ def openapi(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.Optional[typing.Any]:
28
26
  """
29
27
  Parameters
30
28
  ----------
@@ -62,9 +60,7 @@ class AsyncDocsClient:
62
60
  """
63
61
  return self._raw_client
64
62
 
65
- async def openapi(
66
- self, *, request_options: typing.Optional[RequestOptions] = None
67
- ) -> typing.Optional[typing.Any]:
63
+ async def openapi(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.Optional[typing.Any]:
68
64
  """
69
65
  Parameters
70
66
  ----------
@@ -60,16 +60,8 @@ class RawDocsClient:
60
60
  )
61
61
  _response_json = _response.json()
62
62
  except JSONDecodeError:
63
- raise ApiError(
64
- status_code=_response.status_code,
65
- headers=dict(_response.headers),
66
- body=_response.text,
67
- )
68
- raise ApiError(
69
- status_code=_response.status_code,
70
- headers=dict(_response.headers),
71
- body=_response_json,
72
- )
63
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
64
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
73
65
 
74
66
 
75
67
  class AsyncRawDocsClient:
@@ -120,13 +112,5 @@ class AsyncRawDocsClient:
120
112
  )
121
113
  _response_json = _response.json()
122
114
  except JSONDecodeError:
123
- raise ApiError(
124
- status_code=_response.status_code,
125
- headers=dict(_response.headers),
126
- body=_response.text,
127
- )
128
- raise ApiError(
129
- status_code=_response.status_code,
130
- headers=dict(_response.headers),
131
- body=_response_json,
132
- )
115
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
116
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
@@ -0,0 +1,17 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ # isort: skip_file
4
+
5
+ from .types import (
6
+ EnvironmentsCreateResponse,
7
+ EnvironmentsGetResponse,
8
+ EnvironmentsListResponseItem,
9
+ EnvironmentsUpdateResponse,
10
+ )
11
+
12
+ __all__ = [
13
+ "EnvironmentsCreateResponse",
14
+ "EnvironmentsGetResponse",
15
+ "EnvironmentsListResponseItem",
16
+ "EnvironmentsUpdateResponse",
17
+ ]