vellum-ai 0.8.23__py3-none-any.whl → 0.8.26__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. vellum/__init__.py +34 -0
  2. vellum/client.py +4 -0
  3. vellum/core/client_wrapper.py +1 -1
  4. vellum/lib/test_suites/resources.py +27 -8
  5. vellum/lib/utils/typing.py +10 -0
  6. vellum/lib/utils/uuid.py +10 -0
  7. vellum/resources/__init__.py +4 -0
  8. vellum/resources/ad_hoc/client.py +21 -0
  9. vellum/resources/folder_entities/__init__.py +3 -0
  10. vellum/resources/folder_entities/client.py +200 -3
  11. vellum/resources/folder_entities/types/__init__.py +5 -0
  12. vellum/resources/folder_entities/types/folder_entities_list_request_entity_status.py +5 -0
  13. vellum/resources/workspace_secrets/__init__.py +2 -0
  14. vellum/resources/workspace_secrets/client.py +127 -0
  15. vellum/types/__init__.py +30 -0
  16. vellum/types/api_node_result_data.py +4 -4
  17. vellum/types/folder_entity.py +16 -0
  18. vellum/types/folder_entity_document_index.py +26 -0
  19. vellum/types/folder_entity_document_index_data.py +25 -0
  20. vellum/types/folder_entity_folder.py +26 -0
  21. vellum/types/folder_entity_folder_data.py +24 -0
  22. vellum/types/folder_entity_prompt_sandbox.py +26 -0
  23. vellum/types/folder_entity_prompt_sandbox_data.py +26 -0
  24. vellum/types/folder_entity_test_suite.py +26 -0
  25. vellum/types/folder_entity_test_suite_data.py +25 -0
  26. vellum/types/folder_entity_workflow_sandbox.py +26 -0
  27. vellum/types/folder_entity_workflow_sandbox_data.py +26 -0
  28. vellum/types/paginated_folder_entity_list.py +23 -0
  29. vellum/types/prompt_settings_request.py +19 -0
  30. vellum/types/secret_type_enum.py +5 -0
  31. vellum/types/vellum_error_code_enum.py +4 -1
  32. vellum/types/workspace_secret_read.py +25 -0
  33. {vellum_ai-0.8.23.dist-info → vellum_ai-0.8.26.dist-info}/METADATA +1 -1
  34. {vellum_ai-0.8.23.dist-info → vellum_ai-0.8.26.dist-info}/RECORD +36 -15
  35. {vellum_ai-0.8.23.dist-info → vellum_ai-0.8.26.dist-info}/LICENSE +0 -0
  36. {vellum_ai-0.8.23.dist-info → vellum_ai-0.8.26.dist-info}/WHEEL +0 -0
vellum/__init__.py CHANGED
@@ -99,6 +99,17 @@ from .types import (
99
99
  ExternalTestCaseExecution,
100
100
  ExternalTestCaseExecutionRequest,
101
101
  FinishReasonEnum,
102
+ FolderEntity,
103
+ FolderEntityDocumentIndex,
104
+ FolderEntityDocumentIndexData,
105
+ FolderEntityFolder,
106
+ FolderEntityFolderData,
107
+ FolderEntityPromptSandbox,
108
+ FolderEntityPromptSandboxData,
109
+ FolderEntityTestSuite,
110
+ FolderEntityTestSuiteData,
111
+ FolderEntityWorkflowSandbox,
112
+ FolderEntityWorkflowSandboxData,
102
113
  FulfilledAdHocExecutePromptEvent,
103
114
  FulfilledEnum,
104
115
  FulfilledExecutePromptEvent,
@@ -225,6 +236,7 @@ from .types import (
225
236
  OpenAiVectorizerTextEmbeddingAda002,
226
237
  OpenAiVectorizerTextEmbeddingAda002Request,
227
238
  PaginatedDocumentIndexReadList,
239
+ PaginatedFolderEntityList,
228
240
  PaginatedSlimDeploymentReadList,
229
241
  PaginatedSlimDocumentList,
230
242
  PaginatedSlimWorkflowDeploymentList,
@@ -250,6 +262,7 @@ from .types import (
250
262
  PromptRequestInputRequest,
251
263
  PromptRequestJsonInputRequest,
252
264
  PromptRequestStringInputRequest,
265
+ PromptSettingsRequest,
253
266
  RawPromptExecutionOverridesRequest,
254
267
  ReductoChunkerConfig,
255
268
  ReductoChunkerConfigRequest,
@@ -287,6 +300,7 @@ from .types import (
287
300
  SearchResultsVellumValue,
288
301
  SearchResultsVellumValueRequest,
289
302
  SearchWeightsRequest,
303
+ SecretTypeEnum,
290
304
  SentenceChunkerConfig,
291
305
  SentenceChunkerConfigRequest,
292
306
  SentenceChunking,
@@ -452,11 +466,13 @@ from .types import (
452
466
  WorkflowResultEventOutputDataSearchResults,
453
467
  WorkflowResultEventOutputDataString,
454
468
  WorkflowStreamEvent,
469
+ WorkspaceSecretRead,
455
470
  )
456
471
  from .errors import BadRequestError, ForbiddenError, InternalServerError, NotFoundError
457
472
  from .resources import (
458
473
  DeploymentsListRequestStatus,
459
474
  DocumentIndexesListRequestStatus,
475
+ FolderEntitiesListRequestEntityStatus,
460
476
  WorkflowDeploymentsListRequestStatus,
461
477
  ad_hoc,
462
478
  deployments,
@@ -469,6 +485,7 @@ from .resources import (
469
485
  test_suites,
470
486
  workflow_deployments,
471
487
  workflow_sandboxes,
488
+ workspace_secrets,
472
489
  )
473
490
  from .client import AsyncVellum, Vellum
474
491
  from .environment import VellumEnvironment
@@ -577,6 +594,18 @@ __all__ = [
577
594
  "ExternalTestCaseExecution",
578
595
  "ExternalTestCaseExecutionRequest",
579
596
  "FinishReasonEnum",
597
+ "FolderEntitiesListRequestEntityStatus",
598
+ "FolderEntity",
599
+ "FolderEntityDocumentIndex",
600
+ "FolderEntityDocumentIndexData",
601
+ "FolderEntityFolder",
602
+ "FolderEntityFolderData",
603
+ "FolderEntityPromptSandbox",
604
+ "FolderEntityPromptSandboxData",
605
+ "FolderEntityTestSuite",
606
+ "FolderEntityTestSuiteData",
607
+ "FolderEntityWorkflowSandbox",
608
+ "FolderEntityWorkflowSandboxData",
580
609
  "ForbiddenError",
581
610
  "FulfilledAdHocExecutePromptEvent",
582
611
  "FulfilledEnum",
@@ -706,6 +735,7 @@ __all__ = [
706
735
  "OpenAiVectorizerTextEmbeddingAda002",
707
736
  "OpenAiVectorizerTextEmbeddingAda002Request",
708
737
  "PaginatedDocumentIndexReadList",
738
+ "PaginatedFolderEntityList",
709
739
  "PaginatedSlimDeploymentReadList",
710
740
  "PaginatedSlimDocumentList",
711
741
  "PaginatedSlimWorkflowDeploymentList",
@@ -731,6 +761,7 @@ __all__ = [
731
761
  "PromptRequestInputRequest",
732
762
  "PromptRequestJsonInputRequest",
733
763
  "PromptRequestStringInputRequest",
764
+ "PromptSettingsRequest",
734
765
  "RawPromptExecutionOverridesRequest",
735
766
  "ReductoChunkerConfig",
736
767
  "ReductoChunkerConfigRequest",
@@ -768,6 +799,7 @@ __all__ = [
768
799
  "SearchResultsVellumValue",
769
800
  "SearchResultsVellumValueRequest",
770
801
  "SearchWeightsRequest",
802
+ "SecretTypeEnum",
771
803
  "SentenceChunkerConfig",
772
804
  "SentenceChunkerConfigRequest",
773
805
  "SentenceChunking",
@@ -936,6 +968,7 @@ __all__ = [
936
968
  "WorkflowResultEventOutputDataSearchResults",
937
969
  "WorkflowResultEventOutputDataString",
938
970
  "WorkflowStreamEvent",
971
+ "WorkspaceSecretRead",
939
972
  "__version__",
940
973
  "ad_hoc",
941
974
  "deployments",
@@ -948,4 +981,5 @@ __all__ = [
948
981
  "test_suites",
949
982
  "workflow_deployments",
950
983
  "workflow_sandboxes",
984
+ "workspace_secrets",
951
985
  ]
vellum/client.py CHANGED
@@ -15,6 +15,7 @@ from .resources.test_suite_runs.client import TestSuiteRunsClient
15
15
  from .resources.test_suites.client import TestSuitesClient
16
16
  from .resources.workflow_deployments.client import WorkflowDeploymentsClient
17
17
  from .resources.workflow_sandboxes.client import WorkflowSandboxesClient
18
+ from .resources.workspace_secrets.client import WorkspaceSecretsClient
18
19
  from .types.code_execution_runtime import CodeExecutionRuntime
19
20
  from .types.code_executor_input_request import CodeExecutorInputRequest
20
21
  from .types.code_execution_package_request import CodeExecutionPackageRequest
@@ -60,6 +61,7 @@ from .resources.test_suite_runs.client import AsyncTestSuiteRunsClient
60
61
  from .resources.test_suites.client import AsyncTestSuitesClient
61
62
  from .resources.workflow_deployments.client import AsyncWorkflowDeploymentsClient
62
63
  from .resources.workflow_sandboxes.client import AsyncWorkflowSandboxesClient
64
+ from .resources.workspace_secrets.client import AsyncWorkspaceSecretsClient
63
65
 
64
66
  # this is used as the default value for optional parameters
65
67
  OMIT = typing.cast(typing.Any, ...)
@@ -130,6 +132,7 @@ class Vellum:
130
132
  self.test_suites = TestSuitesClient(client_wrapper=self._client_wrapper)
131
133
  self.workflow_deployments = WorkflowDeploymentsClient(client_wrapper=self._client_wrapper)
132
134
  self.workflow_sandboxes = WorkflowSandboxesClient(client_wrapper=self._client_wrapper)
135
+ self.workspace_secrets = WorkspaceSecretsClient(client_wrapper=self._client_wrapper)
133
136
 
134
137
  def execute_code(
135
138
  self,
@@ -1446,6 +1449,7 @@ class AsyncVellum:
1446
1449
  self.test_suites = AsyncTestSuitesClient(client_wrapper=self._client_wrapper)
1447
1450
  self.workflow_deployments = AsyncWorkflowDeploymentsClient(client_wrapper=self._client_wrapper)
1448
1451
  self.workflow_sandboxes = AsyncWorkflowSandboxesClient(client_wrapper=self._client_wrapper)
1452
+ self.workspace_secrets = AsyncWorkspaceSecretsClient(client_wrapper=self._client_wrapper)
1449
1453
 
1450
1454
  async def execute_code(
1451
1455
  self,
@@ -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.23",
20
+ "X-Fern-SDK-Version": "0.8.26",
21
21
  }
22
22
  headers["X_API_KEY"] = self.api_key
23
23
  return headers
@@ -4,9 +4,10 @@ import logging
4
4
  import time
5
5
  from functools import cached_property
6
6
  from typing import Callable, Generator, List, cast, Iterable
7
+ from uuid import UUID
7
8
 
8
9
  from vellum import TestSuiteRunRead, TestSuiteRunMetricNumberOutput
9
- from vellum.client import Vellum
10
+ from vellum.client import Vellum, OMIT
10
11
  from vellum.lib.test_suites.constants import (
11
12
  DEFAULT_MAX_POLLING_DURATION_MS,
12
13
  DEFAULT_POLLING_INTERVAL_MS,
@@ -14,6 +15,8 @@ from vellum.lib.test_suites.constants import (
14
15
  from vellum.lib.test_suites.exceptions import TestSuiteRunResultsException
15
16
  from vellum.lib.utils.env import get_api_key
16
17
  from vellum.lib.utils.paginator import PaginatedResults, get_all_results
18
+ from vellum.lib.utils.typing import cast_not_optional
19
+ from vellum.lib.utils.uuid import is_valid_uuid
17
20
  from vellum.types import (
18
21
  ExternalTestCaseExecutionRequest,
19
22
  NamedTestCaseVariableValueRequest,
@@ -198,7 +201,9 @@ class VellumTestSuiteRunResults:
198
201
  output_values = self.get_numeric_metric_output_values(
199
202
  metric_identifier=metric_identifier, output_identifier=output_identifier
200
203
  )
201
- return sum(cast(Iterable[float], filter(lambda o: isinstance(o, float), output_values))) / len(output_values)
204
+ return sum(
205
+ cast(Iterable[float], filter(lambda o: isinstance(o, float), output_values))
206
+ ) / len(output_values)
202
207
 
203
208
  def get_min_metric_output(
204
209
  self, metric_identifier: str | None = None, output_identifier: str | None = None
@@ -207,7 +212,9 @@ class VellumTestSuiteRunResults:
207
212
  output_values = self.get_numeric_metric_output_values(
208
213
  metric_identifier=metric_identifier, output_identifier=output_identifier
209
214
  )
210
- return min(cast(Iterable[float], filter(lambda o: isinstance(o, float), output_values)))
215
+ return min(
216
+ cast(Iterable[float], filter(lambda o: isinstance(o, float), output_values))
217
+ )
211
218
 
212
219
  def get_max_metric_output(
213
220
  self, metric_identifier: str | None = None, output_identifier: str | None = None
@@ -216,7 +223,9 @@ class VellumTestSuiteRunResults:
216
223
  output_values = self.get_numeric_metric_output_values(
217
224
  metric_identifier=metric_identifier, output_identifier=output_identifier
218
225
  )
219
- return max(cast(Iterable[float], filter(lambda o: isinstance(o, float), output_values)))
226
+ return max(
227
+ cast(Iterable[float], filter(lambda o: isinstance(o, float), output_values))
228
+ )
220
229
 
221
230
  def wait_until_complete(self) -> None:
222
231
  """Wait until the Test Suite Run is no longer in a QUEUED or RUNNING state."""
@@ -282,16 +291,25 @@ class VellumTestSuiteRunResults:
282
291
  class VellumTestSuite:
283
292
  """A utility class that provides methods for running a Vellum Test Suite and interacting with its results."""
284
293
 
294
+ _test_suite_id: str | None
295
+ _test_suite_name: str | None
296
+
285
297
  def __init__(
286
298
  self,
287
- test_suite_id: str,
299
+ test_suite_identifier: str | UUID,
288
300
  *,
289
301
  client: Vellum | None = None,
290
302
  ) -> None:
291
303
  self.client = client or Vellum(
292
304
  api_key=get_api_key(),
293
305
  )
294
- self._test_suite_id = test_suite_id
306
+
307
+ if is_valid_uuid(test_suite_identifier):
308
+ self._test_suite_id = str(test_suite_identifier)
309
+ self._test_suite_name = None
310
+ else:
311
+ self._test_suite_id = None
312
+ self._test_suite_name = str(test_suite_identifier)
295
313
 
296
314
  def run_external(
297
315
  self,
@@ -305,7 +323,7 @@ class VellumTestSuite:
305
323
  Returns a wrapper that polls the generated Test Suite Run until it's done running and returns its results.
306
324
  """
307
325
  test_cases = self.client.test_suites.list_test_suite_test_cases(
308
- id=self._test_suite_id
326
+ id=cast_not_optional(self._test_suite_id or self._test_suite_name)
309
327
  )
310
328
  executions: List[ExternalTestCaseExecutionRequest] = []
311
329
 
@@ -320,7 +338,8 @@ class VellumTestSuite:
320
338
  )
321
339
 
322
340
  test_suite_run = self.client.test_suite_runs.create(
323
- test_suite_id=self._test_suite_id,
341
+ test_suite_id=self._test_suite_id or OMIT,
342
+ test_suite_name=self._test_suite_name or OMIT,
324
343
  exec_config=TestSuiteRunExternalExecConfigRequest(
325
344
  type="EXTERNAL",
326
345
  data=TestSuiteRunExternalExecConfigDataRequest(
@@ -0,0 +1,10 @@
1
+ from typing import TypeVar, Optional
2
+
3
+ _T = TypeVar("_T")
4
+
5
+
6
+ def cast_not_optional(optional: Optional[_T]) -> _T:
7
+ """Convert an optional to its value for type checking purposes. Raises an AssertionError if passed None."""
8
+ if optional is None:
9
+ raise AssertionError("Not optional check failed")
10
+ return optional
@@ -0,0 +1,10 @@
1
+ from typing import Union
2
+ import uuid
3
+
4
+
5
+ def is_valid_uuid(val: Union[str, uuid.UUID, None]) -> bool:
6
+ try:
7
+ uuid.UUID(str(val))
8
+ return True
9
+ except (ValueError, TypeError):
10
+ return False
@@ -12,14 +12,17 @@ from . import (
12
12
  test_suites,
13
13
  workflow_deployments,
14
14
  workflow_sandboxes,
15
+ workspace_secrets,
15
16
  )
16
17
  from .deployments import DeploymentsListRequestStatus
17
18
  from .document_indexes import DocumentIndexesListRequestStatus
19
+ from .folder_entities import FolderEntitiesListRequestEntityStatus
18
20
  from .workflow_deployments import WorkflowDeploymentsListRequestStatus
19
21
 
20
22
  __all__ = [
21
23
  "DeploymentsListRequestStatus",
22
24
  "DocumentIndexesListRequestStatus",
25
+ "FolderEntitiesListRequestEntityStatus",
23
26
  "WorkflowDeploymentsListRequestStatus",
24
27
  "ad_hoc",
25
28
  "deployments",
@@ -32,4 +35,5 @@ __all__ = [
32
35
  "test_suites",
33
36
  "workflow_deployments",
34
37
  "workflow_sandboxes",
38
+ "workspace_secrets",
35
39
  ]
@@ -6,6 +6,7 @@ from ...types.prompt_request_input_request import PromptRequestInputRequest
6
6
  from ...types.vellum_variable_request import VellumVariableRequest
7
7
  from ...types.prompt_parameters_request import PromptParametersRequest
8
8
  from ...types.prompt_block_request import PromptBlockRequest
9
+ from ...types.prompt_settings_request import PromptSettingsRequest
9
10
  from ...types.ad_hoc_expand_meta_request import AdHocExpandMetaRequest
10
11
  from ...core.request_options import RequestOptions
11
12
  from ...types.ad_hoc_execute_prompt_event import AdHocExecutePromptEvent
@@ -35,6 +36,7 @@ class AdHocClient:
35
36
  input_variables: typing.Sequence[VellumVariableRequest],
36
37
  parameters: PromptParametersRequest,
37
38
  blocks: typing.Sequence[PromptBlockRequest],
39
+ settings: typing.Optional[PromptSettingsRequest] = OMIT,
38
40
  expand_meta: typing.Optional[AdHocExpandMetaRequest] = OMIT,
39
41
  request_options: typing.Optional[RequestOptions] = None,
40
42
  ) -> typing.Iterator[AdHocExecutePromptEvent]:
@@ -53,6 +55,8 @@ class AdHocClient:
53
55
 
54
56
  blocks : typing.Sequence[PromptBlockRequest]
55
57
 
58
+ settings : typing.Optional[PromptSettingsRequest]
59
+
56
60
  expand_meta : typing.Optional[AdHocExpandMetaRequest]
57
61
 
58
62
  request_options : typing.Optional[RequestOptions]
@@ -72,6 +76,7 @@ class AdHocClient:
72
76
  JinjaPromptBlockRequest,
73
77
  PromptParametersRequest,
74
78
  PromptRequestStringInputRequest,
79
+ PromptSettingsRequest,
75
80
  StringVellumValueRequest,
76
81
  Vellum,
77
82
  VellumVariableExtensionsRequest,
@@ -114,6 +119,9 @@ class AdHocClient:
114
119
  logit_bias={"string": {"key": "value"}},
115
120
  custom_parameters={"string": {"key": "value"}},
116
121
  ),
122
+ settings=PromptSettingsRequest(
123
+ timeout=1.1,
124
+ ),
117
125
  blocks=[
118
126
  JinjaPromptBlockRequest(
119
127
  properties=JinjaPromptBlockPropertiesRequest(
@@ -152,6 +160,9 @@ class AdHocClient:
152
160
  "parameters": convert_and_respect_annotation_metadata(
153
161
  object_=parameters, annotation=PromptParametersRequest, direction="write"
154
162
  ),
163
+ "settings": convert_and_respect_annotation_metadata(
164
+ object_=settings, annotation=PromptSettingsRequest, direction="write"
165
+ ),
155
166
  "blocks": convert_and_respect_annotation_metadata(
156
167
  object_=blocks, annotation=typing.Sequence[PromptBlockRequest], direction="write"
157
168
  ),
@@ -227,6 +238,7 @@ class AsyncAdHocClient:
227
238
  input_variables: typing.Sequence[VellumVariableRequest],
228
239
  parameters: PromptParametersRequest,
229
240
  blocks: typing.Sequence[PromptBlockRequest],
241
+ settings: typing.Optional[PromptSettingsRequest] = OMIT,
230
242
  expand_meta: typing.Optional[AdHocExpandMetaRequest] = OMIT,
231
243
  request_options: typing.Optional[RequestOptions] = None,
232
244
  ) -> typing.AsyncIterator[AdHocExecutePromptEvent]:
@@ -245,6 +257,8 @@ class AsyncAdHocClient:
245
257
 
246
258
  blocks : typing.Sequence[PromptBlockRequest]
247
259
 
260
+ settings : typing.Optional[PromptSettingsRequest]
261
+
248
262
  expand_meta : typing.Optional[AdHocExpandMetaRequest]
249
263
 
250
264
  request_options : typing.Optional[RequestOptions]
@@ -267,6 +281,7 @@ class AsyncAdHocClient:
267
281
  JinjaPromptBlockRequest,
268
282
  PromptParametersRequest,
269
283
  PromptRequestStringInputRequest,
284
+ PromptSettingsRequest,
270
285
  StringVellumValueRequest,
271
286
  VellumVariableExtensionsRequest,
272
287
  VellumVariableRequest,
@@ -311,6 +326,9 @@ class AsyncAdHocClient:
311
326
  logit_bias={"string": {"key": "value"}},
312
327
  custom_parameters={"string": {"key": "value"}},
313
328
  ),
329
+ settings=PromptSettingsRequest(
330
+ timeout=1.1,
331
+ ),
314
332
  blocks=[
315
333
  JinjaPromptBlockRequest(
316
334
  properties=JinjaPromptBlockPropertiesRequest(
@@ -352,6 +370,9 @@ class AsyncAdHocClient:
352
370
  "parameters": convert_and_respect_annotation_metadata(
353
371
  object_=parameters, annotation=PromptParametersRequest, direction="write"
354
372
  ),
373
+ "settings": convert_and_respect_annotation_metadata(
374
+ object_=settings, annotation=PromptSettingsRequest, direction="write"
375
+ ),
355
376
  "blocks": convert_and_respect_annotation_metadata(
356
377
  object_=blocks, annotation=typing.Sequence[PromptBlockRequest], direction="write"
357
378
  ),
@@ -1,2 +1,5 @@
1
1
  # This file was auto-generated by Fern from our API Definition.
2
2
 
3
+ from .types import FolderEntitiesListRequestEntityStatus
4
+
5
+ __all__ = ["FolderEntitiesListRequestEntityStatus"]
@@ -2,10 +2,13 @@
2
2
 
3
3
  import typing
4
4
  from ...core.client_wrapper import SyncClientWrapper
5
+ from .types.folder_entities_list_request_entity_status import FolderEntitiesListRequestEntityStatus
5
6
  from ...core.request_options import RequestOptions
6
- from ...core.jsonable_encoder import jsonable_encoder
7
+ from ...types.paginated_folder_entity_list import PaginatedFolderEntityList
8
+ from ...core.pydantic_utilities import parse_obj_as
7
9
  from json.decoder import JSONDecodeError
8
10
  from ...core.api_error import ApiError
11
+ from ...core.jsonable_encoder import jsonable_encoder
9
12
  from ...core.client_wrapper import AsyncClientWrapper
10
13
 
11
14
  # this is used as the default value for optional parameters
@@ -16,6 +19,93 @@ class FolderEntitiesClient:
16
19
  def __init__(self, *, client_wrapper: SyncClientWrapper):
17
20
  self._client_wrapper = client_wrapper
18
21
 
22
+ def list(
23
+ self,
24
+ *,
25
+ parent_folder_id: str,
26
+ entity_status: typing.Optional[FolderEntitiesListRequestEntityStatus] = None,
27
+ limit: typing.Optional[int] = None,
28
+ offset: typing.Optional[int] = None,
29
+ ordering: typing.Optional[str] = None,
30
+ request_options: typing.Optional[RequestOptions] = None,
31
+ ) -> PaginatedFolderEntityList:
32
+ """
33
+ List all folder entities within a specified folder.
34
+
35
+ Parameters
36
+ ----------
37
+ parent_folder_id : str
38
+ Filter down to only those entities whose parent folder has the specified ID.
39
+
40
+ To filter by an entity's parent folder, provide the ID of the parent folder. To filter by the root directory, provide
41
+ a string representing the entity type of the root directory. Supported root directories include:
42
+
43
+ - PROMPT_SANDBOX
44
+ - WORKFLOW_SANDBOX
45
+ - DOCUMENT_INDEX
46
+ - TEST_SUITE
47
+
48
+ entity_status : typing.Optional[FolderEntitiesListRequestEntityStatus]
49
+ Filter down to only those objects whose entities have a status matching the status specified.
50
+
51
+ - `ACTIVE` - Active
52
+ - `ARCHIVED` - Archived
53
+
54
+ limit : typing.Optional[int]
55
+ Number of results to return per page.
56
+
57
+ offset : typing.Optional[int]
58
+ The initial index from which to return the results.
59
+
60
+ ordering : typing.Optional[str]
61
+ Which field to use when ordering the results.
62
+
63
+ request_options : typing.Optional[RequestOptions]
64
+ Request-specific configuration.
65
+
66
+ Returns
67
+ -------
68
+ PaginatedFolderEntityList
69
+
70
+
71
+ Examples
72
+ --------
73
+ from vellum import Vellum
74
+
75
+ client = Vellum(
76
+ api_key="YOUR_API_KEY",
77
+ )
78
+ client.folder_entities.list(
79
+ parent_folder_id="parent_folder_id",
80
+ )
81
+ """
82
+ _response = self._client_wrapper.httpx_client.request(
83
+ "v1/folder-entities",
84
+ base_url=self._client_wrapper.get_environment().default,
85
+ method="GET",
86
+ params={
87
+ "entity_status": entity_status,
88
+ "limit": limit,
89
+ "offset": offset,
90
+ "ordering": ordering,
91
+ "parent_folder_id": parent_folder_id,
92
+ },
93
+ request_options=request_options,
94
+ )
95
+ try:
96
+ if 200 <= _response.status_code < 300:
97
+ return typing.cast(
98
+ PaginatedFolderEntityList,
99
+ parse_obj_as(
100
+ type_=PaginatedFolderEntityList, # type: ignore
101
+ object_=_response.json(),
102
+ ),
103
+ )
104
+ _response_json = _response.json()
105
+ except JSONDecodeError:
106
+ raise ApiError(status_code=_response.status_code, body=_response.text)
107
+ raise ApiError(status_code=_response.status_code, body=_response_json)
108
+
19
109
  def add_entity_to_folder(
20
110
  self, folder_id: str, *, entity_id: str, request_options: typing.Optional[RequestOptions] = None
21
111
  ) -> None:
@@ -27,7 +117,13 @@ class FolderEntitiesClient:
27
117
  Parameters
28
118
  ----------
29
119
  folder_id : str
30
- The ID of the folder to which the entity should be added. This can be a UUID of a folder, or the name of a root directory (e.g. "PROMPT_SANDBOX").
120
+ The ID of the folder to which the entity should be added. This can be a UUID of a folder, or the name of a root
121
+ directory. Supported root directories include:
122
+
123
+ - PROMPT_SANDBOX
124
+ - WORKFLOW_SANDBOX
125
+ - DOCUMENT_INDEX
126
+ - TEST_SUITE
31
127
 
32
128
  entity_id : str
33
129
  The ID of the entity you would like to move.
@@ -74,6 +170,101 @@ class AsyncFolderEntitiesClient:
74
170
  def __init__(self, *, client_wrapper: AsyncClientWrapper):
75
171
  self._client_wrapper = client_wrapper
76
172
 
173
+ async def list(
174
+ self,
175
+ *,
176
+ parent_folder_id: str,
177
+ entity_status: typing.Optional[FolderEntitiesListRequestEntityStatus] = None,
178
+ limit: typing.Optional[int] = None,
179
+ offset: typing.Optional[int] = None,
180
+ ordering: typing.Optional[str] = None,
181
+ request_options: typing.Optional[RequestOptions] = None,
182
+ ) -> PaginatedFolderEntityList:
183
+ """
184
+ List all folder entities within a specified folder.
185
+
186
+ Parameters
187
+ ----------
188
+ parent_folder_id : str
189
+ Filter down to only those entities whose parent folder has the specified ID.
190
+
191
+ To filter by an entity's parent folder, provide the ID of the parent folder. To filter by the root directory, provide
192
+ a string representing the entity type of the root directory. Supported root directories include:
193
+
194
+ - PROMPT_SANDBOX
195
+ - WORKFLOW_SANDBOX
196
+ - DOCUMENT_INDEX
197
+ - TEST_SUITE
198
+
199
+ entity_status : typing.Optional[FolderEntitiesListRequestEntityStatus]
200
+ Filter down to only those objects whose entities have a status matching the status specified.
201
+
202
+ - `ACTIVE` - Active
203
+ - `ARCHIVED` - Archived
204
+
205
+ limit : typing.Optional[int]
206
+ Number of results to return per page.
207
+
208
+ offset : typing.Optional[int]
209
+ The initial index from which to return the results.
210
+
211
+ ordering : typing.Optional[str]
212
+ Which field to use when ordering the results.
213
+
214
+ request_options : typing.Optional[RequestOptions]
215
+ Request-specific configuration.
216
+
217
+ Returns
218
+ -------
219
+ PaginatedFolderEntityList
220
+
221
+
222
+ Examples
223
+ --------
224
+ import asyncio
225
+
226
+ from vellum import AsyncVellum
227
+
228
+ client = AsyncVellum(
229
+ api_key="YOUR_API_KEY",
230
+ )
231
+
232
+
233
+ async def main() -> None:
234
+ await client.folder_entities.list(
235
+ parent_folder_id="parent_folder_id",
236
+ )
237
+
238
+
239
+ asyncio.run(main())
240
+ """
241
+ _response = await self._client_wrapper.httpx_client.request(
242
+ "v1/folder-entities",
243
+ base_url=self._client_wrapper.get_environment().default,
244
+ method="GET",
245
+ params={
246
+ "entity_status": entity_status,
247
+ "limit": limit,
248
+ "offset": offset,
249
+ "ordering": ordering,
250
+ "parent_folder_id": parent_folder_id,
251
+ },
252
+ request_options=request_options,
253
+ )
254
+ try:
255
+ if 200 <= _response.status_code < 300:
256
+ return typing.cast(
257
+ PaginatedFolderEntityList,
258
+ parse_obj_as(
259
+ type_=PaginatedFolderEntityList, # type: ignore
260
+ object_=_response.json(),
261
+ ),
262
+ )
263
+ _response_json = _response.json()
264
+ except JSONDecodeError:
265
+ raise ApiError(status_code=_response.status_code, body=_response.text)
266
+ raise ApiError(status_code=_response.status_code, body=_response_json)
267
+
77
268
  async def add_entity_to_folder(
78
269
  self, folder_id: str, *, entity_id: str, request_options: typing.Optional[RequestOptions] = None
79
270
  ) -> None:
@@ -85,7 +276,13 @@ class AsyncFolderEntitiesClient:
85
276
  Parameters
86
277
  ----------
87
278
  folder_id : str
88
- The ID of the folder to which the entity should be added. This can be a UUID of a folder, or the name of a root directory (e.g. "PROMPT_SANDBOX").
279
+ The ID of the folder to which the entity should be added. This can be a UUID of a folder, or the name of a root
280
+ directory. Supported root directories include:
281
+
282
+ - PROMPT_SANDBOX
283
+ - WORKFLOW_SANDBOX
284
+ - DOCUMENT_INDEX
285
+ - TEST_SUITE
89
286
 
90
287
  entity_id : str
91
288
  The ID of the entity you would like to move.
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from .folder_entities_list_request_entity_status import FolderEntitiesListRequestEntityStatus
4
+
5
+ __all__ = ["FolderEntitiesListRequestEntityStatus"]
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ FolderEntitiesListRequestEntityStatus = typing.Union[typing.Literal["ACTIVE", "ARCHIVED"], typing.Any]
@@ -0,0 +1,2 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+