vellum-ai 0.8.13__py3-none-any.whl → 0.8.14__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.
vellum/client.py CHANGED
@@ -19,6 +19,7 @@ from .types.prompt_deployment_expand_meta_request import PromptDeploymentExpandM
19
19
  from .types.raw_prompt_execution_overrides_request import RawPromptExecutionOverridesRequest
20
20
  from .core.request_options import RequestOptions
21
21
  from .types.execute_prompt_response import ExecutePromptResponse
22
+ from .core.serialization import convert_and_respect_annotation_metadata
22
23
  from .core.pydantic_utilities import parse_obj_as
23
24
  from .errors.bad_request_error import BadRequestError
24
25
  from .errors.forbidden_error import ForbiddenError
@@ -197,13 +198,19 @@ class Vellum:
197
198
  base_url=self._client_wrapper.get_environment().predict,
198
199
  method="POST",
199
200
  json={
200
- "inputs": inputs,
201
+ "inputs": convert_and_respect_annotation_metadata(
202
+ object_=inputs, annotation=typing.Sequence[PromptDeploymentInputRequest], direction="write"
203
+ ),
201
204
  "prompt_deployment_id": prompt_deployment_id,
202
205
  "prompt_deployment_name": prompt_deployment_name,
203
206
  "release_tag": release_tag,
204
207
  "external_id": external_id,
205
- "expand_meta": expand_meta,
206
- "raw_overrides": raw_overrides,
208
+ "expand_meta": convert_and_respect_annotation_metadata(
209
+ object_=expand_meta, annotation=PromptDeploymentExpandMetaRequest, direction="write"
210
+ ),
211
+ "raw_overrides": convert_and_respect_annotation_metadata(
212
+ object_=raw_overrides, annotation=RawPromptExecutionOverridesRequest, direction="write"
213
+ ),
207
214
  "expand_raw": expand_raw,
208
215
  "metadata": metadata,
209
216
  },
@@ -366,13 +373,19 @@ class Vellum:
366
373
  base_url=self._client_wrapper.get_environment().predict,
367
374
  method="POST",
368
375
  json={
369
- "inputs": inputs,
376
+ "inputs": convert_and_respect_annotation_metadata(
377
+ object_=inputs, annotation=typing.Sequence[PromptDeploymentInputRequest], direction="write"
378
+ ),
370
379
  "prompt_deployment_id": prompt_deployment_id,
371
380
  "prompt_deployment_name": prompt_deployment_name,
372
381
  "release_tag": release_tag,
373
382
  "external_id": external_id,
374
- "expand_meta": expand_meta,
375
- "raw_overrides": raw_overrides,
383
+ "expand_meta": convert_and_respect_annotation_metadata(
384
+ object_=expand_meta, annotation=PromptDeploymentExpandMetaRequest, direction="write"
385
+ ),
386
+ "raw_overrides": convert_and_respect_annotation_metadata(
387
+ object_=raw_overrides, annotation=RawPromptExecutionOverridesRequest, direction="write"
388
+ ),
376
389
  "expand_raw": expand_raw,
377
390
  "metadata": metadata,
378
391
  },
@@ -508,8 +521,12 @@ class Vellum:
508
521
  base_url=self._client_wrapper.get_environment().predict,
509
522
  method="POST",
510
523
  json={
511
- "inputs": inputs,
512
- "expand_meta": expand_meta,
524
+ "inputs": convert_and_respect_annotation_metadata(
525
+ object_=inputs, annotation=typing.Sequence[WorkflowRequestInputRequest], direction="write"
526
+ ),
527
+ "expand_meta": convert_and_respect_annotation_metadata(
528
+ object_=expand_meta, annotation=WorkflowExpandMetaRequest, direction="write"
529
+ ),
513
530
  "workflow_deployment_id": workflow_deployment_id,
514
531
  "workflow_deployment_name": workflow_deployment_name,
515
532
  "release_tag": release_tag,
@@ -649,8 +666,12 @@ class Vellum:
649
666
  base_url=self._client_wrapper.get_environment().predict,
650
667
  method="POST",
651
668
  json={
652
- "inputs": inputs,
653
- "expand_meta": expand_meta,
669
+ "inputs": convert_and_respect_annotation_metadata(
670
+ object_=inputs, annotation=typing.Sequence[WorkflowRequestInputRequest], direction="write"
671
+ ),
672
+ "expand_meta": convert_and_respect_annotation_metadata(
673
+ object_=expand_meta, annotation=WorkflowExpandMetaRequest, direction="write"
674
+ ),
654
675
  "workflow_deployment_id": workflow_deployment_id,
655
676
  "workflow_deployment_name": workflow_deployment_name,
656
677
  "release_tag": release_tag,
@@ -772,8 +793,12 @@ class Vellum:
772
793
  json={
773
794
  "deployment_id": deployment_id,
774
795
  "deployment_name": deployment_name,
775
- "requests": requests,
776
- "options": options,
796
+ "requests": convert_and_respect_annotation_metadata(
797
+ object_=requests, annotation=typing.Sequence[GenerateRequest], direction="write"
798
+ ),
799
+ "options": convert_and_respect_annotation_metadata(
800
+ object_=options, annotation=GenerateOptionsRequest, direction="write"
801
+ ),
777
802
  },
778
803
  request_options=request_options,
779
804
  omit=OMIT,
@@ -915,8 +940,12 @@ class Vellum:
915
940
  json={
916
941
  "deployment_id": deployment_id,
917
942
  "deployment_name": deployment_name,
918
- "requests": requests,
919
- "options": options,
943
+ "requests": convert_and_respect_annotation_metadata(
944
+ object_=requests, annotation=typing.Sequence[GenerateRequest], direction="write"
945
+ ),
946
+ "options": convert_and_respect_annotation_metadata(
947
+ object_=options, annotation=GenerateOptionsRequest, direction="write"
948
+ ),
920
949
  },
921
950
  request_options=request_options,
922
951
  omit=OMIT,
@@ -1036,7 +1065,9 @@ class Vellum:
1036
1065
  "index_id": index_id,
1037
1066
  "index_name": index_name,
1038
1067
  "query": query,
1039
- "options": options,
1068
+ "options": convert_and_respect_annotation_metadata(
1069
+ object_=options, annotation=SearchRequestOptionsRequest, direction="write"
1070
+ ),
1040
1071
  },
1041
1072
  request_options=request_options,
1042
1073
  omit=OMIT,
@@ -1132,7 +1163,9 @@ class Vellum:
1132
1163
  json={
1133
1164
  "deployment_id": deployment_id,
1134
1165
  "deployment_name": deployment_name,
1135
- "actuals": actuals,
1166
+ "actuals": convert_and_respect_annotation_metadata(
1167
+ object_=actuals, annotation=typing.Sequence[SubmitCompletionActualRequest], direction="write"
1168
+ ),
1136
1169
  },
1137
1170
  request_options=request_options,
1138
1171
  omit=OMIT,
@@ -1222,7 +1255,9 @@ class Vellum:
1222
1255
  base_url=self._client_wrapper.get_environment().predict,
1223
1256
  method="POST",
1224
1257
  json={
1225
- "actuals": actuals,
1258
+ "actuals": convert_and_respect_annotation_metadata(
1259
+ object_=actuals, annotation=typing.Sequence[SubmitWorkflowExecutionActualRequest], direction="write"
1260
+ ),
1226
1261
  "execution_id": execution_id,
1227
1262
  "external_id": external_id,
1228
1263
  },
@@ -1386,13 +1421,19 @@ class AsyncVellum:
1386
1421
  base_url=self._client_wrapper.get_environment().predict,
1387
1422
  method="POST",
1388
1423
  json={
1389
- "inputs": inputs,
1424
+ "inputs": convert_and_respect_annotation_metadata(
1425
+ object_=inputs, annotation=typing.Sequence[PromptDeploymentInputRequest], direction="write"
1426
+ ),
1390
1427
  "prompt_deployment_id": prompt_deployment_id,
1391
1428
  "prompt_deployment_name": prompt_deployment_name,
1392
1429
  "release_tag": release_tag,
1393
1430
  "external_id": external_id,
1394
- "expand_meta": expand_meta,
1395
- "raw_overrides": raw_overrides,
1431
+ "expand_meta": convert_and_respect_annotation_metadata(
1432
+ object_=expand_meta, annotation=PromptDeploymentExpandMetaRequest, direction="write"
1433
+ ),
1434
+ "raw_overrides": convert_and_respect_annotation_metadata(
1435
+ object_=raw_overrides, annotation=RawPromptExecutionOverridesRequest, direction="write"
1436
+ ),
1396
1437
  "expand_raw": expand_raw,
1397
1438
  "metadata": metadata,
1398
1439
  },
@@ -1563,13 +1604,19 @@ class AsyncVellum:
1563
1604
  base_url=self._client_wrapper.get_environment().predict,
1564
1605
  method="POST",
1565
1606
  json={
1566
- "inputs": inputs,
1607
+ "inputs": convert_and_respect_annotation_metadata(
1608
+ object_=inputs, annotation=typing.Sequence[PromptDeploymentInputRequest], direction="write"
1609
+ ),
1567
1610
  "prompt_deployment_id": prompt_deployment_id,
1568
1611
  "prompt_deployment_name": prompt_deployment_name,
1569
1612
  "release_tag": release_tag,
1570
1613
  "external_id": external_id,
1571
- "expand_meta": expand_meta,
1572
- "raw_overrides": raw_overrides,
1614
+ "expand_meta": convert_and_respect_annotation_metadata(
1615
+ object_=expand_meta, annotation=PromptDeploymentExpandMetaRequest, direction="write"
1616
+ ),
1617
+ "raw_overrides": convert_and_respect_annotation_metadata(
1618
+ object_=raw_overrides, annotation=RawPromptExecutionOverridesRequest, direction="write"
1619
+ ),
1573
1620
  "expand_raw": expand_raw,
1574
1621
  "metadata": metadata,
1575
1622
  },
@@ -1713,8 +1760,12 @@ class AsyncVellum:
1713
1760
  base_url=self._client_wrapper.get_environment().predict,
1714
1761
  method="POST",
1715
1762
  json={
1716
- "inputs": inputs,
1717
- "expand_meta": expand_meta,
1763
+ "inputs": convert_and_respect_annotation_metadata(
1764
+ object_=inputs, annotation=typing.Sequence[WorkflowRequestInputRequest], direction="write"
1765
+ ),
1766
+ "expand_meta": convert_and_respect_annotation_metadata(
1767
+ object_=expand_meta, annotation=WorkflowExpandMetaRequest, direction="write"
1768
+ ),
1718
1769
  "workflow_deployment_id": workflow_deployment_id,
1719
1770
  "workflow_deployment_name": workflow_deployment_name,
1720
1771
  "release_tag": release_tag,
@@ -1862,8 +1913,12 @@ class AsyncVellum:
1862
1913
  base_url=self._client_wrapper.get_environment().predict,
1863
1914
  method="POST",
1864
1915
  json={
1865
- "inputs": inputs,
1866
- "expand_meta": expand_meta,
1916
+ "inputs": convert_and_respect_annotation_metadata(
1917
+ object_=inputs, annotation=typing.Sequence[WorkflowRequestInputRequest], direction="write"
1918
+ ),
1919
+ "expand_meta": convert_and_respect_annotation_metadata(
1920
+ object_=expand_meta, annotation=WorkflowExpandMetaRequest, direction="write"
1921
+ ),
1867
1922
  "workflow_deployment_id": workflow_deployment_id,
1868
1923
  "workflow_deployment_name": workflow_deployment_name,
1869
1924
  "release_tag": release_tag,
@@ -1993,8 +2048,12 @@ class AsyncVellum:
1993
2048
  json={
1994
2049
  "deployment_id": deployment_id,
1995
2050
  "deployment_name": deployment_name,
1996
- "requests": requests,
1997
- "options": options,
2051
+ "requests": convert_and_respect_annotation_metadata(
2052
+ object_=requests, annotation=typing.Sequence[GenerateRequest], direction="write"
2053
+ ),
2054
+ "options": convert_and_respect_annotation_metadata(
2055
+ object_=options, annotation=GenerateOptionsRequest, direction="write"
2056
+ ),
1998
2057
  },
1999
2058
  request_options=request_options,
2000
2059
  omit=OMIT,
@@ -2144,8 +2203,12 @@ class AsyncVellum:
2144
2203
  json={
2145
2204
  "deployment_id": deployment_id,
2146
2205
  "deployment_name": deployment_name,
2147
- "requests": requests,
2148
- "options": options,
2206
+ "requests": convert_and_respect_annotation_metadata(
2207
+ object_=requests, annotation=typing.Sequence[GenerateRequest], direction="write"
2208
+ ),
2209
+ "options": convert_and_respect_annotation_metadata(
2210
+ object_=options, annotation=GenerateOptionsRequest, direction="write"
2211
+ ),
2149
2212
  },
2150
2213
  request_options=request_options,
2151
2214
  omit=OMIT,
@@ -2273,7 +2336,9 @@ class AsyncVellum:
2273
2336
  "index_id": index_id,
2274
2337
  "index_name": index_name,
2275
2338
  "query": query,
2276
- "options": options,
2339
+ "options": convert_and_respect_annotation_metadata(
2340
+ object_=options, annotation=SearchRequestOptionsRequest, direction="write"
2341
+ ),
2277
2342
  },
2278
2343
  request_options=request_options,
2279
2344
  omit=OMIT,
@@ -2377,7 +2442,9 @@ class AsyncVellum:
2377
2442
  json={
2378
2443
  "deployment_id": deployment_id,
2379
2444
  "deployment_name": deployment_name,
2380
- "actuals": actuals,
2445
+ "actuals": convert_and_respect_annotation_metadata(
2446
+ object_=actuals, annotation=typing.Sequence[SubmitCompletionActualRequest], direction="write"
2447
+ ),
2381
2448
  },
2382
2449
  request_options=request_options,
2383
2450
  omit=OMIT,
@@ -2475,7 +2542,9 @@ class AsyncVellum:
2475
2542
  base_url=self._client_wrapper.get_environment().predict,
2476
2543
  method="POST",
2477
2544
  json={
2478
- "actuals": actuals,
2545
+ "actuals": convert_and_respect_annotation_metadata(
2546
+ object_=actuals, annotation=typing.Sequence[SubmitWorkflowExecutionActualRequest], direction="write"
2547
+ ),
2479
2548
  "execution_id": execution_id,
2480
2549
  "external_id": external_id,
2481
2550
  },
@@ -17,7 +17,7 @@ class BaseClientWrapper:
17
17
  headers: typing.Dict[str, str] = {
18
18
  "X-Fern-Language": "Python",
19
19
  "X-Fern-SDK-Name": "vellum-ai",
20
- "X-Fern-SDK-Version": "0.8.13",
20
+ "X-Fern-SDK-Version": "0.8.14",
21
21
  }
22
22
  headers["X_API_KEY"] = self.api_key
23
23
  return headers
@@ -224,7 +224,9 @@ class HttpClient:
224
224
  json=json_body,
225
225
  data=data_body,
226
226
  content=content,
227
- files=convert_file_dict_to_httpx_tuples(remove_none_from_dict(files)) if files is not None else None,
227
+ files=convert_file_dict_to_httpx_tuples(remove_none_from_dict(files))
228
+ if (files is not None and files is not omit)
229
+ else None,
228
230
  timeout=timeout,
229
231
  )
230
232
 
@@ -306,7 +308,9 @@ class HttpClient:
306
308
  json=json_body,
307
309
  data=data_body,
308
310
  content=content,
309
- files=convert_file_dict_to_httpx_tuples(remove_none_from_dict(files)) if files is not None else None,
311
+ files=convert_file_dict_to_httpx_tuples(remove_none_from_dict(files))
312
+ if (files is not None and files is not omit)
313
+ else None,
310
314
  timeout=timeout,
311
315
  ) as stream:
312
316
  yield stream
@@ -10,6 +10,7 @@ import typing_extensions
10
10
  import pydantic
11
11
 
12
12
  from .datetime_utils import serialize_datetime
13
+ from .serialization import convert_and_respect_annotation_metadata
13
14
 
14
15
  IS_PYDANTIC_V2 = pydantic.VERSION.startswith("2.")
15
16
 
@@ -56,11 +57,12 @@ Model = typing.TypeVar("Model", bound=pydantic.BaseModel)
56
57
 
57
58
 
58
59
  def parse_obj_as(type_: typing.Type[T], object_: typing.Any) -> T:
60
+ dealiased_object = convert_and_respect_annotation_metadata(object_=object_, annotation=type_, direction="read")
59
61
  if IS_PYDANTIC_V2:
60
62
  adapter = pydantic.TypeAdapter(type_) # type: ignore # Pydantic v2
61
- return adapter.validate_python(object_)
63
+ return adapter.validate_python(dealiased_object)
62
64
  else:
63
- return pydantic.parse_obj_as(type_, object_)
65
+ return pydantic.parse_obj_as(type_, dealiased_object)
64
66
 
65
67
 
66
68
  def to_jsonable_with_fallback(
@@ -75,13 +77,40 @@ def to_jsonable_with_fallback(
75
77
 
76
78
 
77
79
  class UniversalBaseModel(pydantic.BaseModel):
78
- class Config:
79
- populate_by_name = True
80
- smart_union = True
81
- allow_population_by_field_name = True
82
- json_encoders = {dt.datetime: serialize_datetime}
83
- # Allow fields begining with `model_` to be used in the model
84
- protected_namespaces = ()
80
+ if IS_PYDANTIC_V2:
81
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(
82
+ # Allow fields begining with `model_` to be used in the model
83
+ protected_namespaces=(),
84
+ ) # type: ignore # Pydantic v2
85
+
86
+ @pydantic.model_serializer(mode="wrap", when_used="json") # type: ignore # Pydantic v2
87
+ def serialize_model(self, handler: pydantic.SerializerFunctionWrapHandler) -> typing.Any: # type: ignore # Pydantic v2
88
+ serialized = handler(self)
89
+ data = {k: serialize_datetime(v) if isinstance(v, dt.datetime) else v for k, v in serialized.items()}
90
+ return data
91
+
92
+ else:
93
+
94
+ class Config:
95
+ smart_union = True
96
+ json_encoders = {dt.datetime: serialize_datetime}
97
+
98
+ @classmethod
99
+ def model_construct(
100
+ cls: typing.Type["Model"], _fields_set: typing.Optional[typing.Set[str]] = None, **values: typing.Any
101
+ ) -> "Model":
102
+ dealiased_object = convert_and_respect_annotation_metadata(object_=values, annotation=cls, direction="read")
103
+ return cls.construct(_fields_set, **dealiased_object)
104
+
105
+ @classmethod
106
+ def construct(
107
+ cls: typing.Type["Model"], _fields_set: typing.Optional[typing.Set[str]] = None, **values: typing.Any
108
+ ) -> "Model":
109
+ dealiased_object = convert_and_respect_annotation_metadata(object_=values, annotation=cls, direction="read")
110
+ if IS_PYDANTIC_V2:
111
+ return super().model_construct(_fields_set, **dealiased_object) # type: ignore # Pydantic v2
112
+ else:
113
+ return super().construct(_fields_set, **dealiased_object)
85
114
 
86
115
  def json(self, **kwargs: typing.Any) -> str:
87
116
  kwargs_with_defaults: typing.Any = {
@@ -117,7 +146,7 @@ class UniversalBaseModel(pydantic.BaseModel):
117
146
  "exclude_none": True,
118
147
  "exclude_unset": False,
119
148
  }
120
- return deep_union_pydantic_dicts(
149
+ dict_dump = deep_union_pydantic_dicts(
121
150
  super().model_dump(**kwargs_with_defaults_exclude_unset), # type: ignore # Pydantic v2
122
151
  super().model_dump(**kwargs_with_defaults_exclude_none), # type: ignore # Pydantic v2
123
152
  )
@@ -143,7 +172,9 @@ class UniversalBaseModel(pydantic.BaseModel):
143
172
  **kwargs,
144
173
  }
145
174
 
146
- return super().dict(**kwargs_with_defaults_exclude_unset_include_fields)
175
+ dict_dump = super().dict(**kwargs_with_defaults_exclude_unset_include_fields)
176
+
177
+ return convert_and_respect_annotation_metadata(object_=dict_dump, annotation=self.__class__, direction="write")
147
178
 
148
179
 
149
180
  def deep_union_pydantic_dicts(
@@ -71,6 +71,24 @@ def convert_and_respect_annotation_metadata(
71
71
  if typing_extensions.is_typeddict(clean_type) and isinstance(object_, typing.Mapping):
72
72
  return _convert_mapping(object_, clean_type, direction)
73
73
 
74
+ if (
75
+ typing_extensions.get_origin(clean_type) == typing.Dict
76
+ or typing_extensions.get_origin(clean_type) == dict
77
+ or clean_type == typing.Dict
78
+ ) and isinstance(object_, typing.Dict):
79
+ key_type = typing_extensions.get_args(clean_type)[0]
80
+ value_type = typing_extensions.get_args(clean_type)[1]
81
+
82
+ return {
83
+ key: convert_and_respect_annotation_metadata(
84
+ object_=value,
85
+ annotation=annotation,
86
+ inner_type=value_type,
87
+ direction=direction,
88
+ )
89
+ for key, value in object_.items()
90
+ }
91
+
74
92
  # If you're iterating on a string, do not bother to coerce it to a sequence.
75
93
  if not isinstance(object_, str):
76
94
  if (
@@ -9,6 +9,7 @@ from ...types.prompt_block_request import PromptBlockRequest
9
9
  from ...types.ad_hoc_expand_meta_request import AdHocExpandMetaRequest
10
10
  from ...core.request_options import RequestOptions
11
11
  from ...types.ad_hoc_execute_prompt_event import AdHocExecutePromptEvent
12
+ from ...core.serialization import convert_and_respect_annotation_metadata
12
13
  from ...core.pydantic_utilities import parse_obj_as
13
14
  import json
14
15
  from ...errors.bad_request_error import BadRequestError
@@ -133,11 +134,21 @@ class AdHocClient:
133
134
  method="POST",
134
135
  json={
135
136
  "ml_model": ml_model,
136
- "input_values": input_values,
137
- "input_variables": input_variables,
138
- "parameters": parameters,
139
- "blocks": blocks,
140
- "expand_meta": expand_meta,
137
+ "input_values": convert_and_respect_annotation_metadata(
138
+ object_=input_values, annotation=typing.Sequence[PromptRequestInputRequest], direction="write"
139
+ ),
140
+ "input_variables": convert_and_respect_annotation_metadata(
141
+ object_=input_variables, annotation=typing.Sequence[VellumVariableRequest], direction="write"
142
+ ),
143
+ "parameters": convert_and_respect_annotation_metadata(
144
+ object_=parameters, annotation=PromptParametersRequest, direction="write"
145
+ ),
146
+ "blocks": convert_and_respect_annotation_metadata(
147
+ object_=blocks, annotation=typing.Sequence[PromptBlockRequest], direction="write"
148
+ ),
149
+ "expand_meta": convert_and_respect_annotation_metadata(
150
+ object_=expand_meta, annotation=AdHocExpandMetaRequest, direction="write"
151
+ ),
141
152
  },
142
153
  request_options=request_options,
143
154
  omit=OMIT,
@@ -314,11 +325,21 @@ class AsyncAdHocClient:
314
325
  method="POST",
315
326
  json={
316
327
  "ml_model": ml_model,
317
- "input_values": input_values,
318
- "input_variables": input_variables,
319
- "parameters": parameters,
320
- "blocks": blocks,
321
- "expand_meta": expand_meta,
328
+ "input_values": convert_and_respect_annotation_metadata(
329
+ object_=input_values, annotation=typing.Sequence[PromptRequestInputRequest], direction="write"
330
+ ),
331
+ "input_variables": convert_and_respect_annotation_metadata(
332
+ object_=input_variables, annotation=typing.Sequence[VellumVariableRequest], direction="write"
333
+ ),
334
+ "parameters": convert_and_respect_annotation_metadata(
335
+ object_=parameters, annotation=PromptParametersRequest, direction="write"
336
+ ),
337
+ "blocks": convert_and_respect_annotation_metadata(
338
+ object_=blocks, annotation=typing.Sequence[PromptBlockRequest], direction="write"
339
+ ),
340
+ "expand_meta": convert_and_respect_annotation_metadata(
341
+ object_=expand_meta, annotation=AdHocExpandMetaRequest, direction="write"
342
+ ),
322
343
  },
323
344
  request_options=request_options,
324
345
  omit=OMIT,
@@ -14,6 +14,7 @@ from ...types.deployment_release_tag_read import DeploymentReleaseTagRead
14
14
  from ...types.prompt_deployment_input_request import PromptDeploymentInputRequest
15
15
  from ...types.compile_prompt_deployment_expand_meta_request import CompilePromptDeploymentExpandMetaRequest
16
16
  from ...types.deployment_provider_payload_response import DeploymentProviderPayloadResponse
17
+ from ...core.serialization import convert_and_respect_annotation_metadata
17
18
  from ...errors.bad_request_error import BadRequestError
18
19
  from ...errors.forbidden_error import ForbiddenError
19
20
  from ...errors.not_found_error import NotFoundError
@@ -334,9 +335,13 @@ class DeploymentsClient:
334
335
  json={
335
336
  "deployment_id": deployment_id,
336
337
  "deployment_name": deployment_name,
337
- "inputs": inputs,
338
+ "inputs": convert_and_respect_annotation_metadata(
339
+ object_=inputs, annotation=typing.Sequence[PromptDeploymentInputRequest], direction="write"
340
+ ),
338
341
  "release_tag": release_tag,
339
- "expand_meta": expand_meta,
342
+ "expand_meta": convert_and_respect_annotation_metadata(
343
+ object_=expand_meta, annotation=CompilePromptDeploymentExpandMetaRequest, direction="write"
344
+ ),
340
345
  },
341
346
  request_options=request_options,
342
347
  omit=OMIT,
@@ -746,9 +751,13 @@ class AsyncDeploymentsClient:
746
751
  json={
747
752
  "deployment_id": deployment_id,
748
753
  "deployment_name": deployment_name,
749
- "inputs": inputs,
754
+ "inputs": convert_and_respect_annotation_metadata(
755
+ object_=inputs, annotation=typing.Sequence[PromptDeploymentInputRequest], direction="write"
756
+ ),
750
757
  "release_tag": release_tag,
751
- "expand_meta": expand_meta,
758
+ "expand_meta": convert_and_respect_annotation_metadata(
759
+ object_=expand_meta, annotation=CompilePromptDeploymentExpandMetaRequest, direction="write"
760
+ ),
752
761
  },
753
762
  request_options=request_options,
754
763
  omit=OMIT,
@@ -12,6 +12,7 @@ from ...types.document_index_indexing_config_request import DocumentIndexIndexin
12
12
  from ...types.entity_status import EntityStatus
13
13
  from ...types.environment_enum import EnvironmentEnum
14
14
  from ...types.document_index_read import DocumentIndexRead
15
+ from ...core.serialization import convert_and_respect_annotation_metadata
15
16
  from ...core.jsonable_encoder import jsonable_encoder
16
17
  from ...core.client_wrapper import AsyncClientWrapper
17
18
 
@@ -191,7 +192,9 @@ class DocumentIndexesClient:
191
192
  "name": name,
192
193
  "status": status,
193
194
  "environment": environment,
194
- "indexing_config": indexing_config,
195
+ "indexing_config": convert_and_respect_annotation_metadata(
196
+ object_=indexing_config, annotation=DocumentIndexIndexingConfigRequest, direction="write"
197
+ ),
195
198
  "copy_documents_from_index_id": copy_documents_from_index_id,
196
199
  },
197
200
  request_options=request_options,
@@ -740,7 +743,9 @@ class AsyncDocumentIndexesClient:
740
743
  "name": name,
741
744
  "status": status,
742
745
  "environment": environment,
743
- "indexing_config": indexing_config,
746
+ "indexing_config": convert_and_respect_annotation_metadata(
747
+ object_=indexing_config, annotation=DocumentIndexIndexingConfigRequest, direction="write"
748
+ ),
744
749
  "copy_documents_from_index_id": copy_documents_from_index_id,
745
750
  },
746
751
  request_options=request_options,
@@ -261,10 +261,10 @@ class DocumentsClient:
261
261
  *,
262
262
  label: str,
263
263
  contents: core.File,
264
- add_to_index_names: typing.Optional[typing.List[str]] = None,
265
- external_id: typing.Optional[str] = None,
266
- keywords: typing.Optional[typing.List[str]] = None,
267
- metadata: typing.Optional[str] = None,
264
+ add_to_index_names: typing.Optional[typing.List[str]] = OMIT,
265
+ external_id: typing.Optional[str] = OMIT,
266
+ keywords: typing.Optional[typing.List[str]] = OMIT,
267
+ metadata: typing.Optional[str] = OMIT,
268
268
  request_options: typing.Optional[RequestOptions] = None,
269
269
  ) -> UploadDocumentResponse:
270
270
  """
@@ -653,10 +653,10 @@ class AsyncDocumentsClient:
653
653
  *,
654
654
  label: str,
655
655
  contents: core.File,
656
- add_to_index_names: typing.Optional[typing.List[str]] = None,
657
- external_id: typing.Optional[str] = None,
658
- keywords: typing.Optional[typing.List[str]] = None,
659
- metadata: typing.Optional[str] = None,
656
+ add_to_index_names: typing.Optional[typing.List[str]] = OMIT,
657
+ external_id: typing.Optional[str] = OMIT,
658
+ keywords: typing.Optional[typing.List[str]] = OMIT,
659
+ metadata: typing.Optional[str] = OMIT,
660
660
  request_options: typing.Optional[RequestOptions] = None,
661
661
  ) -> UploadDocumentResponse:
662
662
  """
@@ -10,6 +10,7 @@ from json.decoder import JSONDecodeError
10
10
  from ...core.api_error import ApiError
11
11
  from ...types.named_scenario_input_request import NamedScenarioInputRequest
12
12
  from ...types.sandbox_scenario import SandboxScenario
13
+ from ...core.serialization import convert_and_respect_annotation_metadata
13
14
  from ...core.client_wrapper import AsyncClientWrapper
14
15
 
15
16
  # this is used as the default value for optional parameters
@@ -166,7 +167,9 @@ class SandboxesClient:
166
167
  method="POST",
167
168
  json={
168
169
  "label": label,
169
- "inputs": inputs,
170
+ "inputs": convert_and_respect_annotation_metadata(
171
+ object_=inputs, annotation=typing.Sequence[NamedScenarioInputRequest], direction="write"
172
+ ),
170
173
  "scenario_id": scenario_id,
171
174
  },
172
175
  request_options=request_options,
@@ -400,7 +403,9 @@ class AsyncSandboxesClient:
400
403
  method="POST",
401
404
  json={
402
405
  "label": label,
403
- "inputs": inputs,
406
+ "inputs": convert_and_respect_annotation_metadata(
407
+ object_=inputs, annotation=typing.Sequence[NamedScenarioInputRequest], direction="write"
408
+ ),
404
409
  "scenario_id": scenario_id,
405
410
  },
406
411
  request_options=request_options,
@@ -5,6 +5,7 @@ from ...core.client_wrapper import SyncClientWrapper
5
5
  from ...types.test_suite_run_exec_config_request import TestSuiteRunExecConfigRequest
6
6
  from ...core.request_options import RequestOptions
7
7
  from ...types.test_suite_run_read import TestSuiteRunRead
8
+ from ...core.serialization import convert_and_respect_annotation_metadata
8
9
  from ...core.pydantic_utilities import parse_obj_as
9
10
  from json.decoder import JSONDecodeError
10
11
  from ...core.api_error import ApiError
@@ -72,7 +73,9 @@ class TestSuiteRunsClient:
72
73
  method="POST",
73
74
  json={
74
75
  "test_suite_id": test_suite_id,
75
- "exec_config": exec_config,
76
+ "exec_config": convert_and_respect_annotation_metadata(
77
+ object_=exec_config, annotation=TestSuiteRunExecConfigRequest, direction="write"
78
+ ),
76
79
  },
77
80
  request_options=request_options,
78
81
  omit=OMIT,
@@ -276,7 +279,9 @@ class AsyncTestSuiteRunsClient:
276
279
  method="POST",
277
280
  json={
278
281
  "test_suite_id": test_suite_id,
279
- "exec_config": exec_config,
282
+ "exec_config": convert_and_respect_annotation_metadata(
283
+ object_=exec_config, annotation=TestSuiteRunExecConfigRequest, direction="write"
284
+ ),
280
285
  },
281
286
  request_options=request_options,
282
287
  omit=OMIT,
@@ -10,6 +10,7 @@ from json.decoder import JSONDecodeError
10
10
  from ...core.api_error import ApiError
11
11
  from ...types.named_test_case_variable_value_request import NamedTestCaseVariableValueRequest
12
12
  from ...types.test_suite_test_case import TestSuiteTestCase
13
+ from ...core.serialization import convert_and_respect_annotation_metadata
13
14
  from ...types.test_suite_test_case_bulk_operation_request import TestSuiteTestCaseBulkOperationRequest
14
15
  from ...types.test_suite_test_case_bulk_result import TestSuiteTestCaseBulkResult
15
16
  import json
@@ -165,8 +166,16 @@ class TestSuitesClient:
165
166
  "id": id,
166
167
  "external_id": external_id,
167
168
  "label": label,
168
- "input_values": input_values,
169
- "evaluation_values": evaluation_values,
169
+ "input_values": convert_and_respect_annotation_metadata(
170
+ object_=input_values,
171
+ annotation=typing.Sequence[NamedTestCaseVariableValueRequest],
172
+ direction="write",
173
+ ),
174
+ "evaluation_values": convert_and_respect_annotation_metadata(
175
+ object_=evaluation_values,
176
+ annotation=typing.Sequence[NamedTestCaseVariableValueRequest],
177
+ direction="write",
178
+ ),
170
179
  },
171
180
  request_options=request_options,
172
181
  omit=OMIT,
@@ -253,7 +262,9 @@ class TestSuitesClient:
253
262
  f"v1/test-suites/{jsonable_encoder(id)}/test-cases-bulk",
254
263
  base_url=self._client_wrapper.get_environment().default,
255
264
  method="POST",
256
- json=request,
265
+ json=convert_and_respect_annotation_metadata(
266
+ object_=request, annotation=typing.Sequence[TestSuiteTestCaseBulkOperationRequest], direction="write"
267
+ ),
257
268
  request_options=request_options,
258
269
  omit=OMIT,
259
270
  ) as _response:
@@ -489,8 +500,16 @@ class AsyncTestSuitesClient:
489
500
  "id": id,
490
501
  "external_id": external_id,
491
502
  "label": label,
492
- "input_values": input_values,
493
- "evaluation_values": evaluation_values,
503
+ "input_values": convert_and_respect_annotation_metadata(
504
+ object_=input_values,
505
+ annotation=typing.Sequence[NamedTestCaseVariableValueRequest],
506
+ direction="write",
507
+ ),
508
+ "evaluation_values": convert_and_respect_annotation_metadata(
509
+ object_=evaluation_values,
510
+ annotation=typing.Sequence[NamedTestCaseVariableValueRequest],
511
+ direction="write",
512
+ ),
494
513
  },
495
514
  request_options=request_options,
496
515
  omit=OMIT,
@@ -585,7 +604,9 @@ class AsyncTestSuitesClient:
585
604
  f"v1/test-suites/{jsonable_encoder(id)}/test-cases-bulk",
586
605
  base_url=self._client_wrapper.get_environment().default,
587
606
  method="POST",
588
- json=request,
607
+ json=convert_and_respect_annotation_metadata(
608
+ object_=request, annotation=typing.Sequence[TestSuiteTestCaseBulkOperationRequest], direction="write"
609
+ ),
589
610
  request_options=request_options,
590
611
  omit=OMIT,
591
612
  ) as _response:
@@ -2,15 +2,19 @@
2
2
 
3
3
  from ..core.pydantic_utilities import UniversalBaseModel
4
4
  import typing
5
- import pydantic
5
+ import typing_extensions
6
+ from ..core.serialization import FieldMetadata
6
7
  from ..core.pydantic_utilities import IS_PYDANTIC_V2
8
+ import pydantic
7
9
 
8
10
 
9
11
  class ApiNodeResultData(UniversalBaseModel):
10
12
  text_output_id: str
11
13
  text: typing.Optional[str] = None
12
14
  json_output_id: str
13
- json_: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(alias="json", default=None)
15
+ json_: typing_extensions.Annotated[
16
+ typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]], FieldMetadata(alias="json")
17
+ ] = None
14
18
  status_code_output_id: str
15
19
  status_code: int
16
20
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vellum-ai
3
- Version: 0.8.13
3
+ Version: 0.8.14
4
4
  Summary:
5
5
  License: MIT
6
6
  Requires-Python: >=3.8,<4.0
@@ -1,17 +1,17 @@
1
1
  vellum/__init__.py,sha256=ZjILSZ1gKX9YUZjjOzr0wngRMV7aYaCvuCXgoxt7n2o,30148
2
- vellum/client.py,sha256=tsLLtZbwPASP8Cdh1RF19pOuNmZbBKFkUiplU9X190Q,101256
2
+ vellum/client.py,sha256=n9AlNDHYObmRUM5hX_iiFj6eYDzjIca3cdKVGuRjUSA,106566
3
3
  vellum/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
4
4
  vellum/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
5
- vellum/core/client_wrapper.py,sha256=rsTOZjk7z3mQIFC1nDTnTmM5L8SZWvNAx974kSd7ktQ,1898
5
+ vellum/core/client_wrapper.py,sha256=WJP8_-tl96sFBvhJ-8U9ur1H5s7hdz5N1KWJEYSiY9s,1898
6
6
  vellum/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
7
7
  vellum/core/file.py,sha256=X9IbmkZmB2bB_DpmZAO3crWdXagOakAyn6UCOCImCPg,2322
8
- vellum/core/http_client.py,sha256=rZSidd9LazCjduvdBhZ7GDs4iGfn-OAfRGsDXB1z8f4,18882
8
+ vellum/core/http_client.py,sha256=7scAV2vhOSQ3MqAoGBfEGZ5lZ5GOU65KdWdP0u9VR4A,18978
9
9
  vellum/core/jsonable_encoder.py,sha256=qaF1gtgH-kQZb4kJskETwcCsOPUof-NnYVdszHkb-dM,3656
10
- vellum/core/pydantic_utilities.py,sha256=mrrWV91fMWAertBxn2shhHQDm_i2WrbQrqXskVEVKHg,9170
10
+ vellum/core/pydantic_utilities.py,sha256=l7MVQHx5ytOhzpGiMaZC8tmFsZTBSrWMiiIk-rkBLsk,10851
11
11
  vellum/core/query_encoder.py,sha256=ekulqNd0j8TgD7ox-Qbz7liqX8-KP9blvT9DsRCenYM,2144
12
12
  vellum/core/remove_none_from_dict.py,sha256=EU9SGgYidWq7SexuJbNs4-PZ-5Bl3Vppd864mS6vQZw,342
13
13
  vellum/core/request_options.py,sha256=5cCGt5AEGgtP5xifDl4oVQUmSjlIA8FmRItAlJawM18,1417
14
- vellum/core/serialization.py,sha256=5evS9ZBT8F0_GUAfzb6FQvdgw4JKuHFBlEoqZ8Y8-DU,8970
14
+ vellum/core/serialization.py,sha256=D9h_t-RQON3-CHWs1C4ESY9B-Yd5d-l5lnTLb_X896g,9601
15
15
  vellum/environment.py,sha256=vkEIsMFufsklAMQJxa_E9R60LQsbeqKbWqtyXjffZp8,498
16
16
  vellum/errors/__init__.py,sha256=HZB8vVqzDNx0M2uFJ05S5RcGTH95iVDl4v3rQ4xRqSw,343
17
17
  vellum/errors/bad_request_error.py,sha256=_EbO8mWqN9kFZPvIap8qa1lL_EWkRcsZe1HKV9GDWJY,264
@@ -30,25 +30,25 @@ vellum/lib/utils/paginator.py,sha256=yDvgehocYBDclLt5SewZH4hCIyq0yLHdBzkyPCoYPjs
30
30
  vellum/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
31
  vellum/resources/__init__.py,sha256=iaTrngunVag3wUnyP3TlA8lG55RUCYw4qgdlZXzhi2Q,806
32
32
  vellum/resources/ad_hoc/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
33
- vellum/resources/ad_hoc/client.py,sha256=7WwFing-VwbfZJbwBRJCkJ3ypXJ7jMSt4kaCVSTW3gk,14006
33
+ vellum/resources/ad_hoc/client.py,sha256=JVEf85pJJ1u_Vie-kEIvqv1Qx0BPA73DFEpBu7iyKK8,15590
34
34
  vellum/resources/deployments/__init__.py,sha256=AE0TcFwLrLBljM0ZDX-pPw4Kqt-1f5JDpIok2HS80QI,157
35
- vellum/resources/deployments/client.py,sha256=A_x9lFFFNiiwggPcrMfP88vv5F0FuLo39Ek36WEfJpE,28516
35
+ vellum/resources/deployments/client.py,sha256=tF3llT_g6rfzDHpLhlEoz9gJDy8vIdNGKfICMJp3iEw,29236
36
36
  vellum/resources/deployments/types/__init__.py,sha256=IhwnmoXJ0r_QEhh1b2tBcaAm_x3fWMVuIhYmAapp_ZA,183
37
37
  vellum/resources/deployments/types/deployments_list_request_status.py,sha256=CxlQD16KZXme7x31YYCe_3aAgEueutDTeJo5A4Au-aU,174
38
38
  vellum/resources/document_indexes/__init__.py,sha256=YpOl_9IV7xOlH4OmusQxtAJB11kxQfCSMDyT1_UD0oM,165
39
- vellum/resources/document_indexes/client.py,sha256=MoqaMRDP0eLSh1f8YE9P2Wxj4xlObtd3aMJHxTNqQlQ,37140
39
+ vellum/resources/document_indexes/client.py,sha256=1kp5I8DC4UPvjlWsocuaNhgpIQppDfHFkZIMBKBFj9s,37520
40
40
  vellum/resources/document_indexes/types/__init__.py,sha256=IoFqKHN_VBdEhC7VL8_6Jbatrn0e0zuYEJAJUahcUR0,196
41
41
  vellum/resources/document_indexes/types/document_indexes_list_request_status.py,sha256=sfUEB0cvOSmlE2iITqnMVyHv05Zy2fWP4QjCIYqMg0M,178
42
42
  vellum/resources/documents/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
43
- vellum/resources/documents/client.py,sha256=C5hDZw1y_iNlPdSuePK-0hEwve4JIbKcx72kMNAo-Rg,27574
43
+ vellum/resources/documents/client.py,sha256=TRptBN1FG4wyTYOq0TpmkXlQL63Owbvsa539E1VXs6s,27574
44
44
  vellum/resources/folder_entities/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
45
45
  vellum/resources/folder_entities/client.py,sha256=yxkHRAx8frCk-WvgcRD-WzMhA2kxvY_j42S436-j4EQ,4440
46
46
  vellum/resources/sandboxes/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
47
- vellum/resources/sandboxes/client.py,sha256=RDFDge2gkI6Kpo3VhlRISKS8wHDp7MYh83XVN-Eybys,16762
47
+ vellum/resources/sandboxes/client.py,sha256=i-6DHap5k6gFcYS-kWI8ayJFVZxb-GENRft6BJwVam4,17158
48
48
  vellum/resources/test_suite_runs/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
49
- vellum/resources/test_suite_runs/client.py,sha256=laE40piDiurzmO1mwStY0ebsxQpTuETgiCAewtSrNk8,14192
49
+ vellum/resources/test_suite_runs/client.py,sha256=AwSx890RssSN3mSpeFxWdVv-GR30Av5oMEVshh9Sauw,14562
50
50
  vellum/resources/test_suites/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
51
- vellum/resources/test_suites/client.py,sha256=Sy_mXyAwObTwRSPH9gOO8gNZRfx4MlQVV3TxaAdnVx0,23795
51
+ vellum/resources/test_suites/client.py,sha256=waf3-2XIuXnFAumcus0Z1jfat_YMQANBxvDHHbL0sVM,25039
52
52
  vellum/resources/workflow_deployments/__init__.py,sha256=-5BCA0kSmW6WUh4gqLuQtHv4zFdt9lccuDwMU5YvEu4,173
53
53
  vellum/resources/workflow_deployments/client.py,sha256=ezSg3EDA5UszvrT15jx7-RoSO8pXRwAIDlqMCJXkNOY,17393
54
54
  vellum/resources/workflow_deployments/types/__init__.py,sha256=rmS_4dtbgLHGNQJ_pOloygrjl4sNbKZjTEKBxbMyz6E,208
@@ -75,7 +75,7 @@ vellum/types/ad_hoc_rejected_prompt_execution_meta.py,sha256=Yo3TNjemHUfxU9R3EMz
75
75
  vellum/types/ad_hoc_streaming_prompt_execution_meta.py,sha256=OVSyUL81lpkbXdxnQmPD6qPIxrErEDAgDofQ9lGWLXk,741
76
76
  vellum/types/add_openai_api_key_enum.py,sha256=GB7sLK_Ou7-Xn73sKJHUo6Gx3TjyhU7uJvWZAg4UeaI,92
77
77
  vellum/types/api_node_result.py,sha256=3zAbNGNYY6EgJDzqmcIvLqq8wU-WoMEwGT1W1fjto6U,729
78
- vellum/types/api_node_result_data.py,sha256=skjoVCR7LRr4mwdqOUGcgutqY4qWB6t6_xkzVJDXZHQ,803
78
+ vellum/types/api_node_result_data.py,sha256=GqizJBzReiAQSKW4M1LQYA1ndXlsQ57Dr_apO0AMTVE,909
79
79
  vellum/types/array_chat_message_content.py,sha256=353TDzStNXA2dQETvnJrazCr33nlFx7hgvvPV526ECg,780
80
80
  vellum/types/array_chat_message_content_item.py,sha256=XyWDIqVeWoqLzUIvZO_qj_-iwCr6SBcvQJoVxKAjmDs,421
81
81
  vellum/types/array_chat_message_content_item_request.py,sha256=AUFfh6CQfrD4MdwpS3KhGpalaYpEj_hAlF_lePDDdbU,494
@@ -484,7 +484,7 @@ vellum/types/workflow_result_event_output_data_search_results.py,sha256=U34IK7Zv
484
484
  vellum/types/workflow_result_event_output_data_string.py,sha256=tM3kgh6tEhD0dFEb_7UU0-UspeN4pUdINCcCrD64W74,1228
485
485
  vellum/types/workflow_stream_event.py,sha256=Wn3Yzuy9MqWAeo8tEaXDTKDEbJoA8DdYdMVq8EKuhu8,361
486
486
  vellum/version.py,sha256=jq-1PlAYxN9AXuaZqbYk9ak27SgE2lw9Ia5gx1b1gVI,76
487
- vellum_ai-0.8.13.dist-info/LICENSE,sha256=CcaljEIoOBaU-wItPH4PmM_mDCGpyuUY0Er1BGu5Ti8,1073
488
- vellum_ai-0.8.13.dist-info/METADATA,sha256=rqpR6maCbemvdA9jmQ2YPnoTEVKONY7EIwozIZ_yMfg,4395
489
- vellum_ai-0.8.13.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
490
- vellum_ai-0.8.13.dist-info/RECORD,,
487
+ vellum_ai-0.8.14.dist-info/LICENSE,sha256=CcaljEIoOBaU-wItPH4PmM_mDCGpyuUY0Er1BGu5Ti8,1073
488
+ vellum_ai-0.8.14.dist-info/METADATA,sha256=9DFXbn9jQ9rpVPuqKvNEt6yf5AmGEpO1q8DgosmUc1M,4395
489
+ vellum_ai-0.8.14.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
490
+ vellum_ai-0.8.14.dist-info/RECORD,,