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.
- mirascope/__init__.py +10 -1
- mirascope/_stubs.py +363 -0
- mirascope/api/__init__.py +8 -0
- mirascope/api/_generated/__init__.py +119 -1
- mirascope/api/_generated/annotations/__init__.py +33 -0
- mirascope/api/_generated/annotations/client.py +474 -0
- mirascope/api/_generated/annotations/raw_client.py +1095 -0
- mirascope/api/_generated/annotations/types/__init__.py +31 -0
- mirascope/api/_generated/annotations/types/annotations_create_request_label.py +5 -0
- mirascope/api/_generated/annotations/types/annotations_create_response.py +35 -0
- mirascope/api/_generated/annotations/types/annotations_create_response_label.py +5 -0
- mirascope/api/_generated/annotations/types/annotations_get_response.py +35 -0
- mirascope/api/_generated/annotations/types/annotations_get_response_label.py +5 -0
- mirascope/api/_generated/annotations/types/annotations_list_request_label.py +5 -0
- mirascope/api/_generated/annotations/types/annotations_list_response.py +21 -0
- mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item.py +35 -0
- mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item_label.py +5 -0
- mirascope/api/_generated/annotations/types/annotations_update_request_label.py +5 -0
- mirascope/api/_generated/annotations/types/annotations_update_response.py +35 -0
- mirascope/api/_generated/annotations/types/annotations_update_response_label.py +5 -0
- mirascope/api/_generated/api_keys/__init__.py +7 -0
- mirascope/api/_generated/api_keys/client.py +429 -0
- mirascope/api/_generated/api_keys/raw_client.py +788 -0
- mirascope/api/_generated/api_keys/types/__init__.py +9 -0
- mirascope/api/_generated/api_keys/types/api_keys_create_response.py +28 -0
- mirascope/api/_generated/api_keys/types/api_keys_get_response.py +27 -0
- mirascope/api/_generated/api_keys/types/api_keys_list_response_item.py +27 -0
- mirascope/api/_generated/client.py +12 -0
- mirascope/api/_generated/core/client_wrapper.py +2 -14
- mirascope/api/_generated/core/datetime_utils.py +1 -3
- mirascope/api/_generated/core/file.py +2 -5
- mirascope/api/_generated/core/http_client.py +36 -112
- mirascope/api/_generated/core/jsonable_encoder.py +1 -3
- mirascope/api/_generated/core/pydantic_utilities.py +19 -74
- mirascope/api/_generated/core/query_encoder.py +1 -3
- mirascope/api/_generated/core/serialization.py +4 -10
- mirascope/api/_generated/docs/client.py +2 -6
- mirascope/api/_generated/docs/raw_client.py +4 -20
- mirascope/api/_generated/environments/__init__.py +17 -0
- mirascope/api/_generated/environments/client.py +500 -0
- mirascope/api/_generated/environments/raw_client.py +999 -0
- mirascope/api/_generated/environments/types/__init__.py +15 -0
- mirascope/api/_generated/environments/types/environments_create_response.py +24 -0
- mirascope/api/_generated/environments/types/environments_get_response.py +24 -0
- mirascope/api/_generated/environments/types/environments_list_response_item.py +24 -0
- mirascope/api/_generated/environments/types/environments_update_response.py +24 -0
- mirascope/api/_generated/errors/__init__.py +2 -0
- mirascope/api/_generated/errors/bad_request_error.py +1 -5
- mirascope/api/_generated/errors/conflict_error.py +1 -5
- mirascope/api/_generated/errors/forbidden_error.py +1 -5
- mirascope/api/_generated/errors/internal_server_error.py +1 -6
- mirascope/api/_generated/errors/not_found_error.py +1 -5
- mirascope/api/_generated/errors/unauthorized_error.py +11 -0
- mirascope/api/_generated/functions/__init__.py +29 -0
- mirascope/api/_generated/functions/client.py +433 -0
- mirascope/api/_generated/functions/raw_client.py +1049 -0
- mirascope/api/_generated/functions/types/__init__.py +29 -0
- mirascope/api/_generated/functions/types/functions_create_request_dependencies_value.py +20 -0
- mirascope/api/_generated/functions/types/functions_create_response.py +37 -0
- mirascope/api/_generated/functions/types/functions_create_response_dependencies_value.py +20 -0
- mirascope/api/_generated/functions/types/functions_find_by_hash_response.py +39 -0
- mirascope/api/_generated/functions/types/functions_find_by_hash_response_dependencies_value.py +20 -0
- mirascope/api/_generated/functions/types/functions_get_response.py +37 -0
- mirascope/api/_generated/functions/types/functions_get_response_dependencies_value.py +20 -0
- mirascope/api/_generated/functions/types/functions_list_response.py +21 -0
- mirascope/api/_generated/functions/types/functions_list_response_functions_item.py +41 -0
- mirascope/api/_generated/functions/types/functions_list_response_functions_item_dependencies_value.py +20 -0
- mirascope/api/_generated/health/client.py +2 -6
- mirascope/api/_generated/health/raw_client.py +5 -23
- mirascope/api/_generated/health/types/health_check_response.py +1 -3
- mirascope/api/_generated/organizations/__init__.py +2 -0
- mirascope/api/_generated/organizations/client.py +94 -27
- mirascope/api/_generated/organizations/raw_client.py +246 -128
- mirascope/api/_generated/organizations/types/__init__.py +2 -0
- mirascope/api/_generated/organizations/types/organizations_create_response.py +5 -3
- mirascope/api/_generated/organizations/types/organizations_create_response_role.py +1 -3
- mirascope/api/_generated/organizations/types/organizations_credits_response.py +19 -0
- mirascope/api/_generated/organizations/types/organizations_get_response.py +5 -3
- mirascope/api/_generated/organizations/types/organizations_get_response_role.py +1 -3
- mirascope/api/_generated/organizations/types/organizations_list_response_item.py +5 -3
- mirascope/api/_generated/organizations/types/organizations_list_response_item_role.py +1 -3
- mirascope/api/_generated/organizations/types/organizations_update_response.py +5 -3
- mirascope/api/_generated/organizations/types/organizations_update_response_role.py +1 -3
- mirascope/api/_generated/projects/__init__.py +2 -12
- mirascope/api/_generated/projects/client.py +38 -68
- mirascope/api/_generated/projects/raw_client.py +92 -163
- mirascope/api/_generated/projects/types/__init__.py +1 -6
- mirascope/api/_generated/projects/types/projects_create_response.py +4 -9
- mirascope/api/_generated/projects/types/projects_get_response.py +4 -9
- mirascope/api/_generated/projects/types/projects_list_response_item.py +4 -9
- mirascope/api/_generated/projects/types/projects_update_response.py +4 -9
- mirascope/api/_generated/reference.md +1862 -70
- mirascope/api/_generated/traces/__init__.py +22 -0
- mirascope/api/_generated/traces/client.py +398 -0
- mirascope/api/_generated/traces/raw_client.py +902 -18
- mirascope/api/_generated/traces/types/__init__.py +32 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item.py +4 -11
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource.py +2 -6
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item.py +1 -3
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value.py +8 -24
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_array_value.py +2 -6
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value.py +3 -9
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value_values_item.py +2 -6
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item.py +3 -9
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope.py +4 -8
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item.py +2 -6
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value.py +8 -24
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_array_value.py +2 -6
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value.py +3 -9
- 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
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item.py +6 -18
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item.py +3 -9
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value.py +8 -24
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_array_value.py +2 -6
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value.py +2 -6
- 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
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_status.py +2 -6
- mirascope/api/_generated/traces/types/traces_create_response.py +2 -5
- mirascope/api/_generated/traces/types/traces_create_response_partial_success.py +3 -9
- mirascope/api/_generated/traces/types/traces_get_analytics_summary_response.py +54 -0
- mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_functions_item.py +24 -0
- mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_models_item.py +22 -0
- mirascope/api/_generated/traces/types/traces_get_trace_detail_response.py +33 -0
- mirascope/api/_generated/traces/types/traces_get_trace_detail_response_spans_item.py +90 -0
- mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item.py +26 -0
- mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item_operator.py +7 -0
- mirascope/api/_generated/traces/types/traces_search_request_sort_by.py +7 -0
- mirascope/api/_generated/traces/types/traces_search_request_sort_order.py +5 -0
- mirascope/api/_generated/traces/types/traces_search_response.py +26 -0
- mirascope/api/_generated/traces/types/traces_search_response_spans_item.py +41 -0
- mirascope/api/_generated/types/__init__.py +18 -0
- mirascope/api/_generated/types/already_exists_error.py +1 -3
- mirascope/api/_generated/types/click_house_error.py +22 -0
- mirascope/api/_generated/types/database_error.py +1 -3
- mirascope/api/_generated/types/http_api_decode_error.py +1 -3
- mirascope/api/_generated/types/internal_server_error_body.py +49 -0
- mirascope/api/_generated/types/issue.py +1 -3
- mirascope/api/_generated/types/issue_tag.py +1 -8
- mirascope/api/_generated/types/not_found_error_body.py +1 -3
- mirascope/api/_generated/types/number_from_string.py +3 -0
- mirascope/api/_generated/types/permission_denied_error.py +1 -3
- mirascope/api/_generated/types/permission_denied_error_tag.py +1 -3
- mirascope/api/_generated/types/property_key_key.py +1 -3
- mirascope/api/_generated/types/stripe_error.py +20 -0
- mirascope/api/_generated/types/unauthorized_error_body.py +21 -0
- mirascope/api/_generated/types/unauthorized_error_tag.py +5 -0
- mirascope/llm/__init__.py +6 -2
- mirascope/llm/content/tool_call.py +6 -0
- mirascope/llm/exceptions.py +28 -0
- mirascope/llm/formatting/__init__.py +2 -2
- mirascope/llm/formatting/format.py +120 -8
- mirascope/llm/formatting/types.py +1 -56
- mirascope/llm/mcp/__init__.py +2 -2
- mirascope/llm/mcp/mcp_client.py +130 -0
- mirascope/llm/providers/__init__.py +26 -5
- mirascope/llm/providers/anthropic/__init__.py +3 -21
- mirascope/llm/providers/anthropic/_utils/__init__.py +2 -0
- mirascope/llm/providers/anthropic/_utils/beta_decode.py +4 -2
- mirascope/llm/providers/anthropic/_utils/beta_encode.py +13 -12
- mirascope/llm/providers/anthropic/_utils/decode.py +4 -2
- mirascope/llm/providers/anthropic/_utils/encode.py +57 -14
- mirascope/llm/providers/anthropic/_utils/errors.py +46 -0
- mirascope/llm/providers/anthropic/beta_provider.py +6 -0
- mirascope/llm/providers/anthropic/provider.py +5 -0
- mirascope/llm/providers/base/__init__.py +5 -2
- mirascope/llm/providers/base/_utils.py +2 -7
- mirascope/llm/providers/base/base_provider.py +173 -58
- mirascope/llm/providers/base/params.py +63 -34
- mirascope/llm/providers/google/__init__.py +2 -17
- mirascope/llm/providers/google/_utils/__init__.py +2 -0
- mirascope/llm/providers/google/_utils/decode.py +17 -8
- mirascope/llm/providers/google/_utils/encode.py +105 -16
- mirascope/llm/providers/google/_utils/errors.py +49 -0
- mirascope/llm/providers/google/model_info.py +1 -0
- mirascope/llm/providers/google/provider.py +9 -5
- mirascope/llm/providers/mirascope/__init__.py +5 -0
- mirascope/llm/providers/mirascope/_utils.py +77 -0
- mirascope/llm/providers/mirascope/provider.py +318 -0
- mirascope/llm/providers/mlx/__init__.py +2 -17
- mirascope/llm/providers/mlx/_utils.py +9 -2
- mirascope/llm/providers/mlx/provider.py +8 -0
- mirascope/llm/providers/ollama/__init__.py +1 -13
- mirascope/llm/providers/openai/__init__.py +10 -1
- mirascope/llm/providers/openai/_utils/__init__.py +5 -0
- mirascope/llm/providers/openai/_utils/errors.py +46 -0
- mirascope/llm/providers/openai/completions/__init__.py +2 -20
- mirascope/llm/providers/openai/completions/_utils/decode.py +14 -3
- mirascope/llm/providers/openai/completions/_utils/encode.py +15 -12
- mirascope/llm/providers/openai/completions/base_provider.py +6 -6
- mirascope/llm/providers/openai/provider.py +14 -1
- mirascope/llm/providers/openai/responses/__init__.py +1 -17
- mirascope/llm/providers/openai/responses/_utils/decode.py +2 -2
- mirascope/llm/providers/openai/responses/_utils/encode.py +43 -15
- mirascope/llm/providers/openai/responses/provider.py +13 -7
- mirascope/llm/providers/provider_id.py +1 -0
- mirascope/llm/providers/provider_registry.py +59 -3
- mirascope/llm/providers/together/__init__.py +1 -13
- mirascope/llm/responses/base_stream_response.py +24 -20
- mirascope/llm/tools/decorator.py +8 -4
- mirascope/llm/tools/tool_schema.py +33 -6
- mirascope/llm/tools/tools.py +84 -16
- mirascope/ops/__init__.py +60 -109
- mirascope/ops/_internal/closure.py +62 -11
- mirascope/ops/_internal/instrumentation/llm/llm.py +1 -2
- mirascope/ops/_internal/traced_functions.py +23 -4
- mirascope/ops/_internal/versioned_functions.py +54 -43
- {mirascope-2.0.0a4.dist-info → mirascope-2.0.0a6.dist-info}/METADATA +7 -7
- mirascope-2.0.0a6.dist-info/RECORD +316 -0
- mirascope/llm/formatting/_utils.py +0 -78
- mirascope/llm/mcp/client.py +0 -118
- mirascope/llm/providers/_missing_import_stubs.py +0 -49
- mirascope/llm/providers/load_provider.py +0 -54
- mirascope-2.0.0a4.dist-info/RECORD +0 -247
- {mirascope-2.0.0a4.dist-info → mirascope-2.0.0a6.dist-info}/WHEEL +0 -0
- {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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
+
]
|