vellum-ai 0.5.0__py3-none-any.whl → 0.5.2__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 +10 -2
 - vellum/core/client_wrapper.py +1 -1
 - vellum/lib/test_suites/resources.py +115 -37
 - vellum/lib/utils/env.py +4 -2
 - vellum/lib/utils/exceptions.py +1 -1
 - vellum/lib/utils/paginator.py +2 -1
 - vellum/types/__init__.py +10 -2
 - vellum/types/error_vellum_value.py +30 -0
 - vellum/types/function_call_variable_value.py +1 -1
 - vellum/types/{node_output_compiled_function_value.py → function_call_vellum_value.py} +6 -3
 - vellum/types/json_vellum_value.py +29 -0
 - vellum/types/node_output_compiled_array_value.py +7 -1
 - vellum/types/node_output_compiled_chat_history_value.py +7 -1
 - vellum/types/node_output_compiled_error_value.py +7 -1
 - vellum/types/node_output_compiled_function_call_value.py +33 -0
 - vellum/types/node_output_compiled_json_value.py +7 -1
 - vellum/types/node_output_compiled_number_value.py +7 -1
 - vellum/types/node_output_compiled_search_results_value.py +7 -1
 - vellum/types/node_output_compiled_string_value.py +7 -1
 - vellum/types/node_output_compiled_value.py +2 -2
 - vellum/types/prompt_output.py +8 -8
 - vellum/types/string_vellum_value.py +29 -0
 - {vellum_ai-0.5.0.dist-info → vellum_ai-0.5.2.dist-info}/METADATA +1 -1
 - {vellum_ai-0.5.0.dist-info → vellum_ai-0.5.2.dist-info}/RECORD +26 -22
 - {vellum_ai-0.5.0.dist-info → vellum_ai-0.5.2.dist-info}/LICENSE +0 -0
 - {vellum_ai-0.5.0.dist-info → vellum_ai-0.5.2.dist-info}/WHEEL +0 -0
 
    
        vellum/__init__.py
    CHANGED
    
    | 
         @@ -71,6 +71,7 @@ from .types import ( 
     | 
|
| 
       71 
71 
     | 
    
         
             
                EnvironmentEnum,
         
     | 
| 
       72 
72 
     | 
    
         
             
                ErrorEnum,
         
     | 
| 
       73 
73 
     | 
    
         
             
                ErrorVariableValue,
         
     | 
| 
      
 74 
     | 
    
         
            +
                ErrorVellumValue,
         
     | 
| 
       74 
75 
     | 
    
         
             
                ExecutePromptApiErrorResponse,
         
     | 
| 
       75 
76 
     | 
    
         
             
                ExecutePromptEvent,
         
     | 
| 
       76 
77 
     | 
    
         
             
                ExecutePromptEvent_Fulfilled,
         
     | 
| 
         @@ -121,6 +122,7 @@ from .types import ( 
     | 
|
| 
       121 
122 
     | 
    
         
             
                FunctionCallChatMessageContentValueRequest,
         
     | 
| 
       122 
123 
     | 
    
         
             
                FunctionCallEnum,
         
     | 
| 
       123 
124 
     | 
    
         
             
                FunctionCallVariableValue,
         
     | 
| 
      
 125 
     | 
    
         
            +
                FunctionCallVellumValue,
         
     | 
| 
       124 
126 
     | 
    
         
             
                FunctionCall_Fulfilled,
         
     | 
| 
       125 
127 
     | 
    
         
             
                FunctionCall_Rejected,
         
     | 
| 
       126 
128 
     | 
    
         
             
                GenerateErrorResponse,
         
     | 
| 
         @@ -145,6 +147,7 @@ from .types import ( 
     | 
|
| 
       145 
147 
     | 
    
         
             
                JsonEnum,
         
     | 
| 
       146 
148 
     | 
    
         
             
                JsonInputRequest,
         
     | 
| 
       147 
149 
     | 
    
         
             
                JsonVariableValue,
         
     | 
| 
      
 150 
     | 
    
         
            +
                JsonVellumValue,
         
     | 
| 
       148 
151 
     | 
    
         
             
                LogicalOperator,
         
     | 
| 
       149 
152 
     | 
    
         
             
                LogprobsEnum,
         
     | 
| 
       150 
153 
     | 
    
         
             
                MetadataFilterConfigRequest,
         
     | 
| 
         @@ -206,7 +209,7 @@ from .types import ( 
     | 
|
| 
       206 
209 
     | 
    
         
             
                NodeOutputCompiledArrayValue,
         
     | 
| 
       207 
210 
     | 
    
         
             
                NodeOutputCompiledChatHistoryValue,
         
     | 
| 
       208 
211 
     | 
    
         
             
                NodeOutputCompiledErrorValue,
         
     | 
| 
       209 
     | 
    
         
            -
                 
     | 
| 
      
 212 
     | 
    
         
            +
                NodeOutputCompiledFunctionCallValue,
         
     | 
| 
       210 
213 
     | 
    
         
             
                NodeOutputCompiledJsonValue,
         
     | 
| 
       211 
214 
     | 
    
         
             
                NodeOutputCompiledNumberValue,
         
     | 
| 
       212 
215 
     | 
    
         
             
                NodeOutputCompiledSearchResultsValue,
         
     | 
| 
         @@ -285,6 +288,7 @@ from .types import ( 
     | 
|
| 
       285 
288 
     | 
    
         
             
                StringEnum,
         
     | 
| 
       286 
289 
     | 
    
         
             
                StringInputRequest,
         
     | 
| 
       287 
290 
     | 
    
         
             
                StringVariableValue,
         
     | 
| 
      
 291 
     | 
    
         
            +
                StringVellumValue,
         
     | 
| 
       288 
292 
     | 
    
         
             
                SubmitCompletionActualRequest,
         
     | 
| 
       289 
293 
     | 
    
         
             
                SubmitCompletionActualsErrorResponse,
         
     | 
| 
       290 
294 
     | 
    
         
             
                SubmitWorkflowExecutionActualRequest,
         
     | 
| 
         @@ -575,6 +579,7 @@ __all__ = [ 
     | 
|
| 
       575 
579 
     | 
    
         
             
                "EnvironmentEnum",
         
     | 
| 
       576 
580 
     | 
    
         
             
                "ErrorEnum",
         
     | 
| 
       577 
581 
     | 
    
         
             
                "ErrorVariableValue",
         
     | 
| 
      
 582 
     | 
    
         
            +
                "ErrorVellumValue",
         
     | 
| 
       578 
583 
     | 
    
         
             
                "ExecutePromptApiErrorResponse",
         
     | 
| 
       579 
584 
     | 
    
         
             
                "ExecutePromptEvent",
         
     | 
| 
       580 
585 
     | 
    
         
             
                "ExecutePromptEvent_Fulfilled",
         
     | 
| 
         @@ -626,6 +631,7 @@ __all__ = [ 
     | 
|
| 
       626 
631 
     | 
    
         
             
                "FunctionCallChatMessageContentValueRequest",
         
     | 
| 
       627 
632 
     | 
    
         
             
                "FunctionCallEnum",
         
     | 
| 
       628 
633 
     | 
    
         
             
                "FunctionCallVariableValue",
         
     | 
| 
      
 634 
     | 
    
         
            +
                "FunctionCallVellumValue",
         
     | 
| 
       629 
635 
     | 
    
         
             
                "FunctionCall_Fulfilled",
         
     | 
| 
       630 
636 
     | 
    
         
             
                "FunctionCall_Rejected",
         
     | 
| 
       631 
637 
     | 
    
         
             
                "GenerateErrorResponse",
         
     | 
| 
         @@ -651,6 +657,7 @@ __all__ = [ 
     | 
|
| 
       651 
657 
     | 
    
         
             
                "JsonEnum",
         
     | 
| 
       652 
658 
     | 
    
         
             
                "JsonInputRequest",
         
     | 
| 
       653 
659 
     | 
    
         
             
                "JsonVariableValue",
         
     | 
| 
      
 660 
     | 
    
         
            +
                "JsonVellumValue",
         
     | 
| 
       654 
661 
     | 
    
         
             
                "LogicalOperator",
         
     | 
| 
       655 
662 
     | 
    
         
             
                "LogprobsEnum",
         
     | 
| 
       656 
663 
     | 
    
         
             
                "MetadataFilterConfigRequest",
         
     | 
| 
         @@ -712,7 +719,7 @@ __all__ = [ 
     | 
|
| 
       712 
719 
     | 
    
         
             
                "NodeOutputCompiledArrayValue",
         
     | 
| 
       713 
720 
     | 
    
         
             
                "NodeOutputCompiledChatHistoryValue",
         
     | 
| 
       714 
721 
     | 
    
         
             
                "NodeOutputCompiledErrorValue",
         
     | 
| 
       715 
     | 
    
         
            -
                " 
     | 
| 
      
 722 
     | 
    
         
            +
                "NodeOutputCompiledFunctionCallValue",
         
     | 
| 
       716 
723 
     | 
    
         
             
                "NodeOutputCompiledJsonValue",
         
     | 
| 
       717 
724 
     | 
    
         
             
                "NodeOutputCompiledNumberValue",
         
     | 
| 
       718 
725 
     | 
    
         
             
                "NodeOutputCompiledSearchResultsValue",
         
     | 
| 
         @@ -792,6 +799,7 @@ __all__ = [ 
     | 
|
| 
       792 
799 
     | 
    
         
             
                "StringEnum",
         
     | 
| 
       793 
800 
     | 
    
         
             
                "StringInputRequest",
         
     | 
| 
       794 
801 
     | 
    
         
             
                "StringVariableValue",
         
     | 
| 
      
 802 
     | 
    
         
            +
                "StringVellumValue",
         
     | 
| 
       795 
803 
     | 
    
         
             
                "SubmitCompletionActualRequest",
         
     | 
| 
       796 
804 
     | 
    
         
             
                "SubmitCompletionActualsErrorResponse",
         
     | 
| 
       797 
805 
     | 
    
         
             
                "SubmitWorkflowExecutionActualRequest",
         
     | 
    
        vellum/core/client_wrapper.py
    CHANGED
    
    
| 
         @@ -2,8 +2,10 @@ from __future__ import annotations 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            import logging
         
     | 
| 
       4 
4 
     | 
    
         
             
            import time
         
     | 
| 
       5 
     | 
    
         
            -
            from  
     | 
| 
      
 5 
     | 
    
         
            +
            from functools import cached_property
         
     | 
| 
      
 6 
     | 
    
         
            +
            from typing import Callable, Generator, List, Any
         
     | 
| 
       6 
7 
     | 
    
         | 
| 
      
 8 
     | 
    
         
            +
            from vellum import TestSuiteRunRead, TestSuiteRunMetricOutput_Number
         
     | 
| 
       7 
9 
     | 
    
         
             
            from vellum.client import Vellum
         
     | 
| 
       8 
10 
     | 
    
         
             
            from vellum.lib.test_suites.constants import (
         
     | 
| 
       9 
11 
     | 
    
         
             
                DEFAULT_MAX_POLLING_DURATION_MS,
         
     | 
| 
         @@ -11,6 +13,7 @@ from vellum.lib.test_suites.constants import ( 
     | 
|
| 
       11 
13 
     | 
    
         
             
            )
         
     | 
| 
       12 
14 
     | 
    
         
             
            from vellum.lib.test_suites.exceptions import TestSuiteRunResultsException
         
     | 
| 
       13 
15 
     | 
    
         
             
            from vellum.lib.utils.env import get_api_key
         
     | 
| 
      
 16 
     | 
    
         
            +
            from vellum.lib.utils.paginator import PaginatedResults, get_all_results
         
     | 
| 
       14 
17 
     | 
    
         
             
            from vellum.types import (
         
     | 
| 
       15 
18 
     | 
    
         
             
                ExternalTestCaseExecutionRequest,
         
     | 
| 
       16 
19 
     | 
    
         
             
                NamedTestCaseVariableValueRequest,
         
     | 
| 
         @@ -22,9 +25,6 @@ from vellum.types import ( 
     | 
|
| 
       22 
25 
     | 
    
         
             
                TestSuiteRunState,
         
     | 
| 
       23 
26 
     | 
    
         
             
            )
         
     | 
| 
       24 
27 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
            from vellum.lib.utils.paginator import PaginatedResults, get_all_results
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
28 
     | 
    
         
             
            logger = logging.getLogger(__name__)
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         | 
| 
         @@ -116,44 +116,141 @@ class VellumTestSuiteRunResults: 
     | 
|
| 
       116 
116 
     | 
    
         | 
| 
       117 
117 
     | 
    
         
             
                def __init__(
         
     | 
| 
       118 
118 
     | 
    
         
             
                    self,
         
     | 
| 
       119 
     | 
    
         
            -
                     
     | 
| 
      
 119 
     | 
    
         
            +
                    test_suite_run: TestSuiteRunRead,
         
     | 
| 
       120 
120 
     | 
    
         
             
                    *,
         
     | 
| 
       121 
121 
     | 
    
         
             
                    client: Vellum | None = None,
         
     | 
| 
       122 
122 
     | 
    
         
             
                    polling_interval: int = DEFAULT_POLLING_INTERVAL_MS,
         
     | 
| 
       123 
123 
     | 
    
         
             
                    max_polling_duration: int = DEFAULT_MAX_POLLING_DURATION_MS,
         
     | 
| 
       124 
124 
     | 
    
         
             
                ) -> None:
         
     | 
| 
       125 
     | 
    
         
            -
                    self. 
     | 
| 
      
 125 
     | 
    
         
            +
                    self._test_suite_run = test_suite_run
         
     | 
| 
       126 
126 
     | 
    
         
             
                    self._client = client or Vellum(
         
     | 
| 
       127 
127 
     | 
    
         
             
                        api_key=get_api_key(),
         
     | 
| 
       128 
128 
     | 
    
         
             
                    )
         
     | 
| 
       129 
     | 
    
         
            -
                    self._state = "QUEUED"
         
     | 
| 
       130 
129 
     | 
    
         
             
                    self._executions: Generator[VellumTestSuiteRunExecution, None, None] | None = (
         
     | 
| 
       131 
130 
     | 
    
         
             
                        None
         
     | 
| 
       132 
131 
     | 
    
         
             
                    )
         
     | 
| 
       133 
132 
     | 
    
         
             
                    self._polling_interval = polling_interval
         
     | 
| 
       134 
133 
     | 
    
         
             
                    self._max_polling_duration = max_polling_duration
         
     | 
| 
       135 
134 
     | 
    
         | 
| 
      
 135 
     | 
    
         
            +
                @property
         
     | 
| 
      
 136 
     | 
    
         
            +
                def state(self) -> TestSuiteRunState:
         
     | 
| 
      
 137 
     | 
    
         
            +
                    return self._test_suite_run.state
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
                @cached_property
         
     | 
| 
      
 140 
     | 
    
         
            +
                def all_executions(self) -> list[VellumTestSuiteRunExecution]:
         
     | 
| 
      
 141 
     | 
    
         
            +
                    return list(self._get_test_suite_run_executions())
         
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
       136 
143 
     | 
    
         
             
                def get_metric_outputs(
         
     | 
| 
       137 
144 
     | 
    
         
             
                    self, metric_identifier: str | None = None, output_identifier: str | None = None
         
     | 
| 
       138 
     | 
    
         
            -
                ) ->  
     | 
| 
      
 145 
     | 
    
         
            +
                ) -> List[TestSuiteRunMetricOutput]:
         
     | 
| 
       139 
146 
     | 
    
         
             
                    """Retrieve a metric's output across all executions by providing the info needed to uniquely identify it."""
         
     | 
| 
       140 
147 
     | 
    
         | 
| 
       141 
     | 
    
         
            -
                     
     | 
| 
       142 
     | 
    
         
            -
             
     | 
| 
       143 
     | 
    
         
            -
                    for execution in executions:
         
     | 
| 
       144 
     | 
    
         
            -
                        yield execution.get_metric_output(
         
     | 
| 
      
 148 
     | 
    
         
            +
                    return [
         
     | 
| 
      
 149 
     | 
    
         
            +
                        execution.get_metric_output(
         
     | 
| 
       145 
150 
     | 
    
         
             
                            metric_identifier=metric_identifier, output_identifier=output_identifier
         
     | 
| 
       146 
151 
     | 
    
         
             
                        )
         
     | 
| 
      
 152 
     | 
    
         
            +
                        for execution in self.all_executions
         
     | 
| 
      
 153 
     | 
    
         
            +
                    ]
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
      
 155 
     | 
    
         
            +
                def get_count_metric_outputs(
         
     | 
| 
      
 156 
     | 
    
         
            +
                    self,
         
     | 
| 
      
 157 
     | 
    
         
            +
                    metric_identifier: str | None = None,
         
     | 
| 
      
 158 
     | 
    
         
            +
                    output_identifier: str | None = None,
         
     | 
| 
      
 159 
     | 
    
         
            +
                    *,
         
     | 
| 
      
 160 
     | 
    
         
            +
                    predicate: Callable[[TestSuiteRunMetricOutput], bool] | None = None,
         
     | 
| 
      
 161 
     | 
    
         
            +
                ) -> int:
         
     | 
| 
      
 162 
     | 
    
         
            +
                    """Returns the count of all metric outputs that match the given criteria."""
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
                    metric_outputs = self.get_metric_outputs(
         
     | 
| 
      
 165 
     | 
    
         
            +
                        metric_identifier=metric_identifier, output_identifier=output_identifier
         
     | 
| 
      
 166 
     | 
    
         
            +
                    )
         
     | 
| 
      
 167 
     | 
    
         
            +
             
     | 
| 
      
 168 
     | 
    
         
            +
                    if predicate is None:
         
     | 
| 
      
 169 
     | 
    
         
            +
                        return len(metric_outputs)
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
      
 171 
     | 
    
         
            +
                    return len([output for output in metric_outputs if predicate(output)])
         
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
      
 173 
     | 
    
         
            +
                def get_numeric_metric_output_values(
         
     | 
| 
      
 174 
     | 
    
         
            +
                    self,
         
     | 
| 
      
 175 
     | 
    
         
            +
                    metric_identifier: str | None = None,
         
     | 
| 
      
 176 
     | 
    
         
            +
                    output_identifier: str | None = None,
         
     | 
| 
      
 177 
     | 
    
         
            +
                ) -> List[float]:
         
     | 
| 
      
 178 
     | 
    
         
            +
                    """Returns the values of a numeric metric output that match the given criteria."""
         
     | 
| 
      
 179 
     | 
    
         
            +
             
     | 
| 
      
 180 
     | 
    
         
            +
                    metric_outputs: list[TestSuiteRunMetricOutput_Number] = []
         
     | 
| 
      
 181 
     | 
    
         
            +
             
     | 
| 
      
 182 
     | 
    
         
            +
                    for output in self.get_metric_outputs(
         
     | 
| 
      
 183 
     | 
    
         
            +
                        metric_identifier=metric_identifier, output_identifier=output_identifier
         
     | 
| 
      
 184 
     | 
    
         
            +
                    ):
         
     | 
| 
      
 185 
     | 
    
         
            +
                        if output.type != "NUMBER":
         
     | 
| 
      
 186 
     | 
    
         
            +
                            raise TestSuiteRunResultsException(
         
     | 
| 
      
 187 
     | 
    
         
            +
                                f"Expected a numeric metric output, but got a {output.type} output instead."
         
     | 
| 
      
 188 
     | 
    
         
            +
                            )
         
     | 
| 
      
 189 
     | 
    
         
            +
             
     | 
| 
      
 190 
     | 
    
         
            +
                        metric_outputs.append(output)
         
     | 
| 
      
 191 
     | 
    
         
            +
             
     | 
| 
      
 192 
     | 
    
         
            +
                    return [output.value for output in metric_outputs]
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
| 
      
 194 
     | 
    
         
            +
                def get_mean_metric_output(
         
     | 
| 
      
 195 
     | 
    
         
            +
                    self, metric_identifier: str | None = None, output_identifier: str | None = None
         
     | 
| 
      
 196 
     | 
    
         
            +
                ) -> float:
         
     | 
| 
      
 197 
     | 
    
         
            +
                    """Returns the mean of all metric outputs that match the given criteria."""
         
     | 
| 
      
 198 
     | 
    
         
            +
                    output_values = self.get_numeric_metric_output_values(
         
     | 
| 
      
 199 
     | 
    
         
            +
                        metric_identifier=metric_identifier, output_identifier=output_identifier
         
     | 
| 
      
 200 
     | 
    
         
            +
                    )
         
     | 
| 
      
 201 
     | 
    
         
            +
                    return sum(output_values) / len(output_values)
         
     | 
| 
      
 202 
     | 
    
         
            +
             
     | 
| 
      
 203 
     | 
    
         
            +
                def get_min_metric_output(
         
     | 
| 
      
 204 
     | 
    
         
            +
                    self, metric_identifier: str | None = None, output_identifier: str | None = None
         
     | 
| 
      
 205 
     | 
    
         
            +
                ) -> float:
         
     | 
| 
      
 206 
     | 
    
         
            +
                    """Returns the min value across= all metric outputs that match the given criteria."""
         
     | 
| 
      
 207 
     | 
    
         
            +
                    output_values = self.get_numeric_metric_output_values(
         
     | 
| 
      
 208 
     | 
    
         
            +
                        metric_identifier=metric_identifier, output_identifier=output_identifier
         
     | 
| 
      
 209 
     | 
    
         
            +
                    )
         
     | 
| 
      
 210 
     | 
    
         
            +
                    return min(output_values)
         
     | 
| 
      
 211 
     | 
    
         
            +
             
     | 
| 
      
 212 
     | 
    
         
            +
                def get_max_metric_output(
         
     | 
| 
      
 213 
     | 
    
         
            +
                    self, metric_identifier: str | None = None, output_identifier: str | None = None
         
     | 
| 
      
 214 
     | 
    
         
            +
                ) -> float:
         
     | 
| 
      
 215 
     | 
    
         
            +
                    """Returns the max value across all metric outputs that match the given criteria."""
         
     | 
| 
      
 216 
     | 
    
         
            +
                    output_values = self.get_numeric_metric_output_values(
         
     | 
| 
      
 217 
     | 
    
         
            +
                        metric_identifier=metric_identifier, output_identifier=output_identifier
         
     | 
| 
      
 218 
     | 
    
         
            +
                    )
         
     | 
| 
      
 219 
     | 
    
         
            +
                    return max(output_values)
         
     | 
| 
      
 220 
     | 
    
         
            +
             
     | 
| 
      
 221 
     | 
    
         
            +
                def wait_until_complete(self) -> None:
         
     | 
| 
      
 222 
     | 
    
         
            +
                    """Wait until the Test Suite Run is no longer in a QUEUED or RUNNING state."""
         
     | 
| 
      
 223 
     | 
    
         
            +
             
     | 
| 
      
 224 
     | 
    
         
            +
                    start_time = time.time_ns()
         
     | 
| 
      
 225 
     | 
    
         
            +
                    while True:
         
     | 
| 
      
 226 
     | 
    
         
            +
                        logger.debug("Polling for latest test suite run state...")
         
     | 
| 
      
 227 
     | 
    
         
            +
                        self._refresh_test_suite_run()
         
     | 
| 
      
 228 
     | 
    
         
            +
                        if self.state not in {"QUEUED", "RUNNING"}:
         
     | 
| 
      
 229 
     | 
    
         
            +
                            break
         
     | 
| 
      
 230 
     | 
    
         
            +
             
     | 
| 
      
 231 
     | 
    
         
            +
                        current_time = time.time_ns()
         
     | 
| 
      
 232 
     | 
    
         
            +
                        if ((current_time - start_time) / 1e6) > self._max_polling_duration:
         
     | 
| 
      
 233 
     | 
    
         
            +
                            raise TestSuiteRunResultsException(
         
     | 
| 
      
 234 
     | 
    
         
            +
                                "Test suite run timed out polling for executions"
         
     | 
| 
      
 235 
     | 
    
         
            +
                            )
         
     | 
| 
      
 236 
     | 
    
         
            +
             
     | 
| 
      
 237 
     | 
    
         
            +
                        time.sleep(self._polling_interval / 1000.0)
         
     | 
| 
      
 238 
     | 
    
         
            +
             
     | 
| 
      
 239 
     | 
    
         
            +
                    if self.state == "FAILED":
         
     | 
| 
      
 240 
     | 
    
         
            +
                        raise TestSuiteRunResultsException("Test suite run failed")
         
     | 
| 
       147 
241 
     | 
    
         | 
| 
       148 
     | 
    
         
            -
             
     | 
| 
       149 
     | 
    
         
            -
             
     | 
| 
       150 
     | 
    
         
            -
             
     | 
| 
      
 242 
     | 
    
         
            +
                    if self.state == "CANCELLED":
         
     | 
| 
      
 243 
     | 
    
         
            +
                        raise TestSuiteRunResultsException("Test suite run was cancelled")
         
     | 
| 
      
 244 
     | 
    
         
            +
             
     | 
| 
      
 245 
     | 
    
         
            +
                def _refresh_test_suite_run(self):
         
     | 
| 
      
 246 
     | 
    
         
            +
                    test_suite_run = self._client.test_suite_runs.retrieve(self._test_suite_run.id)
         
     | 
| 
      
 247 
     | 
    
         
            +
                    self._test_suite_run = test_suite_run
         
     | 
| 
       151 
248 
     | 
    
         | 
| 
       152 
249 
     | 
    
         
             
                def _list_paginated_executions(
         
     | 
| 
       153 
250 
     | 
    
         
             
                    self, offset: int | None, limit: int | None
         
     | 
| 
       154 
251 
     | 
    
         
             
                ) -> PaginatedResults[TestSuiteRunExecution]:
         
     | 
| 
       155 
252 
     | 
    
         
             
                    response = self._client.test_suite_runs.list_executions(
         
     | 
| 
       156 
     | 
    
         
            -
                        self. 
     | 
| 
      
 253 
     | 
    
         
            +
                        self._test_suite_run.id,
         
     | 
| 
       157 
254 
     | 
    
         
             
                        offset=offset,
         
     | 
| 
       158 
255 
     | 
    
         
             
                        limit=limit,
         
     | 
| 
       159 
256 
     | 
    
         
             
                        expand=[
         
     | 
| 
         @@ -175,26 +272,7 @@ class VellumTestSuiteRunResults: 
     | 
|
| 
       175 
272 
     | 
    
         
             
                    if self._executions is not None:
         
     | 
| 
       176 
273 
     | 
    
         
             
                        return self._executions
         
     | 
| 
       177 
274 
     | 
    
         | 
| 
       178 
     | 
    
         
            -
                     
     | 
| 
       179 
     | 
    
         
            -
                    while True:
         
     | 
| 
       180 
     | 
    
         
            -
                        logger.debug("Polling for latest test suite run state...")
         
     | 
| 
       181 
     | 
    
         
            -
                        self._refresh_test_suite_run_state()
         
     | 
| 
       182 
     | 
    
         
            -
                        if self._state not in {"QUEUED", "RUNNING"}:
         
     | 
| 
       183 
     | 
    
         
            -
                            break
         
     | 
| 
       184 
     | 
    
         
            -
             
     | 
| 
       185 
     | 
    
         
            -
                        current_time = time.time_ns()
         
     | 
| 
       186 
     | 
    
         
            -
                        if ((current_time - start_time) / 1e6) > self._max_polling_duration:
         
     | 
| 
       187 
     | 
    
         
            -
                            raise TestSuiteRunResultsException(
         
     | 
| 
       188 
     | 
    
         
            -
                                "Test suite run timed out polling for executions"
         
     | 
| 
       189 
     | 
    
         
            -
                            )
         
     | 
| 
       190 
     | 
    
         
            -
             
     | 
| 
       191 
     | 
    
         
            -
                        time.sleep(self._polling_interval / 1000.0)
         
     | 
| 
       192 
     | 
    
         
            -
             
     | 
| 
       193 
     | 
    
         
            -
                    if self._state == "FAILED":
         
     | 
| 
       194 
     | 
    
         
            -
                        raise TestSuiteRunResultsException("Test suite run failed")
         
     | 
| 
       195 
     | 
    
         
            -
             
     | 
| 
       196 
     | 
    
         
            -
                    if self._state == "CANCELLED":
         
     | 
| 
       197 
     | 
    
         
            -
                        raise TestSuiteRunResultsException("Test suite run was cancelled")
         
     | 
| 
      
 275 
     | 
    
         
            +
                    self.wait_until_complete()
         
     | 
| 
       198 
276 
     | 
    
         | 
| 
       199 
277 
     | 
    
         
             
                    raw_api_executions = get_all_results(self._list_paginated_executions)
         
     | 
| 
       200 
278 
     | 
    
         
             
                    self._executions = self._wrap_api_executions(raw_api_executions)
         
     | 
| 
         @@ -250,4 +328,4 @@ class VellumTestSuite: 
     | 
|
| 
       250 
328 
     | 
    
         
             
                            ),
         
     | 
| 
       251 
329 
     | 
    
         
             
                        ),
         
     | 
| 
       252 
330 
     | 
    
         
             
                    )
         
     | 
| 
       253 
     | 
    
         
            -
                    return VellumTestSuiteRunResults(test_suite_run 
     | 
| 
      
 331 
     | 
    
         
            +
                    return VellumTestSuiteRunResults(test_suite_run, client=self.client)
         
     | 
    
        vellum/lib/utils/env.py
    CHANGED
    
    | 
         @@ -6,6 +6,8 @@ from .exceptions import VellumClientException 
     | 
|
| 
       6 
6 
     | 
    
         
             
            def get_api_key() -> str:
         
     | 
| 
       7 
7 
     | 
    
         
             
                api_key = os.environ.get("VELLUM_API_KEY")
         
     | 
| 
       8 
8 
     | 
    
         
             
                if api_key is None:
         
     | 
| 
       9 
     | 
    
         
            -
                    raise VellumClientException( 
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
      
 9 
     | 
    
         
            +
                    raise VellumClientException(
         
     | 
| 
      
 10 
     | 
    
         
            +
                        "`VELLUM_API_KEY` environment variable is required to be set."
         
     | 
| 
      
 11 
     | 
    
         
            +
                    )
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
       11 
13 
     | 
    
         
             
                return api_key
         
     | 
    
        vellum/lib/utils/exceptions.py
    CHANGED
    
    | 
         @@ -1,2 +1,2 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            class VellumClientException(Exception):
         
     | 
| 
       2 
     | 
    
         
            -
                pass
         
     | 
| 
      
 2 
     | 
    
         
            +
                pass
         
     | 
    
        vellum/lib/utils/paginator.py
    CHANGED
    
    | 
         @@ -12,7 +12,8 @@ class PaginatedResults(Generic[Result]): 
     | 
|
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
            def get_all_results(
         
     | 
| 
       15 
     | 
    
         
            -
                paginated_api: Callable[[int, Union[int, None]], PaginatedResults[Result]], 
     | 
| 
      
 15 
     | 
    
         
            +
                paginated_api: Callable[[int, Union[int, None]], PaginatedResults[Result]],
         
     | 
| 
      
 16 
     | 
    
         
            +
                page_size: Union[int, None] = None,
         
     | 
| 
       16 
17 
     | 
    
         
             
            ) -> Generator[Result, None, None]:
         
     | 
| 
       17 
18 
     | 
    
         
             
                offset = 0
         
     | 
| 
       18 
19 
     | 
    
         
             
                count = 0
         
     | 
    
        vellum/types/__init__.py
    CHANGED
    
    | 
         @@ -82,6 +82,7 @@ from .entity_status import EntityStatus 
     | 
|
| 
       82 
82 
     | 
    
         
             
            from .environment_enum import EnvironmentEnum
         
     | 
| 
       83 
83 
     | 
    
         
             
            from .error_enum import ErrorEnum
         
     | 
| 
       84 
84 
     | 
    
         
             
            from .error_variable_value import ErrorVariableValue
         
     | 
| 
      
 85 
     | 
    
         
            +
            from .error_vellum_value import ErrorVellumValue
         
     | 
| 
       85 
86 
     | 
    
         
             
            from .execute_prompt_api_error_response import ExecutePromptApiErrorResponse
         
     | 
| 
       86 
87 
     | 
    
         
             
            from .execute_prompt_event import (
         
     | 
| 
       87 
88 
     | 
    
         
             
                ExecutePromptEvent,
         
     | 
| 
         @@ -140,6 +141,7 @@ from .function_call_chat_message_content_value import FunctionCallChatMessageCon 
     | 
|
| 
       140 
141 
     | 
    
         
             
            from .function_call_chat_message_content_value_request import FunctionCallChatMessageContentValueRequest
         
     | 
| 
       141 
142 
     | 
    
         
             
            from .function_call_enum import FunctionCallEnum
         
     | 
| 
       142 
143 
     | 
    
         
             
            from .function_call_variable_value import FunctionCallVariableValue
         
     | 
| 
      
 144 
     | 
    
         
            +
            from .function_call_vellum_value import FunctionCallVellumValue
         
     | 
| 
       143 
145 
     | 
    
         
             
            from .generate_error_response import GenerateErrorResponse
         
     | 
| 
       144 
146 
     | 
    
         
             
            from .generate_options_request import GenerateOptionsRequest
         
     | 
| 
       145 
147 
     | 
    
         
             
            from .generate_request import GenerateRequest
         
     | 
| 
         @@ -162,6 +164,7 @@ from .initiated_workflow_node_result_event import InitiatedWorkflowNodeResultEve 
     | 
|
| 
       162 
164 
     | 
    
         
             
            from .json_enum import JsonEnum
         
     | 
| 
       163 
165 
     | 
    
         
             
            from .json_input_request import JsonInputRequest
         
     | 
| 
       164 
166 
     | 
    
         
             
            from .json_variable_value import JsonVariableValue
         
     | 
| 
      
 167 
     | 
    
         
            +
            from .json_vellum_value import JsonVellumValue
         
     | 
| 
       165 
168 
     | 
    
         
             
            from .logical_operator import LogicalOperator
         
     | 
| 
       166 
169 
     | 
    
         
             
            from .logprobs_enum import LogprobsEnum
         
     | 
| 
       167 
170 
     | 
    
         
             
            from .metadata_filter_config_request import MetadataFilterConfigRequest
         
     | 
| 
         @@ -231,7 +234,7 @@ from .node_input_variable_compiled_value import ( 
     | 
|
| 
       231 
234 
     | 
    
         
             
            from .node_output_compiled_array_value import NodeOutputCompiledArrayValue
         
     | 
| 
       232 
235 
     | 
    
         
             
            from .node_output_compiled_chat_history_value import NodeOutputCompiledChatHistoryValue
         
     | 
| 
       233 
236 
     | 
    
         
             
            from .node_output_compiled_error_value import NodeOutputCompiledErrorValue
         
     | 
| 
       234 
     | 
    
         
            -
            from . 
     | 
| 
      
 237 
     | 
    
         
            +
            from .node_output_compiled_function_call_value import NodeOutputCompiledFunctionCallValue
         
     | 
| 
       235 
238 
     | 
    
         
             
            from .node_output_compiled_json_value import NodeOutputCompiledJsonValue
         
     | 
| 
       236 
239 
     | 
    
         
             
            from .node_output_compiled_number_value import NodeOutputCompiledNumberValue
         
     | 
| 
       237 
240 
     | 
    
         
             
            from .node_output_compiled_search_results_value import NodeOutputCompiledSearchResultsValue
         
     | 
| 
         @@ -314,6 +317,7 @@ from .string_chat_message_content_request import StringChatMessageContentRequest 
     | 
|
| 
       314 
317 
     | 
    
         
             
            from .string_enum import StringEnum
         
     | 
| 
       315 
318 
     | 
    
         
             
            from .string_input_request import StringInputRequest
         
     | 
| 
       316 
319 
     | 
    
         
             
            from .string_variable_value import StringVariableValue
         
     | 
| 
      
 320 
     | 
    
         
            +
            from .string_vellum_value import StringVellumValue
         
     | 
| 
       317 
321 
     | 
    
         
             
            from .submit_completion_actual_request import SubmitCompletionActualRequest
         
     | 
| 
       318 
322 
     | 
    
         
             
            from .submit_completion_actuals_error_response import SubmitCompletionActualsErrorResponse
         
     | 
| 
       319 
323 
     | 
    
         
             
            from .submit_workflow_execution_actual_request import (
         
     | 
| 
         @@ -614,6 +618,7 @@ __all__ = [ 
     | 
|
| 
       614 
618 
     | 
    
         
             
                "EnvironmentEnum",
         
     | 
| 
       615 
619 
     | 
    
         
             
                "ErrorEnum",
         
     | 
| 
       616 
620 
     | 
    
         
             
                "ErrorVariableValue",
         
     | 
| 
      
 621 
     | 
    
         
            +
                "ErrorVellumValue",
         
     | 
| 
       617 
622 
     | 
    
         
             
                "ExecutePromptApiErrorResponse",
         
     | 
| 
       618 
623 
     | 
    
         
             
                "ExecutePromptEvent",
         
     | 
| 
       619 
624 
     | 
    
         
             
                "ExecutePromptEvent_Fulfilled",
         
     | 
| 
         @@ -664,6 +669,7 @@ __all__ = [ 
     | 
|
| 
       664 
669 
     | 
    
         
             
                "FunctionCallChatMessageContentValueRequest",
         
     | 
| 
       665 
670 
     | 
    
         
             
                "FunctionCallEnum",
         
     | 
| 
       666 
671 
     | 
    
         
             
                "FunctionCallVariableValue",
         
     | 
| 
      
 672 
     | 
    
         
            +
                "FunctionCallVellumValue",
         
     | 
| 
       667 
673 
     | 
    
         
             
                "FunctionCall_Fulfilled",
         
     | 
| 
       668 
674 
     | 
    
         
             
                "FunctionCall_Rejected",
         
     | 
| 
       669 
675 
     | 
    
         
             
                "GenerateErrorResponse",
         
     | 
| 
         @@ -688,6 +694,7 @@ __all__ = [ 
     | 
|
| 
       688 
694 
     | 
    
         
             
                "JsonEnum",
         
     | 
| 
       689 
695 
     | 
    
         
             
                "JsonInputRequest",
         
     | 
| 
       690 
696 
     | 
    
         
             
                "JsonVariableValue",
         
     | 
| 
      
 697 
     | 
    
         
            +
                "JsonVellumValue",
         
     | 
| 
       691 
698 
     | 
    
         
             
                "LogicalOperator",
         
     | 
| 
       692 
699 
     | 
    
         
             
                "LogprobsEnum",
         
     | 
| 
       693 
700 
     | 
    
         
             
                "MetadataFilterConfigRequest",
         
     | 
| 
         @@ -749,7 +756,7 @@ __all__ = [ 
     | 
|
| 
       749 
756 
     | 
    
         
             
                "NodeOutputCompiledArrayValue",
         
     | 
| 
       750 
757 
     | 
    
         
             
                "NodeOutputCompiledChatHistoryValue",
         
     | 
| 
       751 
758 
     | 
    
         
             
                "NodeOutputCompiledErrorValue",
         
     | 
| 
       752 
     | 
    
         
            -
                " 
     | 
| 
      
 759 
     | 
    
         
            +
                "NodeOutputCompiledFunctionCallValue",
         
     | 
| 
       753 
760 
     | 
    
         
             
                "NodeOutputCompiledJsonValue",
         
     | 
| 
       754 
761 
     | 
    
         
             
                "NodeOutputCompiledNumberValue",
         
     | 
| 
       755 
762 
     | 
    
         
             
                "NodeOutputCompiledSearchResultsValue",
         
     | 
| 
         @@ -828,6 +835,7 @@ __all__ = [ 
     | 
|
| 
       828 
835 
     | 
    
         
             
                "StringEnum",
         
     | 
| 
       829 
836 
     | 
    
         
             
                "StringInputRequest",
         
     | 
| 
       830 
837 
     | 
    
         
             
                "StringVariableValue",
         
     | 
| 
      
 838 
     | 
    
         
            +
                "StringVellumValue",
         
     | 
| 
       831 
839 
     | 
    
         
             
                "SubmitCompletionActualRequest",
         
     | 
| 
       832 
840 
     | 
    
         
             
                "SubmitCompletionActualsErrorResponse",
         
     | 
| 
       833 
841 
     | 
    
         
             
                "SubmitWorkflowExecutionActualRequest",
         
     | 
| 
         @@ -0,0 +1,30 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # This file was auto-generated by Fern from our API Definition.
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            import datetime as dt
         
     | 
| 
      
 4 
     | 
    
         
            +
            import typing
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            from ..core.datetime_utils import serialize_datetime
         
     | 
| 
      
 7 
     | 
    
         
            +
            from ..core.pydantic_utilities import pydantic_v1
         
     | 
| 
      
 8 
     | 
    
         
            +
            from .vellum_error import VellumError
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            class ErrorVellumValue(pydantic_v1.BaseModel):
         
     | 
| 
      
 12 
     | 
    
         
            +
                """
         
     | 
| 
      
 13 
     | 
    
         
            +
                A value representing an Error.
         
     | 
| 
      
 14 
     | 
    
         
            +
                """
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                value: typing.Optional[VellumError] = None
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                def json(self, **kwargs: typing.Any) -> str:
         
     | 
| 
      
 19 
     | 
    
         
            +
                    kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
         
     | 
| 
      
 20 
     | 
    
         
            +
                    return super().json(**kwargs_with_defaults)
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]:
         
     | 
| 
      
 23 
     | 
    
         
            +
                    kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
         
     | 
| 
      
 24 
     | 
    
         
            +
                    return super().dict(**kwargs_with_defaults)
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                class Config:
         
     | 
| 
      
 27 
     | 
    
         
            +
                    frozen = True
         
     | 
| 
      
 28 
     | 
    
         
            +
                    smart_union = True
         
     | 
| 
      
 29 
     | 
    
         
            +
                    extra = pydantic_v1.Extra.allow
         
     | 
| 
      
 30 
     | 
    
         
            +
                    json_encoders = {dt.datetime: serialize_datetime}
         
     | 
| 
         @@ -9,7 +9,7 @@ from .function_call import FunctionCall 
     | 
|
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
            class FunctionCallVariableValue(pydantic_v1.BaseModel):
         
     | 
| 
       12 
     | 
    
         
            -
                value: FunctionCall
         
     | 
| 
      
 12 
     | 
    
         
            +
                value: typing.Optional[FunctionCall] = None
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
                def json(self, **kwargs: typing.Any) -> str:
         
     | 
| 
       15 
15 
     | 
    
         
             
                    kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
         
     | 
| 
         @@ -8,9 +8,12 @@ from ..core.pydantic_utilities import pydantic_v1 
     | 
|
| 
       8 
8 
     | 
    
         
             
            from .function_call import FunctionCall
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
            class  
     | 
| 
       12 
     | 
    
         
            -
                 
     | 
| 
       13 
     | 
    
         
            -
                value 
     | 
| 
      
 11 
     | 
    
         
            +
            class FunctionCallVellumValue(pydantic_v1.BaseModel):
         
     | 
| 
      
 12 
     | 
    
         
            +
                """
         
     | 
| 
      
 13 
     | 
    
         
            +
                A value representing a Function Call.
         
     | 
| 
      
 14 
     | 
    
         
            +
                """
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                value: FunctionCall
         
     | 
| 
       14 
17 
     | 
    
         | 
| 
       15 
18 
     | 
    
         
             
                def json(self, **kwargs: typing.Any) -> str:
         
     | 
| 
       16 
19 
     | 
    
         
             
                    kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
         
     | 
| 
         @@ -0,0 +1,29 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # This file was auto-generated by Fern from our API Definition.
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            import datetime as dt
         
     | 
| 
      
 4 
     | 
    
         
            +
            import typing
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            from ..core.datetime_utils import serialize_datetime
         
     | 
| 
      
 7 
     | 
    
         
            +
            from ..core.pydantic_utilities import pydantic_v1
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            class JsonVellumValue(pydantic_v1.BaseModel):
         
     | 
| 
      
 11 
     | 
    
         
            +
                """
         
     | 
| 
      
 12 
     | 
    
         
            +
                A value representing a JSON object.
         
     | 
| 
      
 13 
     | 
    
         
            +
                """
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                value: typing.Optional[typing.Dict[str, typing.Any]] = None
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                def json(self, **kwargs: typing.Any) -> str:
         
     | 
| 
      
 18 
     | 
    
         
            +
                    kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
         
     | 
| 
      
 19 
     | 
    
         
            +
                    return super().json(**kwargs_with_defaults)
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]:
         
     | 
| 
      
 22 
     | 
    
         
            +
                    kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
         
     | 
| 
      
 23 
     | 
    
         
            +
                    return super().dict(**kwargs_with_defaults)
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                class Config:
         
     | 
| 
      
 26 
     | 
    
         
            +
                    frozen = True
         
     | 
| 
      
 27 
     | 
    
         
            +
                    smart_union = True
         
     | 
| 
      
 28 
     | 
    
         
            +
                    extra = pydantic_v1.Extra.allow
         
     | 
| 
      
 29 
     | 
    
         
            +
                    json_encoders = {dt.datetime: serialize_datetime}
         
     | 
| 
         @@ -6,11 +6,17 @@ import typing 
     | 
|
| 
       6 
6 
     | 
    
         
             
            from ..core.datetime_utils import serialize_datetime
         
     | 
| 
       7 
7 
     | 
    
         
             
            from ..core.pydantic_utilities import pydantic_v1
         
     | 
| 
       8 
8 
     | 
    
         
             
            from .array_variable_value_item import ArrayVariableValueItem
         
     | 
| 
      
 9 
     | 
    
         
            +
            from .workflow_node_result_event_state import WorkflowNodeResultEventState
         
     | 
| 
       9 
10 
     | 
    
         | 
| 
       10 
11 
     | 
    
         | 
| 
       11 
12 
     | 
    
         
             
            class NodeOutputCompiledArrayValue(pydantic_v1.BaseModel):
         
     | 
| 
       12 
     | 
    
         
            -
                 
     | 
| 
      
 13 
     | 
    
         
            +
                """
         
     | 
| 
      
 14 
     | 
    
         
            +
                An output returned by a node that is of type ARRAY.
         
     | 
| 
      
 15 
     | 
    
         
            +
                """
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
       13 
17 
     | 
    
         
             
                value: typing.Optional[typing.List[ArrayVariableValueItem]] = None
         
     | 
| 
      
 18 
     | 
    
         
            +
                node_output_id: str
         
     | 
| 
      
 19 
     | 
    
         
            +
                state: typing.Optional[WorkflowNodeResultEventState] = None
         
     | 
| 
       14 
20 
     | 
    
         | 
| 
       15 
21 
     | 
    
         
             
                def json(self, **kwargs: typing.Any) -> str:
         
     | 
| 
       16 
22 
     | 
    
         
             
                    kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
         
     | 
| 
         @@ -6,11 +6,17 @@ import typing 
     | 
|
| 
       6 
6 
     | 
    
         
             
            from ..core.datetime_utils import serialize_datetime
         
     | 
| 
       7 
7 
     | 
    
         
             
            from ..core.pydantic_utilities import pydantic_v1
         
     | 
| 
       8 
8 
     | 
    
         
             
            from .chat_message import ChatMessage
         
     | 
| 
      
 9 
     | 
    
         
            +
            from .workflow_node_result_event_state import WorkflowNodeResultEventState
         
     | 
| 
       9 
10 
     | 
    
         | 
| 
       10 
11 
     | 
    
         | 
| 
       11 
12 
     | 
    
         
             
            class NodeOutputCompiledChatHistoryValue(pydantic_v1.BaseModel):
         
     | 
| 
       12 
     | 
    
         
            -
                 
     | 
| 
      
 13 
     | 
    
         
            +
                """
         
     | 
| 
      
 14 
     | 
    
         
            +
                An output returned by a node that is of type CHAT_HISTORY.
         
     | 
| 
      
 15 
     | 
    
         
            +
                """
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
       13 
17 
     | 
    
         
             
                value: typing.Optional[typing.List[ChatMessage]] = None
         
     | 
| 
      
 18 
     | 
    
         
            +
                node_output_id: str
         
     | 
| 
      
 19 
     | 
    
         
            +
                state: typing.Optional[WorkflowNodeResultEventState] = None
         
     | 
| 
       14 
20 
     | 
    
         | 
| 
       15 
21 
     | 
    
         
             
                def json(self, **kwargs: typing.Any) -> str:
         
     | 
| 
       16 
22 
     | 
    
         
             
                    kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
         
     | 
| 
         @@ -6,11 +6,17 @@ import typing 
     | 
|
| 
       6 
6 
     | 
    
         
             
            from ..core.datetime_utils import serialize_datetime
         
     | 
| 
       7 
7 
     | 
    
         
             
            from ..core.pydantic_utilities import pydantic_v1
         
     | 
| 
       8 
8 
     | 
    
         
             
            from .vellum_error import VellumError
         
     | 
| 
      
 9 
     | 
    
         
            +
            from .workflow_node_result_event_state import WorkflowNodeResultEventState
         
     | 
| 
       9 
10 
     | 
    
         | 
| 
       10 
11 
     | 
    
         | 
| 
       11 
12 
     | 
    
         
             
            class NodeOutputCompiledErrorValue(pydantic_v1.BaseModel):
         
     | 
| 
       12 
     | 
    
         
            -
                 
     | 
| 
      
 13 
     | 
    
         
            +
                """
         
     | 
| 
      
 14 
     | 
    
         
            +
                An output returned by a node that is of type ERROR.
         
     | 
| 
      
 15 
     | 
    
         
            +
                """
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
       13 
17 
     | 
    
         
             
                value: typing.Optional[VellumError] = None
         
     | 
| 
      
 18 
     | 
    
         
            +
                node_output_id: str
         
     | 
| 
      
 19 
     | 
    
         
            +
                state: typing.Optional[WorkflowNodeResultEventState] = None
         
     | 
| 
       14 
20 
     | 
    
         | 
| 
       15 
21 
     | 
    
         
             
                def json(self, **kwargs: typing.Any) -> str:
         
     | 
| 
       16 
22 
     | 
    
         
             
                    kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
         
     | 
| 
         @@ -0,0 +1,33 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # This file was auto-generated by Fern from our API Definition.
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            import datetime as dt
         
     | 
| 
      
 4 
     | 
    
         
            +
            import typing
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            from ..core.datetime_utils import serialize_datetime
         
     | 
| 
      
 7 
     | 
    
         
            +
            from ..core.pydantic_utilities import pydantic_v1
         
     | 
| 
      
 8 
     | 
    
         
            +
            from .function_call import FunctionCall
         
     | 
| 
      
 9 
     | 
    
         
            +
            from .workflow_node_result_event_state import WorkflowNodeResultEventState
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            class NodeOutputCompiledFunctionCallValue(pydantic_v1.BaseModel):
         
     | 
| 
      
 13 
     | 
    
         
            +
                """
         
     | 
| 
      
 14 
     | 
    
         
            +
                An output returned by a node that is of type FUNCTION_CALL.
         
     | 
| 
      
 15 
     | 
    
         
            +
                """
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                value: typing.Optional[FunctionCall] = None
         
     | 
| 
      
 18 
     | 
    
         
            +
                node_output_id: str
         
     | 
| 
      
 19 
     | 
    
         
            +
                state: typing.Optional[WorkflowNodeResultEventState] = None
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                def json(self, **kwargs: typing.Any) -> str:
         
     | 
| 
      
 22 
     | 
    
         
            +
                    kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
         
     | 
| 
      
 23 
     | 
    
         
            +
                    return super().json(**kwargs_with_defaults)
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]:
         
     | 
| 
      
 26 
     | 
    
         
            +
                    kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
         
     | 
| 
      
 27 
     | 
    
         
            +
                    return super().dict(**kwargs_with_defaults)
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                class Config:
         
     | 
| 
      
 30 
     | 
    
         
            +
                    frozen = True
         
     | 
| 
      
 31 
     | 
    
         
            +
                    smart_union = True
         
     | 
| 
      
 32 
     | 
    
         
            +
                    extra = pydantic_v1.Extra.allow
         
     | 
| 
      
 33 
     | 
    
         
            +
                    json_encoders = {dt.datetime: serialize_datetime}
         
     | 
| 
         @@ -5,11 +5,17 @@ import typing 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            from ..core.datetime_utils import serialize_datetime
         
     | 
| 
       7 
7 
     | 
    
         
             
            from ..core.pydantic_utilities import pydantic_v1
         
     | 
| 
      
 8 
     | 
    
         
            +
            from .workflow_node_result_event_state import WorkflowNodeResultEventState
         
     | 
| 
       8 
9 
     | 
    
         | 
| 
       9 
10 
     | 
    
         | 
| 
       10 
11 
     | 
    
         
             
            class NodeOutputCompiledJsonValue(pydantic_v1.BaseModel):
         
     | 
| 
       11 
     | 
    
         
            -
                 
     | 
| 
      
 12 
     | 
    
         
            +
                """
         
     | 
| 
      
 13 
     | 
    
         
            +
                An output returned by a node that is of type JSON.
         
     | 
| 
      
 14 
     | 
    
         
            +
                """
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
       12 
16 
     | 
    
         
             
                value: typing.Optional[typing.Dict[str, typing.Any]] = None
         
     | 
| 
      
 17 
     | 
    
         
            +
                node_output_id: str
         
     | 
| 
      
 18 
     | 
    
         
            +
                state: typing.Optional[WorkflowNodeResultEventState] = None
         
     | 
| 
       13 
19 
     | 
    
         | 
| 
       14 
20 
     | 
    
         
             
                def json(self, **kwargs: typing.Any) -> str:
         
     | 
| 
       15 
21 
     | 
    
         
             
                    kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
         
     | 
| 
         @@ -5,11 +5,17 @@ import typing 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            from ..core.datetime_utils import serialize_datetime
         
     | 
| 
       7 
7 
     | 
    
         
             
            from ..core.pydantic_utilities import pydantic_v1
         
     | 
| 
      
 8 
     | 
    
         
            +
            from .workflow_node_result_event_state import WorkflowNodeResultEventState
         
     | 
| 
       8 
9 
     | 
    
         | 
| 
       9 
10 
     | 
    
         | 
| 
       10 
11 
     | 
    
         
             
            class NodeOutputCompiledNumberValue(pydantic_v1.BaseModel):
         
     | 
| 
       11 
     | 
    
         
            -
                 
     | 
| 
      
 12 
     | 
    
         
            +
                """
         
     | 
| 
      
 13 
     | 
    
         
            +
                An output returned by a node that is of type NUMBER.
         
     | 
| 
      
 14 
     | 
    
         
            +
                """
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
       12 
16 
     | 
    
         
             
                value: typing.Optional[float] = None
         
     | 
| 
      
 17 
     | 
    
         
            +
                node_output_id: str
         
     | 
| 
      
 18 
     | 
    
         
            +
                state: typing.Optional[WorkflowNodeResultEventState] = None
         
     | 
| 
       13 
19 
     | 
    
         | 
| 
       14 
20 
     | 
    
         
             
                def json(self, **kwargs: typing.Any) -> str:
         
     | 
| 
       15 
21 
     | 
    
         
             
                    kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
         
     | 
| 
         @@ -6,11 +6,17 @@ import typing 
     | 
|
| 
       6 
6 
     | 
    
         
             
            from ..core.datetime_utils import serialize_datetime
         
     | 
| 
       7 
7 
     | 
    
         
             
            from ..core.pydantic_utilities import pydantic_v1
         
     | 
| 
       8 
8 
     | 
    
         
             
            from .search_result import SearchResult
         
     | 
| 
      
 9 
     | 
    
         
            +
            from .workflow_node_result_event_state import WorkflowNodeResultEventState
         
     | 
| 
       9 
10 
     | 
    
         | 
| 
       10 
11 
     | 
    
         | 
| 
       11 
12 
     | 
    
         
             
            class NodeOutputCompiledSearchResultsValue(pydantic_v1.BaseModel):
         
     | 
| 
       12 
     | 
    
         
            -
                 
     | 
| 
      
 13 
     | 
    
         
            +
                """
         
     | 
| 
      
 14 
     | 
    
         
            +
                An output returned by a node that is of type SEARCH_RESULTS.
         
     | 
| 
      
 15 
     | 
    
         
            +
                """
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
       13 
17 
     | 
    
         
             
                value: typing.Optional[typing.List[SearchResult]] = None
         
     | 
| 
      
 18 
     | 
    
         
            +
                node_output_id: str
         
     | 
| 
      
 19 
     | 
    
         
            +
                state: typing.Optional[WorkflowNodeResultEventState] = None
         
     | 
| 
       14 
20 
     | 
    
         | 
| 
       15 
21 
     | 
    
         
             
                def json(self, **kwargs: typing.Any) -> str:
         
     | 
| 
       16 
22 
     | 
    
         
             
                    kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
         
     | 
| 
         @@ -5,11 +5,17 @@ import typing 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            from ..core.datetime_utils import serialize_datetime
         
     | 
| 
       7 
7 
     | 
    
         
             
            from ..core.pydantic_utilities import pydantic_v1
         
     | 
| 
      
 8 
     | 
    
         
            +
            from .workflow_node_result_event_state import WorkflowNodeResultEventState
         
     | 
| 
       8 
9 
     | 
    
         | 
| 
       9 
10 
     | 
    
         | 
| 
       10 
11 
     | 
    
         
             
            class NodeOutputCompiledStringValue(pydantic_v1.BaseModel):
         
     | 
| 
       11 
     | 
    
         
            -
                 
     | 
| 
      
 12 
     | 
    
         
            +
                """
         
     | 
| 
      
 13 
     | 
    
         
            +
                An output returned by a node that is of type STRING.
         
     | 
| 
      
 14 
     | 
    
         
            +
                """
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
       12 
16 
     | 
    
         
             
                value: typing.Optional[str] = None
         
     | 
| 
      
 17 
     | 
    
         
            +
                node_output_id: str
         
     | 
| 
      
 18 
     | 
    
         
            +
                state: typing.Optional[WorkflowNodeResultEventState] = None
         
     | 
| 
       13 
19 
     | 
    
         | 
| 
       14 
20 
     | 
    
         
             
                def json(self, **kwargs: typing.Any) -> str:
         
     | 
| 
       15 
21 
     | 
    
         
             
                    kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
         
     | 
| 
         @@ -7,7 +7,7 @@ import typing 
     | 
|
| 
       7 
7 
     | 
    
         
             
            from .node_output_compiled_array_value import NodeOutputCompiledArrayValue
         
     | 
| 
       8 
8 
     | 
    
         
             
            from .node_output_compiled_chat_history_value import NodeOutputCompiledChatHistoryValue
         
     | 
| 
       9 
9 
     | 
    
         
             
            from .node_output_compiled_error_value import NodeOutputCompiledErrorValue
         
     | 
| 
       10 
     | 
    
         
            -
            from . 
     | 
| 
      
 10 
     | 
    
         
            +
            from .node_output_compiled_function_call_value import NodeOutputCompiledFunctionCallValue
         
     | 
| 
       11 
11 
     | 
    
         
             
            from .node_output_compiled_json_value import NodeOutputCompiledJsonValue
         
     | 
| 
       12 
12 
     | 
    
         
             
            from .node_output_compiled_number_value import NodeOutputCompiledNumberValue
         
     | 
| 
       13 
13 
     | 
    
         
             
            from .node_output_compiled_search_results_value import NodeOutputCompiledSearchResultsValue
         
     | 
| 
         @@ -84,7 +84,7 @@ class NodeOutputCompiledValue_Array(NodeOutputCompiledArrayValue): 
     | 
|
| 
       84 
84 
     | 
    
         
             
                    populate_by_name = True
         
     | 
| 
       85 
85 
     | 
    
         | 
| 
       86 
86 
     | 
    
         | 
| 
       87 
     | 
    
         
            -
            class NodeOutputCompiledValue_FunctionCall( 
     | 
| 
      
 87 
     | 
    
         
            +
            class NodeOutputCompiledValue_FunctionCall(NodeOutputCompiledFunctionCallValue):
         
     | 
| 
       88 
88 
     | 
    
         
             
                type: typing.Literal["FUNCTION_CALL"] = "FUNCTION_CALL"
         
     | 
| 
       89 
89 
     | 
    
         | 
| 
       90 
90 
     | 
    
         
             
                class Config:
         
     | 
    
        vellum/types/prompt_output.py
    CHANGED
    
    | 
         @@ -4,13 +4,13 @@ from __future__ import annotations 
     | 
|
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            import typing
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
            from . 
     | 
| 
       8 
     | 
    
         
            -
            from . 
     | 
| 
       9 
     | 
    
         
            -
            from . 
     | 
| 
       10 
     | 
    
         
            -
            from . 
     | 
| 
      
 7 
     | 
    
         
            +
            from .error_vellum_value import ErrorVellumValue
         
     | 
| 
      
 8 
     | 
    
         
            +
            from .function_call_vellum_value import FunctionCallVellumValue
         
     | 
| 
      
 9 
     | 
    
         
            +
            from .json_vellum_value import JsonVellumValue
         
     | 
| 
      
 10 
     | 
    
         
            +
            from .string_vellum_value import StringVellumValue
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
            class PromptOutput_String( 
     | 
| 
      
 13 
     | 
    
         
            +
            class PromptOutput_String(StringVellumValue):
         
     | 
| 
       14 
14 
     | 
    
         
             
                type: typing.Literal["STRING"] = "STRING"
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
                class Config:
         
     | 
| 
         @@ -20,7 +20,7 @@ class PromptOutput_String(StringVariableValue): 
     | 
|
| 
       20 
20 
     | 
    
         
             
                    populate_by_name = True
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
            class PromptOutput_Json( 
     | 
| 
      
 23 
     | 
    
         
            +
            class PromptOutput_Json(JsonVellumValue):
         
     | 
| 
       24 
24 
     | 
    
         
             
                type: typing.Literal["JSON"] = "JSON"
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
26 
     | 
    
         
             
                class Config:
         
     | 
| 
         @@ -30,7 +30,7 @@ class PromptOutput_Json(JsonVariableValue): 
     | 
|
| 
       30 
30 
     | 
    
         
             
                    populate_by_name = True
         
     | 
| 
       31 
31 
     | 
    
         | 
| 
       32 
32 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
            class PromptOutput_Error( 
     | 
| 
      
 33 
     | 
    
         
            +
            class PromptOutput_Error(ErrorVellumValue):
         
     | 
| 
       34 
34 
     | 
    
         
             
                type: typing.Literal["ERROR"] = "ERROR"
         
     | 
| 
       35 
35 
     | 
    
         | 
| 
       36 
36 
     | 
    
         
             
                class Config:
         
     | 
| 
         @@ -40,7 +40,7 @@ class PromptOutput_Error(ErrorVariableValue): 
     | 
|
| 
       40 
40 
     | 
    
         
             
                    populate_by_name = True
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
       42 
42 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
            class PromptOutput_FunctionCall( 
     | 
| 
      
 43 
     | 
    
         
            +
            class PromptOutput_FunctionCall(FunctionCallVellumValue):
         
     | 
| 
       44 
44 
     | 
    
         
             
                type: typing.Literal["FUNCTION_CALL"] = "FUNCTION_CALL"
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
46 
     | 
    
         
             
                class Config:
         
     | 
| 
         @@ -0,0 +1,29 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # This file was auto-generated by Fern from our API Definition.
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            import datetime as dt
         
     | 
| 
      
 4 
     | 
    
         
            +
            import typing
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            from ..core.datetime_utils import serialize_datetime
         
     | 
| 
      
 7 
     | 
    
         
            +
            from ..core.pydantic_utilities import pydantic_v1
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            class StringVellumValue(pydantic_v1.BaseModel):
         
     | 
| 
      
 11 
     | 
    
         
            +
                """
         
     | 
| 
      
 12 
     | 
    
         
            +
                A value representing a string.
         
     | 
| 
      
 13 
     | 
    
         
            +
                """
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                value: typing.Optional[str] = None
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                def json(self, **kwargs: typing.Any) -> str:
         
     | 
| 
      
 18 
     | 
    
         
            +
                    kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
         
     | 
| 
      
 19 
     | 
    
         
            +
                    return super().json(**kwargs_with_defaults)
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]:
         
     | 
| 
      
 22 
     | 
    
         
            +
                    kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
         
     | 
| 
      
 23 
     | 
    
         
            +
                    return super().dict(**kwargs_with_defaults)
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                class Config:
         
     | 
| 
      
 26 
     | 
    
         
            +
                    frozen = True
         
     | 
| 
      
 27 
     | 
    
         
            +
                    smart_union = True
         
     | 
| 
      
 28 
     | 
    
         
            +
                    extra = pydantic_v1.Extra.allow
         
     | 
| 
      
 29 
     | 
    
         
            +
                    json_encoders = {dt.datetime: serialize_datetime}
         
     | 
| 
         @@ -1,8 +1,8 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            vellum/__init__.py,sha256= 
     | 
| 
      
 1 
     | 
    
         
            +
            vellum/__init__.py,sha256=2ostXxge8NAc5scrfOy_CJzYTDB3vZ-UqMc6C1_QDb4,35797
         
     | 
| 
       2 
2 
     | 
    
         
             
            vellum/client.py,sha256=7JaU104s0u_WhB8QAqIZcMv9IyvU-a0nKVZhTPKiEpw,97089
         
     | 
| 
       3 
3 
     | 
    
         
             
            vellum/core/__init__.py,sha256=1pNSKkwyQvMl_F0wohBqmoQAITptg3zlvCwsoSSzy7c,853
         
     | 
| 
       4 
4 
     | 
    
         
             
            vellum/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
         
     | 
| 
       5 
     | 
    
         
            -
            vellum/core/client_wrapper.py,sha256= 
     | 
| 
      
 5 
     | 
    
         
            +
            vellum/core/client_wrapper.py,sha256=C_FHM-HHkz96oVY21a1pLVEWqbSwaz0w-rVEwzOUL4E,1697
         
     | 
| 
       6 
6 
     | 
    
         
             
            vellum/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
         
     | 
| 
       7 
7 
     | 
    
         
             
            vellum/core/file.py,sha256=sy1RUGZ3aJYuw998bZytxxo6QdgKmlnlgBaMvwEKCGg,1480
         
     | 
| 
       8 
8 
     | 
    
         
             
            vellum/core/http_client.py,sha256=5ok6hqgZDJhg57EHvMnr0BBaHdG50QxFPKaCZ9aVWTc,5059
         
     | 
| 
         @@ -20,11 +20,11 @@ vellum/lib/__init__.py,sha256=KTSY0V59WEOr5uNyAei1dDfaAatyXw_Aca5kNjo5mY0,79 
     | 
|
| 
       20 
20 
     | 
    
         
             
            vellum/lib/test_suites/__init__.py,sha256=hNsLoHSykqXDJP-MwFvu2lExImxo9KEyEJjt_fdAzpE,77
         
     | 
| 
       21 
21 
     | 
    
         
             
            vellum/lib/test_suites/constants.py,sha256=Vteml4_csZsMgo_q3-71E3JRCAoN6308TXLu5nfLhmU,116
         
     | 
| 
       22 
22 
     | 
    
         
             
            vellum/lib/test_suites/exceptions.py,sha256=6Xacoyv43fJvVf6Dt6Io5a-f9vF12Tx51jzsQRNSqhY,56
         
     | 
| 
       23 
     | 
    
         
            -
            vellum/lib/test_suites/resources.py,sha256= 
     | 
| 
      
 23 
     | 
    
         
            +
            vellum/lib/test_suites/resources.py,sha256=hokRS0_wT6IdA_6HkWbrh7iFzFxCtiy8JXbUiGtlwRk,12323
         
     | 
| 
       24 
24 
     | 
    
         
             
            vellum/lib/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         
     | 
| 
       25 
     | 
    
         
            -
            vellum/lib/utils/env.py,sha256= 
     | 
| 
       26 
     | 
    
         
            -
            vellum/lib/utils/exceptions.py,sha256= 
     | 
| 
       27 
     | 
    
         
            -
            vellum/lib/utils/paginator.py,sha256= 
     | 
| 
      
 25 
     | 
    
         
            +
            vellum/lib/utils/env.py,sha256=ySl859lYBfls8hmlaU_RFdquHa_A_7SzaC6KEdFqh1Y,298
         
     | 
| 
      
 26 
     | 
    
         
            +
            vellum/lib/utils/exceptions.py,sha256=dXMAkzqbHV_AP5FjjbegPlfUE0zQDlpA3qOsoOJUxfg,49
         
     | 
| 
      
 27 
     | 
    
         
            +
            vellum/lib/utils/paginator.py,sha256=yDvgehocYBDclLt5SewZH4hCIyq0yLHdBzkyPCoYPjs,698
         
     | 
| 
       28 
28 
     | 
    
         
             
            vellum/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         
     | 
| 
       29 
29 
     | 
    
         
             
            vellum/resources/__init__.py,sha256=pqoVsVVIrUG-v6yt4AMtc7F5O-K7wKlvqhQeht9-Ax4,730
         
     | 
| 
       30 
30 
     | 
    
         
             
            vellum/resources/deployments/__init__.py,sha256=AE0TcFwLrLBljM0ZDX-pPw4Kqt-1f5JDpIok2HS80QI,157
         
     | 
| 
         @@ -58,7 +58,7 @@ vellum/terraform/document_index/__init__.py,sha256=qq2zENI22bUvqGk_a1lmsoTr5O_xC 
     | 
|
| 
       58 
58 
     | 
    
         
             
            vellum/terraform/provider/__init__.py,sha256=K1yLlTZkYBxhD4bhUV1v23hxDGgbfsAIGsSyeB54dNQ,10298
         
     | 
| 
       59 
59 
     | 
    
         
             
            vellum/terraform/py.typed,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
         
     | 
| 
       60 
60 
     | 
    
         
             
            vellum/terraform/versions.json,sha256=STW6Mg3BKDacFmbWHXziHxE90GWncZf4AIzCLiXm_7o,56
         
     | 
| 
       61 
     | 
    
         
            -
            vellum/types/__init__.py,sha256= 
     | 
| 
      
 61 
     | 
    
         
            +
            vellum/types/__init__.py,sha256=m1fh7wzVhKpXcxYmWjnmo78UxekJQh30pCrNjwHAXyA,47652
         
     | 
| 
       62 
62 
     | 
    
         
             
            vellum/types/api_node_result.py,sha256=SvYIi1T-N_P3FVjzv9I91PaCT0IN958A3easp5Q7jqE,983
         
     | 
| 
       63 
63 
     | 
    
         
             
            vellum/types/api_node_result_data.py,sha256=KFBmmizcEg73GwQMXUtEdJ4e9YGFpRLYAnalwxIcDug,1161
         
     | 
| 
       64 
64 
     | 
    
         
             
            vellum/types/array_chat_message_content.py,sha256=vWO6D2eUf9N5wWvu3WPgLIdoKVRWa0tIV8UmGRbgW3c,1030
         
     | 
| 
         @@ -99,6 +99,7 @@ vellum/types/entity_status.py,sha256=bY0jEpISwXqFnbWd3PSb3yXEr-ounPXlAO_fyvHV7l8 
     | 
|
| 
       99 
99 
     | 
    
         
             
            vellum/types/environment_enum.py,sha256=Wcewxp1cpGAMDIAZbTp4Y0GGfvy2Bq_Qu_67f_wBDGA,179
         
     | 
| 
       100 
100 
     | 
    
         
             
            vellum/types/error_enum.py,sha256=HF_ubfzqmFQN3vVCDFZALADjHFRChuvkU_-zqjxa3ns,116
         
     | 
| 
       101 
101 
     | 
    
         
             
            vellum/types/error_variable_value.py,sha256=x5t2f3jk5zC6KyXYpk_ZgKv_lIRq_-P5hahou9Lohb0,926
         
     | 
| 
      
 102 
     | 
    
         
            +
            vellum/types/error_vellum_value.py,sha256=LhArYgM0L1o1BkCl_Oym9R1dwRP24lxa_5kEEmTes7w,976
         
     | 
| 
       102 
103 
     | 
    
         
             
            vellum/types/execute_prompt_api_error_response.py,sha256=-RA-JhnAyj8_L9zNOCy4RsmmNwsldmIhTo-_mjHX60s,948
         
     | 
| 
       103 
104 
     | 
    
         
             
            vellum/types/execute_prompt_event.py,sha256=WBKdWBRgtDYoxMbHC7FjCjCxxTuOgjINonDYQITD1-4,1636
         
     | 
| 
       104 
105 
     | 
    
         
             
            vellum/types/execute_prompt_response.py,sha256=HHD1EoPDz78OQA8XYcsopklbzk0fVYk-rXwjwW19n6M,914
         
     | 
| 
         @@ -132,7 +133,8 @@ vellum/types/function_call_chat_message_content_request.py,sha256=UOtsUEmAQ66-Un 
     | 
|
| 
       132 
133 
     | 
    
         
             
            vellum/types/function_call_chat_message_content_value.py,sha256=sckkwTHSa8nvpjvk5Wj9sQ2Ml4AI5UoB6Fj0TJM8Xcg,1013
         
     | 
| 
       133 
134 
     | 
    
         
             
            vellum/types/function_call_chat_message_content_value_request.py,sha256=UJPQxmhOtbqGSt1-FfVmNHJG6VsKufu8H9ecStqU5aA,1020
         
     | 
| 
       134 
135 
     | 
    
         
             
            vellum/types/function_call_enum.py,sha256=QK__nqbfcaPx1d6paBAoCFth7mWOStqgutY3MIit_cE,131
         
     | 
| 
       135 
     | 
    
         
            -
            vellum/types/function_call_variable_value.py,sha256= 
     | 
| 
      
 136 
     | 
    
         
            +
            vellum/types/function_call_variable_value.py,sha256=3XFxR5zkeo4sc7fB_ot6x6fFT_QC4QKYC9c0cCQENlI,936
         
     | 
| 
      
 137 
     | 
    
         
            +
            vellum/types/function_call_vellum_value.py,sha256=osdRV9vw_45RafoBZEqInDitGQcxft4eIXcpfAmF1kw,969
         
     | 
| 
       136 
138 
     | 
    
         
             
            vellum/types/generate_error_response.py,sha256=Zrnq_Acm_2CfmZkZ60Axgw_uUISOjd6tbJBIkFuj2U0,940
         
     | 
| 
       137 
139 
     | 
    
         
             
            vellum/types/generate_options_request.py,sha256=SD-39FB3py_HAZzMTaFyNeDRG0QbPPnayKICo2p9fTk,1079
         
     | 
| 
       138 
140 
     | 
    
         
             
            vellum/types/generate_request.py,sha256=PdbtFLB-RfFJatIIB_b1prMWks-LSxChbXVszMIPIuw,1572
         
     | 
| 
         @@ -155,6 +157,7 @@ vellum/types/initiated_workflow_node_result_event.py,sha256=21Q_wO3U1qbYuNUAWBaX 
     | 
|
| 
       155 
157 
     | 
    
         
             
            vellum/types/json_enum.py,sha256=0Se0lTWxLGQe-JdQ8E9KwFt5NWXuI7BkOdWQcFKJg-8,114
         
     | 
| 
       156 
158 
     | 
    
         
             
            vellum/types/json_input_request.py,sha256=fpBb3QS-E0a3hZU_mHZ5Yjkwr10-qqbQoMJbfhfGu_4,1048
         
     | 
| 
       157 
159 
     | 
    
         
             
            vellum/types/json_variable_value.py,sha256=KdKz67NgVwVHpxXFgSxFPBeGBdjzTwZ_VKe22kcaWjo,904
         
     | 
| 
      
 160 
     | 
    
         
            +
            vellum/types/json_vellum_value.py,sha256=c_fKVj3ZnjacNEGW8keuoSfsNs7MBSH7PkTNxZuWU4M,959
         
     | 
| 
       158 
161 
     | 
    
         
             
            vellum/types/logical_operator.py,sha256=MuuMZ1-gOCDvy1WDQkMFfiBNHsRCqKgJei-b3727sKc,487
         
     | 
| 
       159 
162 
     | 
    
         
             
            vellum/types/logprobs_enum.py,sha256=D_458cZX2CAb6dX_ovrQ6HARlJkYcZRadKwsi1Cr-JM,151
         
     | 
| 
       160 
163 
     | 
    
         
             
            vellum/types/metadata_filter_config_request.py,sha256=_1CVIxmDmtXezTMWoaqeea9boe8hyCmmAn28u69NEUk,1355
         
     | 
| 
         @@ -189,15 +192,15 @@ vellum/types/node_input_compiled_number_value.py,sha256=Kpxo7ryDiOxylmzF1pz6jups 
     | 
|
| 
       189 
192 
     | 
    
         
             
            vellum/types/node_input_compiled_search_results_value.py,sha256=ejJuUB42LO9l-E12uKa0Ezk_T0nP6q023uuqDEqN4TU,995
         
     | 
| 
       190 
193 
     | 
    
         
             
            vellum/types/node_input_compiled_string_value.py,sha256=cEssxmVjvY5SG2OINLYdw8pJPIJrKdEvdUgkU0xz_9k,926
         
     | 
| 
       191 
194 
     | 
    
         
             
            vellum/types/node_input_variable_compiled_value.py,sha256=iXSNb6wRYmPOOzQZk8AWB929hedtL_NwFox17MjMT4w,3354
         
     | 
| 
       192 
     | 
    
         
            -
            vellum/types/node_output_compiled_array_value.py,sha256= 
     | 
| 
       193 
     | 
    
         
            -
            vellum/types/node_output_compiled_chat_history_value.py,sha256= 
     | 
| 
       194 
     | 
    
         
            -
            vellum/types/node_output_compiled_error_value.py,sha256= 
     | 
| 
       195 
     | 
    
         
            -
            vellum/types/ 
     | 
| 
       196 
     | 
    
         
            -
            vellum/types/node_output_compiled_json_value.py,sha256= 
     | 
| 
       197 
     | 
    
         
            -
            vellum/types/node_output_compiled_number_value.py,sha256= 
     | 
| 
       198 
     | 
    
         
            -
            vellum/types/node_output_compiled_search_results_value.py,sha256= 
     | 
| 
       199 
     | 
    
         
            -
            vellum/types/node_output_compiled_string_value.py,sha256= 
     | 
| 
       200 
     | 
    
         
            -
            vellum/types/node_output_compiled_value.py,sha256= 
     | 
| 
      
 195 
     | 
    
         
            +
            vellum/types/node_output_compiled_array_value.py,sha256=k0K0jLaKV5383hrx1CX_Lxg4bQLGIcdNvojAXqqWt8Y,1220
         
     | 
| 
      
 196 
     | 
    
         
            +
            vellum/types/node_output_compiled_chat_history_value.py,sha256=G4uyylyx4pe9wroMruPaw8kFOmwVEzVCGl0xFRd3S_w,1198
         
     | 
| 
      
 197 
     | 
    
         
            +
            vellum/types/node_output_compiled_error_value.py,sha256=Y9Zk8yJ5HXhNyDb2-iSW5RnTSxDIuLHCgqtt9-1CIkE,1172
         
     | 
| 
      
 198 
     | 
    
         
            +
            vellum/types/node_output_compiled_function_call_value.py,sha256=-zKACRAG0jNpVWv4wRpJwi4BCoI368C0fglgEmKbnY0,1190
         
     | 
| 
      
 199 
     | 
    
         
            +
            vellum/types/node_output_compiled_json_value.py,sha256=W8Y4zWV5fYpvdlYUKWHtd3ytH8UbdvuyaU5CZWRTexs,1149
         
     | 
| 
      
 200 
     | 
    
         
            +
            vellum/types/node_output_compiled_number_value.py,sha256=dZxIdYaqfgM91CcSdqzIFA8_-WDPgCbicNh7FGhVxlk,1130
         
     | 
| 
      
 201 
     | 
    
         
            +
            vellum/types/node_output_compiled_search_results_value.py,sha256=70JslI-j54Q0BmNhbwWuaLQkvDYggCcZ3pA2E03qfzg,1205
         
     | 
| 
      
 202 
     | 
    
         
            +
            vellum/types/node_output_compiled_string_value.py,sha256=Ur9u-NZF9QHZSmXyXfyOSJopPW10u5J9idETLPn3b74,1128
         
     | 
| 
      
 203 
     | 
    
         
            +
            vellum/types/node_output_compiled_value.py,sha256=iTvpjsz9EaahCHrW64awCN7cRo31gsLTXzx36LvHyB4,3275
         
     | 
| 
       201 
204 
     | 
    
         
             
            vellum/types/normalized_log_probs.py,sha256=LN6Ap1sDIZ5KZ_F6Xxc89SFAoLlV6sqPjju78wstEVg,1000
         
     | 
| 
       202 
205 
     | 
    
         
             
            vellum/types/normalized_token_log_probs.py,sha256=-PYJPYzykDfG9aeXqRselY8XHdIvr0K1s6qnecPCB-k,1008
         
     | 
| 
       203 
206 
     | 
    
         
             
            vellum/types/number_enum.py,sha256=M_h5PmC5HxQYpQbfqqyw1DualhKu1QOCU-o1NYTQz_o,118
         
     | 
| 
         @@ -215,7 +218,7 @@ vellum/types/prompt_deployment_input_request.py,sha256=o8PCi7TsitddNxiAfDblxaXkJ 
     | 
|
| 
       215 
218 
     | 
    
         
             
            vellum/types/prompt_execution_meta.py,sha256=io92vwMO3qC7RsCIsyMPFEeY3Sizb2xv6X1TBwKu6eI,1370
         
     | 
| 
       216 
219 
     | 
    
         
             
            vellum/types/prompt_node_result.py,sha256=BVRnp6zIKocaPquCln0UtqW2M18j8k_OnHLGWCB25hU,997
         
     | 
| 
       217 
220 
     | 
    
         
             
            vellum/types/prompt_node_result_data.py,sha256=WaKh-Nh3vVklvitT3WxwVeMGt0VxAoeypDDW4gvcMpY,988
         
     | 
| 
       218 
     | 
    
         
            -
            vellum/types/prompt_output.py,sha256= 
     | 
| 
      
 221 
     | 
    
         
            +
            vellum/types/prompt_output.py,sha256=wO0lz1HmPctCMt9lGLTsJRkL20wMXfmya5CxRhakOxU,1418
         
     | 
| 
       219 
222 
     | 
    
         
             
            vellum/types/raw_prompt_execution_overrides_request.py,sha256=Hwfjk35PsGSqMfcRwBzwjfpaRiaixTVi8xsG9g9pV3E,1210
         
     | 
| 
       220 
223 
     | 
    
         
             
            vellum/types/rejected_enum.py,sha256=ZatbMUdJos2j62CSK7lf2Pzv5xIh92XzRbzcsyc6NJg,122
         
     | 
| 
       221 
224 
     | 
    
         
             
            vellum/types/rejected_execute_prompt_event.py,sha256=2giB2PrFd7i2eL3moa9FpGkA4BcR1_gXqnJ9Y5XVmeQ,1159
         
     | 
| 
         @@ -254,6 +257,7 @@ vellum/types/string_chat_message_content_request.py,sha256=veTDkbJ39AfdxLUZ1MQPm 
     | 
|
| 
       254 
257 
     | 
    
         
             
            vellum/types/string_enum.py,sha256=8uLrjmZyaGRDEf7Y6DpJF1e4abJct69wIoq6ZQX6F-s,118
         
     | 
| 
       255 
258 
     | 
    
         
             
            vellum/types/string_input_request.py,sha256=2c7ZbrA2r_Au12O-LnfMwY-5rQKzAqQkLVu-jc-qjTI,1026
         
     | 
| 
       256 
259 
     | 
    
         
             
            vellum/types/string_variable_value.py,sha256=YGjpJpTVnxywk0mtXisQw8BkIfTS_amY4JPugLQ6dW0,881
         
     | 
| 
      
 260 
     | 
    
         
            +
            vellum/types/string_vellum_value.py,sha256=UCk0yx0DHUrANEp-rPsXO34dUNRWuzQPcSR2BsVPnlU,931
         
     | 
| 
       257 
261 
     | 
    
         
             
            vellum/types/submit_completion_actual_request.py,sha256=D3JNFxE8DHJP7RaSQjDBsJiacOwsd3I8r6-peyNDES0,1825
         
     | 
| 
       258 
262 
     | 
    
         
             
            vellum/types/submit_completion_actuals_error_response.py,sha256=f2XlGM5NBdwZLy4oOJN9LrcaHwW31fGtTCmzcJVzUV4,875
         
     | 
| 
       259 
263 
     | 
    
         
             
            vellum/types/submit_workflow_execution_actual_request.py,sha256=zR5Di5a9GC2fchGC9qLEXGELitg3UxCoQUqeIyeyLDc,1487
         
     | 
| 
         @@ -376,7 +380,7 @@ vellum/types/workflow_result_event_output_data_search_results.py,sha256=gazaUrC5 
     | 
|
| 
       376 
380 
     | 
    
         
             
            vellum/types/workflow_result_event_output_data_string.py,sha256=aVWIIGbLj4TJJhTTj6WzhbYXQkcZatKuhhNy8UYwXbw,1482
         
     | 
| 
       377 
381 
     | 
    
         
             
            vellum/types/workflow_stream_event.py,sha256=KA6Bkk_XA6AIPWR-1vKnwF1A8l_Bm5y0arQCWWWRpsk,911
         
     | 
| 
       378 
382 
     | 
    
         
             
            vellum/version.py,sha256=neLt8HBHHUtDF9M5fsyUzHT-pKooEPvceaLDqqIGb0s,77
         
     | 
| 
       379 
     | 
    
         
            -
            vellum_ai-0.5. 
     | 
| 
       380 
     | 
    
         
            -
            vellum_ai-0.5. 
     | 
| 
       381 
     | 
    
         
            -
            vellum_ai-0.5. 
     | 
| 
       382 
     | 
    
         
            -
            vellum_ai-0.5. 
     | 
| 
      
 383 
     | 
    
         
            +
            vellum_ai-0.5.2.dist-info/LICENSE,sha256=CcaljEIoOBaU-wItPH4PmM_mDCGpyuUY0Er1BGu5Ti8,1073
         
     | 
| 
      
 384 
     | 
    
         
            +
            vellum_ai-0.5.2.dist-info/METADATA,sha256=eZs04Vzi6mhgnm2pqE2oG5qCcUS5UENyDq5gyKA0LV8,3549
         
     | 
| 
      
 385 
     | 
    
         
            +
            vellum_ai-0.5.2.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
         
     | 
| 
      
 386 
     | 
    
         
            +
            vellum_ai-0.5.2.dist-info/RECORD,,
         
     | 
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     |