vellum-ai 1.1.1__py3-none-any.whl → 1.1.3__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/__init__.py +16 -0
- vellum/client/README.md +55 -0
- vellum/client/__init__.py +66 -507
- vellum/client/core/client_wrapper.py +2 -2
- vellum/client/core/pydantic_utilities.py +10 -3
- vellum/client/raw_client.py +844 -0
- vellum/client/reference.md +692 -19
- vellum/client/resources/ad_hoc/client.py +23 -180
- vellum/client/resources/ad_hoc/raw_client.py +276 -0
- vellum/client/resources/container_images/client.py +10 -36
- vellum/client/resources/deployments/client.py +16 -62
- vellum/client/resources/document_indexes/client.py +16 -72
- vellum/client/resources/documents/client.py +8 -30
- vellum/client/resources/folder_entities/client.py +4 -8
- vellum/client/resources/metric_definitions/client.py +4 -14
- vellum/client/resources/ml_models/client.py +2 -8
- vellum/client/resources/organizations/client.py +2 -6
- vellum/client/resources/prompts/client.py +2 -10
- vellum/client/resources/sandboxes/client.py +4 -20
- vellum/client/resources/test_suite_runs/client.py +4 -18
- vellum/client/resources/test_suites/client.py +11 -86
- vellum/client/resources/test_suites/raw_client.py +136 -0
- vellum/client/resources/workflow_deployments/client.py +20 -78
- vellum/client/resources/workflow_executions/client.py +2 -6
- vellum/client/resources/workflow_sandboxes/client.py +2 -10
- vellum/client/resources/workflows/client.py +7 -6
- vellum/client/resources/workflows/raw_client.py +58 -47
- vellum/client/resources/workspace_secrets/client.py +4 -20
- vellum/client/resources/workspaces/client.py +2 -6
- vellum/client/types/__init__.py +16 -0
- vellum/client/types/array_chat_message_content_item.py +4 -2
- vellum/client/types/array_chat_message_content_item_request.py +4 -2
- vellum/client/types/chat_message_content.py +4 -2
- vellum/client/types/chat_message_content_request.py +4 -2
- vellum/client/types/node_execution_span.py +2 -0
- vellum/client/types/prompt_block.py +4 -2
- vellum/client/types/vellum_value.py +4 -2
- vellum/client/types/vellum_value_request.py +4 -2
- vellum/client/types/vellum_variable_type.py +2 -1
- vellum/client/types/vellum_video.py +24 -0
- vellum/client/types/vellum_video_request.py +24 -0
- vellum/client/types/video_chat_message_content.py +25 -0
- vellum/client/types/video_chat_message_content_request.py +25 -0
- vellum/client/types/video_prompt_block.py +29 -0
- vellum/client/types/video_vellum_value.py +25 -0
- vellum/client/types/video_vellum_value_request.py +25 -0
- vellum/client/types/workflow_execution_span.py +2 -0
- vellum/client/types/workflow_execution_usage_calculation_fulfilled_body.py +22 -0
- vellum/prompts/blocks/compilation.py +22 -10
- vellum/types/vellum_video.py +3 -0
- vellum/types/vellum_video_request.py +3 -0
- vellum/types/video_chat_message_content.py +3 -0
- vellum/types/video_chat_message_content_request.py +3 -0
- vellum/types/video_prompt_block.py +3 -0
- vellum/types/video_vellum_value.py +3 -0
- vellum/types/video_vellum_value_request.py +3 -0
- vellum/types/workflow_execution_usage_calculation_fulfilled_body.py +3 -0
- vellum/workflows/events/workflow.py +11 -0
- vellum/workflows/graph/graph.py +103 -1
- vellum/workflows/graph/tests/test_graph.py +99 -0
- vellum/workflows/nodes/bases/base.py +9 -1
- vellum/workflows/nodes/displayable/bases/utils.py +4 -2
- vellum/workflows/nodes/displayable/tool_calling_node/node.py +19 -18
- vellum/workflows/nodes/displayable/tool_calling_node/tests/test_node.py +17 -7
- vellum/workflows/nodes/displayable/tool_calling_node/tests/test_utils.py +7 -7
- vellum/workflows/nodes/displayable/tool_calling_node/utils.py +47 -80
- vellum/workflows/references/environment_variable.py +10 -0
- vellum/workflows/runner/runner.py +18 -2
- vellum/workflows/state/context.py +101 -12
- vellum/workflows/types/definition.py +11 -1
- vellum/workflows/types/tests/test_definition.py +19 -0
- vellum/workflows/utils/vellum_variables.py +9 -5
- vellum/workflows/workflows/base.py +12 -5
- {vellum_ai-1.1.1.dist-info → vellum_ai-1.1.3.dist-info}/METADATA +1 -1
- {vellum_ai-1.1.1.dist-info → vellum_ai-1.1.3.dist-info}/RECORD +85 -69
- vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +1 -1
- vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py +55 -1
- vellum_ee/workflows/display/nodes/vellum/tests/test_tool_calling_node.py +15 -52
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_mcp_serialization.py +15 -49
- vellum_ee/workflows/display/types.py +14 -1
- vellum_ee/workflows/display/utils/expressions.py +13 -4
- vellum_ee/workflows/display/workflows/base_workflow_display.py +6 -19
- {vellum_ai-1.1.1.dist-info → vellum_ai-1.1.3.dist-info}/LICENSE +0 -0
- {vellum_ai-1.1.1.dist-info → vellum_ai-1.1.3.dist-info}/WHEEL +0 -0
- {vellum_ai-1.1.1.dist-info → vellum_ai-1.1.3.dist-info}/entry_points.txt +0 -0
vellum/client/__init__.py
CHANGED
@@ -5,6 +5,7 @@ from .environment import VellumEnvironment
|
|
5
5
|
from .types.api_version_enum import ApiVersionEnum
|
6
6
|
import os
|
7
7
|
import httpx
|
8
|
+
from .core.api_error import ApiError
|
8
9
|
from .core.client_wrapper import SyncClientWrapper
|
9
10
|
from .raw_client import RawVellum
|
10
11
|
from .resources.ad_hoc.client import AdHocClient
|
@@ -42,15 +43,6 @@ from .types.prompt_deployment_expand_meta_request import PromptDeploymentExpandM
|
|
42
43
|
from .types.raw_prompt_execution_overrides_request import RawPromptExecutionOverridesRequest
|
43
44
|
from .types.execute_prompt_response import ExecutePromptResponse
|
44
45
|
from .types.execute_prompt_event import ExecutePromptEvent
|
45
|
-
from .core.serialization import convert_and_respect_annotation_metadata
|
46
|
-
from .core.pydantic_utilities import parse_obj_as
|
47
|
-
import json
|
48
|
-
from .errors.bad_request_error import BadRequestError
|
49
|
-
from .errors.forbidden_error import ForbiddenError
|
50
|
-
from .errors.not_found_error import NotFoundError
|
51
|
-
from .errors.internal_server_error import InternalServerError
|
52
|
-
from json.decoder import JSONDecodeError
|
53
|
-
from .core.api_error import ApiError
|
54
46
|
from .types.workflow_request_input_request import WorkflowRequestInputRequest
|
55
47
|
from .types.workflow_expand_meta_request import WorkflowExpandMetaRequest
|
56
48
|
from .types.execute_workflow_response import ExecuteWorkflowResponse
|
@@ -476,98 +468,19 @@ class Vellum:
|
|
476
468
|
for chunk in response:
|
477
469
|
yield chunk
|
478
470
|
"""
|
479
|
-
with self._raw_client.
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
"release_tag": release_tag,
|
490
|
-
"external_id": external_id,
|
491
|
-
"expand_meta": convert_and_respect_annotation_metadata(
|
492
|
-
object_=expand_meta,
|
493
|
-
annotation=typing.Optional[PromptDeploymentExpandMetaRequest],
|
494
|
-
direction="write",
|
495
|
-
),
|
496
|
-
"raw_overrides": convert_and_respect_annotation_metadata(
|
497
|
-
object_=raw_overrides,
|
498
|
-
annotation=typing.Optional[RawPromptExecutionOverridesRequest],
|
499
|
-
direction="write",
|
500
|
-
),
|
501
|
-
"expand_raw": expand_raw,
|
502
|
-
"metadata": metadata,
|
503
|
-
},
|
504
|
-
headers={
|
505
|
-
"content-type": "application/json",
|
506
|
-
},
|
471
|
+
with self._raw_client.execute_prompt_stream(
|
472
|
+
inputs=inputs,
|
473
|
+
prompt_deployment_id=prompt_deployment_id,
|
474
|
+
prompt_deployment_name=prompt_deployment_name,
|
475
|
+
release_tag=release_tag,
|
476
|
+
external_id=external_id,
|
477
|
+
expand_meta=expand_meta,
|
478
|
+
raw_overrides=raw_overrides,
|
479
|
+
expand_raw=expand_raw,
|
480
|
+
metadata=metadata,
|
507
481
|
request_options=request_options,
|
508
|
-
|
509
|
-
|
510
|
-
try:
|
511
|
-
if 200 <= _response.status_code < 300:
|
512
|
-
for _text in _response.iter_lines():
|
513
|
-
try:
|
514
|
-
if len(_text) == 0:
|
515
|
-
continue
|
516
|
-
yield typing.cast(
|
517
|
-
ExecutePromptEvent,
|
518
|
-
parse_obj_as(
|
519
|
-
type_=ExecutePromptEvent, # type: ignore
|
520
|
-
object_=json.loads(_text),
|
521
|
-
),
|
522
|
-
)
|
523
|
-
except Exception:
|
524
|
-
pass
|
525
|
-
return
|
526
|
-
_response.read()
|
527
|
-
if _response.status_code == 400:
|
528
|
-
raise BadRequestError(
|
529
|
-
typing.cast(
|
530
|
-
typing.Optional[typing.Any],
|
531
|
-
parse_obj_as(
|
532
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
533
|
-
object_=_response.json(),
|
534
|
-
),
|
535
|
-
)
|
536
|
-
)
|
537
|
-
if _response.status_code == 403:
|
538
|
-
raise ForbiddenError(
|
539
|
-
typing.cast(
|
540
|
-
typing.Optional[typing.Any],
|
541
|
-
parse_obj_as(
|
542
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
543
|
-
object_=_response.json(),
|
544
|
-
),
|
545
|
-
)
|
546
|
-
)
|
547
|
-
if _response.status_code == 404:
|
548
|
-
raise NotFoundError(
|
549
|
-
typing.cast(
|
550
|
-
typing.Optional[typing.Any],
|
551
|
-
parse_obj_as(
|
552
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
553
|
-
object_=_response.json(),
|
554
|
-
),
|
555
|
-
)
|
556
|
-
)
|
557
|
-
if _response.status_code == 500:
|
558
|
-
raise InternalServerError(
|
559
|
-
typing.cast(
|
560
|
-
typing.Optional[typing.Any],
|
561
|
-
parse_obj_as(
|
562
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
563
|
-
object_=_response.json(),
|
564
|
-
),
|
565
|
-
)
|
566
|
-
)
|
567
|
-
_response_json = _response.json()
|
568
|
-
except JSONDecodeError:
|
569
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
570
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
482
|
+
) as r:
|
483
|
+
yield from r.data
|
571
484
|
|
572
485
|
def execute_workflow(
|
573
486
|
self,
|
@@ -721,81 +634,18 @@ class Vellum:
|
|
721
634
|
for chunk in response:
|
722
635
|
yield chunk
|
723
636
|
"""
|
724
|
-
with self._raw_client.
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
object_=expand_meta, annotation=typing.Optional[WorkflowExpandMetaRequest], direction="write"
|
734
|
-
),
|
735
|
-
"workflow_deployment_id": workflow_deployment_id,
|
736
|
-
"workflow_deployment_name": workflow_deployment_name,
|
737
|
-
"release_tag": release_tag,
|
738
|
-
"external_id": external_id,
|
739
|
-
"event_types": event_types,
|
740
|
-
"metadata": metadata,
|
741
|
-
},
|
742
|
-
headers={
|
743
|
-
"content-type": "application/json",
|
744
|
-
},
|
637
|
+
with self._raw_client.execute_workflow_stream(
|
638
|
+
inputs=inputs,
|
639
|
+
expand_meta=expand_meta,
|
640
|
+
workflow_deployment_id=workflow_deployment_id,
|
641
|
+
workflow_deployment_name=workflow_deployment_name,
|
642
|
+
release_tag=release_tag,
|
643
|
+
external_id=external_id,
|
644
|
+
event_types=event_types,
|
645
|
+
metadata=metadata,
|
745
646
|
request_options=request_options,
|
746
|
-
|
747
|
-
|
748
|
-
try:
|
749
|
-
if 200 <= _response.status_code < 300:
|
750
|
-
for _text in _response.iter_lines():
|
751
|
-
try:
|
752
|
-
if len(_text) == 0:
|
753
|
-
continue
|
754
|
-
yield typing.cast(
|
755
|
-
WorkflowStreamEvent,
|
756
|
-
parse_obj_as(
|
757
|
-
type_=WorkflowStreamEvent, # type: ignore
|
758
|
-
object_=json.loads(_text),
|
759
|
-
),
|
760
|
-
)
|
761
|
-
except Exception:
|
762
|
-
pass
|
763
|
-
return
|
764
|
-
_response.read()
|
765
|
-
if _response.status_code == 400:
|
766
|
-
raise BadRequestError(
|
767
|
-
typing.cast(
|
768
|
-
typing.Optional[typing.Any],
|
769
|
-
parse_obj_as(
|
770
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
771
|
-
object_=_response.json(),
|
772
|
-
),
|
773
|
-
)
|
774
|
-
)
|
775
|
-
if _response.status_code == 404:
|
776
|
-
raise NotFoundError(
|
777
|
-
typing.cast(
|
778
|
-
typing.Optional[typing.Any],
|
779
|
-
parse_obj_as(
|
780
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
781
|
-
object_=_response.json(),
|
782
|
-
),
|
783
|
-
)
|
784
|
-
)
|
785
|
-
if _response.status_code == 500:
|
786
|
-
raise InternalServerError(
|
787
|
-
typing.cast(
|
788
|
-
typing.Optional[typing.Any],
|
789
|
-
parse_obj_as(
|
790
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
791
|
-
object_=_response.json(),
|
792
|
-
),
|
793
|
-
)
|
794
|
-
)
|
795
|
-
_response_json = _response.json()
|
796
|
-
except JSONDecodeError:
|
797
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
798
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
647
|
+
) as r:
|
648
|
+
yield from r.data
|
799
649
|
|
800
650
|
def generate(
|
801
651
|
self,
|
@@ -920,87 +770,14 @@ class Vellum:
|
|
920
770
|
for chunk in response:
|
921
771
|
yield chunk
|
922
772
|
"""
|
923
|
-
with self._raw_client.
|
924
|
-
|
925
|
-
|
926
|
-
|
927
|
-
|
928
|
-
"deployment_id": deployment_id,
|
929
|
-
"deployment_name": deployment_name,
|
930
|
-
"requests": convert_and_respect_annotation_metadata(
|
931
|
-
object_=requests, annotation=typing.Sequence[GenerateRequest], direction="write"
|
932
|
-
),
|
933
|
-
"options": convert_and_respect_annotation_metadata(
|
934
|
-
object_=options, annotation=typing.Optional[GenerateOptionsRequest], direction="write"
|
935
|
-
),
|
936
|
-
},
|
937
|
-
headers={
|
938
|
-
"content-type": "application/json",
|
939
|
-
},
|
773
|
+
with self._raw_client.generate_stream(
|
774
|
+
requests=requests,
|
775
|
+
deployment_id=deployment_id,
|
776
|
+
deployment_name=deployment_name,
|
777
|
+
options=options,
|
940
778
|
request_options=request_options,
|
941
|
-
|
942
|
-
|
943
|
-
try:
|
944
|
-
if 200 <= _response.status_code < 300:
|
945
|
-
for _text in _response.iter_lines():
|
946
|
-
try:
|
947
|
-
if len(_text) == 0:
|
948
|
-
continue
|
949
|
-
yield typing.cast(
|
950
|
-
GenerateStreamResponse,
|
951
|
-
parse_obj_as(
|
952
|
-
type_=GenerateStreamResponse, # type: ignore
|
953
|
-
object_=json.loads(_text),
|
954
|
-
),
|
955
|
-
)
|
956
|
-
except Exception:
|
957
|
-
pass
|
958
|
-
return
|
959
|
-
_response.read()
|
960
|
-
if _response.status_code == 400:
|
961
|
-
raise BadRequestError(
|
962
|
-
typing.cast(
|
963
|
-
typing.Optional[typing.Any],
|
964
|
-
parse_obj_as(
|
965
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
966
|
-
object_=_response.json(),
|
967
|
-
),
|
968
|
-
)
|
969
|
-
)
|
970
|
-
if _response.status_code == 403:
|
971
|
-
raise ForbiddenError(
|
972
|
-
typing.cast(
|
973
|
-
typing.Optional[typing.Any],
|
974
|
-
parse_obj_as(
|
975
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
976
|
-
object_=_response.json(),
|
977
|
-
),
|
978
|
-
)
|
979
|
-
)
|
980
|
-
if _response.status_code == 404:
|
981
|
-
raise NotFoundError(
|
982
|
-
typing.cast(
|
983
|
-
typing.Optional[typing.Any],
|
984
|
-
parse_obj_as(
|
985
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
986
|
-
object_=_response.json(),
|
987
|
-
),
|
988
|
-
)
|
989
|
-
)
|
990
|
-
if _response.status_code == 500:
|
991
|
-
raise InternalServerError(
|
992
|
-
typing.cast(
|
993
|
-
typing.Optional[typing.Any],
|
994
|
-
parse_obj_as(
|
995
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
996
|
-
object_=_response.json(),
|
997
|
-
),
|
998
|
-
)
|
999
|
-
)
|
1000
|
-
_response_json = _response.json()
|
1001
|
-
except JSONDecodeError:
|
1002
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
1003
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
779
|
+
) as r:
|
780
|
+
yield from r.data
|
1004
781
|
|
1005
782
|
def search(
|
1006
783
|
self,
|
@@ -1158,10 +935,7 @@ class Vellum:
|
|
1158
935
|
)
|
1159
936
|
"""
|
1160
937
|
response = self._raw_client.submit_workflow_execution_actuals(
|
1161
|
-
actuals=actuals,
|
1162
|
-
execution_id=execution_id,
|
1163
|
-
external_id=external_id,
|
1164
|
-
request_options=request_options,
|
938
|
+
actuals=actuals, execution_id=execution_id, external_id=external_id, request_options=request_options
|
1165
939
|
)
|
1166
940
|
return response.data
|
1167
941
|
|
@@ -1584,98 +1358,20 @@ class AsyncVellum:
|
|
1584
1358
|
|
1585
1359
|
asyncio.run(main())
|
1586
1360
|
"""
|
1587
|
-
async with self._raw_client.
|
1588
|
-
|
1589
|
-
|
1590
|
-
|
1591
|
-
|
1592
|
-
|
1593
|
-
|
1594
|
-
|
1595
|
-
|
1596
|
-
|
1597
|
-
"release_tag": release_tag,
|
1598
|
-
"external_id": external_id,
|
1599
|
-
"expand_meta": convert_and_respect_annotation_metadata(
|
1600
|
-
object_=expand_meta,
|
1601
|
-
annotation=typing.Optional[PromptDeploymentExpandMetaRequest],
|
1602
|
-
direction="write",
|
1603
|
-
),
|
1604
|
-
"raw_overrides": convert_and_respect_annotation_metadata(
|
1605
|
-
object_=raw_overrides,
|
1606
|
-
annotation=typing.Optional[RawPromptExecutionOverridesRequest],
|
1607
|
-
direction="write",
|
1608
|
-
),
|
1609
|
-
"expand_raw": expand_raw,
|
1610
|
-
"metadata": metadata,
|
1611
|
-
},
|
1612
|
-
headers={
|
1613
|
-
"content-type": "application/json",
|
1614
|
-
},
|
1361
|
+
async with self._raw_client.execute_prompt_stream(
|
1362
|
+
inputs=inputs,
|
1363
|
+
prompt_deployment_id=prompt_deployment_id,
|
1364
|
+
prompt_deployment_name=prompt_deployment_name,
|
1365
|
+
release_tag=release_tag,
|
1366
|
+
external_id=external_id,
|
1367
|
+
expand_meta=expand_meta,
|
1368
|
+
raw_overrides=raw_overrides,
|
1369
|
+
expand_raw=expand_raw,
|
1370
|
+
metadata=metadata,
|
1615
1371
|
request_options=request_options,
|
1616
|
-
|
1617
|
-
|
1618
|
-
|
1619
|
-
if 200 <= _response.status_code < 300:
|
1620
|
-
async for _text in _response.aiter_lines():
|
1621
|
-
try:
|
1622
|
-
if len(_text) == 0:
|
1623
|
-
continue
|
1624
|
-
yield typing.cast(
|
1625
|
-
ExecutePromptEvent,
|
1626
|
-
parse_obj_as(
|
1627
|
-
type_=ExecutePromptEvent, # type: ignore
|
1628
|
-
object_=json.loads(_text),
|
1629
|
-
),
|
1630
|
-
)
|
1631
|
-
except Exception:
|
1632
|
-
pass
|
1633
|
-
return
|
1634
|
-
await _response.aread()
|
1635
|
-
if _response.status_code == 400:
|
1636
|
-
raise BadRequestError(
|
1637
|
-
typing.cast(
|
1638
|
-
typing.Optional[typing.Any],
|
1639
|
-
parse_obj_as(
|
1640
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
1641
|
-
object_=_response.json(),
|
1642
|
-
),
|
1643
|
-
)
|
1644
|
-
)
|
1645
|
-
if _response.status_code == 403:
|
1646
|
-
raise ForbiddenError(
|
1647
|
-
typing.cast(
|
1648
|
-
typing.Optional[typing.Any],
|
1649
|
-
parse_obj_as(
|
1650
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
1651
|
-
object_=_response.json(),
|
1652
|
-
),
|
1653
|
-
)
|
1654
|
-
)
|
1655
|
-
if _response.status_code == 404:
|
1656
|
-
raise NotFoundError(
|
1657
|
-
typing.cast(
|
1658
|
-
typing.Optional[typing.Any],
|
1659
|
-
parse_obj_as(
|
1660
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
1661
|
-
object_=_response.json(),
|
1662
|
-
),
|
1663
|
-
)
|
1664
|
-
)
|
1665
|
-
if _response.status_code == 500:
|
1666
|
-
raise InternalServerError(
|
1667
|
-
typing.cast(
|
1668
|
-
typing.Optional[typing.Any],
|
1669
|
-
parse_obj_as(
|
1670
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
1671
|
-
object_=_response.json(),
|
1672
|
-
),
|
1673
|
-
)
|
1674
|
-
)
|
1675
|
-
_response_json = _response.json()
|
1676
|
-
except JSONDecodeError:
|
1677
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
1678
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
1372
|
+
) as r:
|
1373
|
+
async for data in r.data:
|
1374
|
+
yield data
|
1679
1375
|
|
1680
1376
|
async def execute_workflow(
|
1681
1377
|
self,
|
@@ -1845,81 +1541,19 @@ class AsyncVellum:
|
|
1845
1541
|
|
1846
1542
|
asyncio.run(main())
|
1847
1543
|
"""
|
1848
|
-
async with self._raw_client.
|
1849
|
-
|
1850
|
-
|
1851
|
-
|
1852
|
-
|
1853
|
-
|
1854
|
-
|
1855
|
-
|
1856
|
-
|
1857
|
-
object_=expand_meta, annotation=typing.Optional[WorkflowExpandMetaRequest], direction="write"
|
1858
|
-
),
|
1859
|
-
"workflow_deployment_id": workflow_deployment_id,
|
1860
|
-
"workflow_deployment_name": workflow_deployment_name,
|
1861
|
-
"release_tag": release_tag,
|
1862
|
-
"external_id": external_id,
|
1863
|
-
"event_types": event_types,
|
1864
|
-
"metadata": metadata,
|
1865
|
-
},
|
1866
|
-
headers={
|
1867
|
-
"content-type": "application/json",
|
1868
|
-
},
|
1544
|
+
async with self._raw_client.execute_workflow_stream(
|
1545
|
+
inputs=inputs,
|
1546
|
+
expand_meta=expand_meta,
|
1547
|
+
workflow_deployment_id=workflow_deployment_id,
|
1548
|
+
workflow_deployment_name=workflow_deployment_name,
|
1549
|
+
release_tag=release_tag,
|
1550
|
+
external_id=external_id,
|
1551
|
+
event_types=event_types,
|
1552
|
+
metadata=metadata,
|
1869
1553
|
request_options=request_options,
|
1870
|
-
|
1871
|
-
|
1872
|
-
|
1873
|
-
if 200 <= _response.status_code < 300:
|
1874
|
-
async for _text in _response.aiter_lines():
|
1875
|
-
try:
|
1876
|
-
if len(_text) == 0:
|
1877
|
-
continue
|
1878
|
-
yield typing.cast(
|
1879
|
-
WorkflowStreamEvent,
|
1880
|
-
parse_obj_as(
|
1881
|
-
type_=WorkflowStreamEvent, # type: ignore
|
1882
|
-
object_=json.loads(_text),
|
1883
|
-
),
|
1884
|
-
)
|
1885
|
-
except Exception:
|
1886
|
-
pass
|
1887
|
-
return
|
1888
|
-
await _response.aread()
|
1889
|
-
if _response.status_code == 400:
|
1890
|
-
raise BadRequestError(
|
1891
|
-
typing.cast(
|
1892
|
-
typing.Optional[typing.Any],
|
1893
|
-
parse_obj_as(
|
1894
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
1895
|
-
object_=_response.json(),
|
1896
|
-
),
|
1897
|
-
)
|
1898
|
-
)
|
1899
|
-
if _response.status_code == 404:
|
1900
|
-
raise NotFoundError(
|
1901
|
-
typing.cast(
|
1902
|
-
typing.Optional[typing.Any],
|
1903
|
-
parse_obj_as(
|
1904
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
1905
|
-
object_=_response.json(),
|
1906
|
-
),
|
1907
|
-
)
|
1908
|
-
)
|
1909
|
-
if _response.status_code == 500:
|
1910
|
-
raise InternalServerError(
|
1911
|
-
typing.cast(
|
1912
|
-
typing.Optional[typing.Any],
|
1913
|
-
parse_obj_as(
|
1914
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
1915
|
-
object_=_response.json(),
|
1916
|
-
),
|
1917
|
-
)
|
1918
|
-
)
|
1919
|
-
_response_json = _response.json()
|
1920
|
-
except JSONDecodeError:
|
1921
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
1922
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
1554
|
+
) as r:
|
1555
|
+
async for data in r.data:
|
1556
|
+
yield data
|
1923
1557
|
|
1924
1558
|
async def generate(
|
1925
1559
|
self,
|
@@ -2060,87 +1694,15 @@ class AsyncVellum:
|
|
2060
1694
|
|
2061
1695
|
asyncio.run(main())
|
2062
1696
|
"""
|
2063
|
-
async with self._raw_client.
|
2064
|
-
|
2065
|
-
|
2066
|
-
|
2067
|
-
|
2068
|
-
"deployment_id": deployment_id,
|
2069
|
-
"deployment_name": deployment_name,
|
2070
|
-
"requests": convert_and_respect_annotation_metadata(
|
2071
|
-
object_=requests, annotation=typing.Sequence[GenerateRequest], direction="write"
|
2072
|
-
),
|
2073
|
-
"options": convert_and_respect_annotation_metadata(
|
2074
|
-
object_=options, annotation=typing.Optional[GenerateOptionsRequest], direction="write"
|
2075
|
-
),
|
2076
|
-
},
|
2077
|
-
headers={
|
2078
|
-
"content-type": "application/json",
|
2079
|
-
},
|
1697
|
+
async with self._raw_client.generate_stream(
|
1698
|
+
requests=requests,
|
1699
|
+
deployment_id=deployment_id,
|
1700
|
+
deployment_name=deployment_name,
|
1701
|
+
options=options,
|
2080
1702
|
request_options=request_options,
|
2081
|
-
|
2082
|
-
|
2083
|
-
|
2084
|
-
if 200 <= _response.status_code < 300:
|
2085
|
-
async for _text in _response.aiter_lines():
|
2086
|
-
try:
|
2087
|
-
if len(_text) == 0:
|
2088
|
-
continue
|
2089
|
-
yield typing.cast(
|
2090
|
-
GenerateStreamResponse,
|
2091
|
-
parse_obj_as(
|
2092
|
-
type_=GenerateStreamResponse, # type: ignore
|
2093
|
-
object_=json.loads(_text),
|
2094
|
-
),
|
2095
|
-
)
|
2096
|
-
except Exception:
|
2097
|
-
pass
|
2098
|
-
return
|
2099
|
-
await _response.aread()
|
2100
|
-
if _response.status_code == 400:
|
2101
|
-
raise BadRequestError(
|
2102
|
-
typing.cast(
|
2103
|
-
typing.Optional[typing.Any],
|
2104
|
-
parse_obj_as(
|
2105
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
2106
|
-
object_=_response.json(),
|
2107
|
-
),
|
2108
|
-
)
|
2109
|
-
)
|
2110
|
-
if _response.status_code == 403:
|
2111
|
-
raise ForbiddenError(
|
2112
|
-
typing.cast(
|
2113
|
-
typing.Optional[typing.Any],
|
2114
|
-
parse_obj_as(
|
2115
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
2116
|
-
object_=_response.json(),
|
2117
|
-
),
|
2118
|
-
)
|
2119
|
-
)
|
2120
|
-
if _response.status_code == 404:
|
2121
|
-
raise NotFoundError(
|
2122
|
-
typing.cast(
|
2123
|
-
typing.Optional[typing.Any],
|
2124
|
-
parse_obj_as(
|
2125
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
2126
|
-
object_=_response.json(),
|
2127
|
-
),
|
2128
|
-
)
|
2129
|
-
)
|
2130
|
-
if _response.status_code == 500:
|
2131
|
-
raise InternalServerError(
|
2132
|
-
typing.cast(
|
2133
|
-
typing.Optional[typing.Any],
|
2134
|
-
parse_obj_as(
|
2135
|
-
type_=typing.Optional[typing.Any], # type: ignore
|
2136
|
-
object_=_response.json(),
|
2137
|
-
),
|
2138
|
-
)
|
2139
|
-
)
|
2140
|
-
_response_json = _response.json()
|
2141
|
-
except JSONDecodeError:
|
2142
|
-
raise ApiError(status_code=_response.status_code, body=_response.text)
|
2143
|
-
raise ApiError(status_code=_response.status_code, body=_response_json)
|
1703
|
+
) as r:
|
1704
|
+
async for data in r.data:
|
1705
|
+
yield data
|
2144
1706
|
|
2145
1707
|
async def search(
|
2146
1708
|
self,
|
@@ -2325,9 +1887,6 @@ class AsyncVellum:
|
|
2325
1887
|
asyncio.run(main())
|
2326
1888
|
"""
|
2327
1889
|
response = await self._raw_client.submit_workflow_execution_actuals(
|
2328
|
-
actuals=actuals,
|
2329
|
-
execution_id=execution_id,
|
2330
|
-
external_id=external_id,
|
2331
|
-
request_options=request_options,
|
1890
|
+
actuals=actuals, execution_id=execution_id, external_id=external_id, request_options=request_options
|
2332
1891
|
)
|
2333
1892
|
return response.data
|
@@ -25,10 +25,10 @@ class BaseClientWrapper:
|
|
25
25
|
|
26
26
|
def get_headers(self) -> typing.Dict[str, str]:
|
27
27
|
headers: typing.Dict[str, str] = {
|
28
|
-
"User-Agent": "vellum-ai/1.1.
|
28
|
+
"User-Agent": "vellum-ai/1.1.3",
|
29
29
|
"X-Fern-Language": "Python",
|
30
30
|
"X-Fern-SDK-Name": "vellum-ai",
|
31
|
-
"X-Fern-SDK-Version": "1.1.
|
31
|
+
"X-Fern-SDK-Version": "1.1.3",
|
32
32
|
}
|
33
33
|
if self._api_version is not None:
|
34
34
|
headers["X-API-Version"] = self._api_version
|
@@ -55,12 +55,19 @@ else:
|
|
55
55
|
|
56
56
|
T = typing.TypeVar("T")
|
57
57
|
Model = typing.TypeVar("Model", bound=pydantic.BaseModel)
|
58
|
+
type_adapter_cache: typing.Dict[typing.Type, pydantic.TypeAdapter] = {}
|
59
|
+
annotated_types = {"ExecuteApiResponse"}
|
58
60
|
|
59
61
|
|
60
|
-
def parse_obj_as(type_: typing.Type[T], object_: typing.Any) -> T:
|
61
|
-
|
62
|
+
def parse_obj_as(type_: typing.Type[T], object_: typing.Any, convert_metadata: bool = False) -> T:
|
63
|
+
if hasattr(type_, "__name__") and type_.__name__ in annotated_types:
|
64
|
+
dealiased_object = convert_and_respect_annotation_metadata(object_=object_, annotation=type_, direction="read")
|
65
|
+
else:
|
66
|
+
dealiased_object = object_
|
62
67
|
if IS_PYDANTIC_V2:
|
63
|
-
adapter = pydantic.TypeAdapter(type_) # type: ignore # Pydantic v2
|
68
|
+
adapter = pydantic.TypeAdapter(type_) if type_ not in type_adapter_cache else type_adapter_cache[type_] # type: ignore # Pydantic v2
|
69
|
+
if type_ not in type_adapter_cache:
|
70
|
+
type_adapter_cache[type_] = adapter
|
64
71
|
return adapter.validate_python(dealiased_object)
|
65
72
|
else:
|
66
73
|
return pydantic.parse_obj_as(type_, dealiased_object)
|