beamlit 0.0.33rc49__py3-none-any.whl → 0.0.34__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.
- beamlit/agents/__init__.py +2 -1
- beamlit/agents/chat.py +16 -4
- beamlit/agents/decorator.py +68 -155
- beamlit/agents/thread.py +14 -0
- beamlit/api/workspaces/workspace_quotas_request.py +97 -0
- beamlit/authentication/clientcredentials.py +5 -3
- beamlit/authentication/device_mode.py +4 -4
- beamlit/common/__init__.py +1 -2
- beamlit/common/instrumentation.py +202 -34
- beamlit/common/settings.py +7 -64
- beamlit/deploy/deploy.py +64 -60
- beamlit/deploy/format.py +10 -0
- beamlit/functions/__init__.py +2 -2
- beamlit/functions/decorator.py +149 -1
- beamlit/functions/github/github.py +0 -1
- beamlit/models/__init__.py +51 -11
- beamlit/models/agent.py +27 -15
- beamlit/models/agent_metadata.py +1 -1
- beamlit/models/agent_render.py +45 -0
- beamlit/models/agent_spec.py +32 -5
- beamlit/models/core_event.py +88 -0
- beamlit/models/core_spec.py +14 -5
- beamlit/models/core_spec_configurations.py +1 -1
- beamlit/models/core_status.py +3 -20
- beamlit/models/environment.py +2 -2
- beamlit/models/environment_metadata.py +1 -1
- beamlit/models/function.py +27 -15
- beamlit/models/function_metadata.py +1 -1
- beamlit/models/function_render.py +45 -0
- beamlit/models/function_spec.py +14 -5
- beamlit/models/histogram_bucket.py +79 -0
- beamlit/models/histogram_stats.py +88 -0
- beamlit/models/increase_and_rate_metric.py +0 -9
- beamlit/models/integration_connection.py +2 -2
- beamlit/models/integration_connection_spec.py +11 -2
- beamlit/models/integration_repository.py +88 -0
- beamlit/models/last_n_requests_metric.py +88 -0
- beamlit/models/latency_metric.py +124 -0
- beamlit/models/metadata.py +1 -1
- beamlit/models/metric.py +18 -9
- beamlit/models/metrics.py +81 -46
- beamlit/models/metrics_models.py +45 -0
- beamlit/models/metrics_request_total_per_code.py +45 -0
- beamlit/models/metrics_rps_per_code.py +45 -0
- beamlit/models/model.py +27 -15
- beamlit/models/model_metadata.py +1 -1
- beamlit/models/model_provider.py +2 -2
- beamlit/models/model_render.py +45 -0
- beamlit/models/model_spec.py +14 -14
- beamlit/models/pending_invitation_accept.py +1 -1
- beamlit/models/pending_invitation_render.py +3 -3
- beamlit/models/policy.py +2 -2
- beamlit/models/provider_config.py +1 -1
- beamlit/models/repository.py +70 -0
- beamlit/models/repository_type_0.py +70 -0
- beamlit/models/request_duration_over_time_metric.py +97 -0
- beamlit/models/request_duration_over_time_metrics.py +74 -0
- beamlit/models/request_total_by_origin_metric.py +103 -0
- beamlit/models/request_total_by_origin_metric_request_total_by_origin.py +45 -0
- beamlit/models/request_total_by_origin_metric_request_total_by_origin_and_code.py +45 -0
- beamlit/models/request_total_metric.py +115 -0
- beamlit/models/request_total_metric_request_total_per_code.py +45 -0
- beamlit/models/request_total_metric_rps_per_code.py +45 -0
- beamlit/models/resource_deployment_metrics.py +6 -4
- beamlit/models/resource_deployment_metrics_query_per_second_per_region_per_code.py +1 -1
- beamlit/models/resource_environment_metrics.py +155 -75
- beamlit/models/resource_environment_metrics_request_total_per_code.py +45 -0
- beamlit/models/resource_environment_metrics_rps_per_code.py +45 -0
- beamlit/models/resource_metrics.py +1 -1
- beamlit/models/runtime.py +2 -2
- beamlit/models/store_agent.py +1 -1
- beamlit/models/store_function.py +1 -1
- beamlit/models/token_rate_metric.py +88 -0
- beamlit/models/token_rate_metrics.py +106 -0
- beamlit/models/token_total_metric.py +106 -0
- beamlit/models/workspace.py +17 -8
- beamlit/serve/app.py +9 -13
- {beamlit-0.0.33rc49.dist-info → beamlit-0.0.34.dist-info}/METADATA +21 -3
- {beamlit-0.0.33rc49.dist-info → beamlit-0.0.34.dist-info}/RECORD +80 -52
- beamlit/common/generate.py +0 -196
- {beamlit-0.0.33rc49.dist-info → beamlit-0.0.34.dist-info}/WHEEL +0 -0
beamlit/functions/decorator.py
CHANGED
@@ -1,15 +1,163 @@
|
|
1
1
|
"""Decorators for creating function tools with Beamlit and LangChain integration."""
|
2
|
+
import ast
|
2
3
|
import asyncio
|
3
4
|
import functools
|
5
|
+
import importlib.util
|
6
|
+
import os
|
4
7
|
from collections.abc import Callable
|
5
8
|
from logging import getLogger
|
9
|
+
from typing import Union
|
6
10
|
|
7
11
|
from fastapi import Request
|
12
|
+
from langchain_core.tools import StructuredTool
|
13
|
+
from langchain_core.tools.base import create_schema_from_function
|
8
14
|
|
9
|
-
from beamlit.
|
15
|
+
from beamlit.authentication import new_client
|
16
|
+
from beamlit.client import AuthenticatedClient
|
17
|
+
from beamlit.common import slugify
|
18
|
+
from beamlit.common.settings import get_settings
|
19
|
+
from beamlit.functions.mcp.mcp import MCPClient, MCPToolkit
|
20
|
+
from beamlit.functions.remote.remote import RemoteToolkit
|
21
|
+
from beamlit.models import AgentChain, Function, FunctionKit
|
10
22
|
|
11
23
|
logger = getLogger(__name__)
|
12
24
|
|
25
|
+
def get_functions(
|
26
|
+
mcp_hub:Union[list[str], None]=None,
|
27
|
+
remote_functions:Union[list[str], None]=None,
|
28
|
+
client:Union[AuthenticatedClient, None]=None,
|
29
|
+
dir:Union[str, None]=None,
|
30
|
+
chain:Union[list[AgentChain], None]=None,
|
31
|
+
remote_functions_empty:bool=True,
|
32
|
+
from_decorator:str="function",
|
33
|
+
warning:bool=True,
|
34
|
+
):
|
35
|
+
from beamlit.agents.chain import ChainToolkit
|
36
|
+
|
37
|
+
settings = get_settings()
|
38
|
+
if client is None:
|
39
|
+
client = new_client()
|
40
|
+
if dir is None:
|
41
|
+
dir = settings.agent.functions_directory
|
42
|
+
|
43
|
+
functions = []
|
44
|
+
logger = getLogger(__name__)
|
45
|
+
settings = get_settings()
|
46
|
+
|
47
|
+
# Walk through all Python files in functions directory and subdirectories
|
48
|
+
if not os.path.exists(dir):
|
49
|
+
if remote_functions_empty and warning:
|
50
|
+
logger.warn(f"Functions directory {dir} not found")
|
51
|
+
if os.path.exists(dir):
|
52
|
+
for root, _, files in os.walk(dir):
|
53
|
+
for file in files:
|
54
|
+
if file.endswith(".py"):
|
55
|
+
file_path = os.path.join(root, file)
|
56
|
+
# Read and compile the file content
|
57
|
+
with open(file_path) as f:
|
58
|
+
try:
|
59
|
+
file_content = f.read()
|
60
|
+
# Parse the file content to find decorated functions
|
61
|
+
tree = ast.parse(file_content)
|
62
|
+
|
63
|
+
# Look for function definitions with decorators
|
64
|
+
for node in ast.walk(tree):
|
65
|
+
if (
|
66
|
+
not isinstance(node, ast.FunctionDef)
|
67
|
+
and not isinstance(node, ast.AsyncFunctionDef)
|
68
|
+
) or len(node.decorator_list) == 0:
|
69
|
+
continue
|
70
|
+
decorator = node.decorator_list[0]
|
71
|
+
|
72
|
+
decorator_name = ""
|
73
|
+
if isinstance(decorator, ast.Call):
|
74
|
+
decorator_name = decorator.func.id
|
75
|
+
if isinstance(decorator, ast.Name):
|
76
|
+
decorator_name = decorator.id
|
77
|
+
if decorator_name == from_decorator:
|
78
|
+
# Get the function name and decorator name
|
79
|
+
func_name = node.name
|
80
|
+
|
81
|
+
# Import the module to get the actual function
|
82
|
+
spec = importlib.util.spec_from_file_location(func_name, file_path)
|
83
|
+
module = importlib.util.module_from_spec(spec)
|
84
|
+
spec.loader.exec_module(module)
|
85
|
+
# Check if kit=True in the decorator arguments
|
86
|
+
is_kit = False
|
87
|
+
if isinstance(decorator, ast.Call):
|
88
|
+
for keyword in decorator.keywords:
|
89
|
+
if keyword.arg == "kit" and isinstance(
|
90
|
+
keyword.value, ast.Constant
|
91
|
+
):
|
92
|
+
is_kit = keyword.value.value
|
93
|
+
if is_kit and not settings.remote:
|
94
|
+
kit_functions = get_functions(
|
95
|
+
client=client,
|
96
|
+
dir=os.path.join(root),
|
97
|
+
remote_functions_empty=remote_functions_empty,
|
98
|
+
from_decorator="kit",
|
99
|
+
)
|
100
|
+
functions.extend(kit_functions)
|
101
|
+
|
102
|
+
# Get the decorated function
|
103
|
+
if not is_kit and hasattr(module, func_name):
|
104
|
+
func = getattr(module, func_name)
|
105
|
+
if settings.remote:
|
106
|
+
toolkit = RemoteToolkit(client, slugify(func.__name__))
|
107
|
+
toolkit.initialize()
|
108
|
+
functions.extend(toolkit.get_tools())
|
109
|
+
else:
|
110
|
+
if asyncio.iscoroutinefunction(func):
|
111
|
+
functions.append(
|
112
|
+
StructuredTool(
|
113
|
+
name=func.__name__,
|
114
|
+
description=func.__doc__,
|
115
|
+
func=func,
|
116
|
+
coroutine=func,
|
117
|
+
args_schema=create_schema_from_function(func.__name__, func)
|
118
|
+
)
|
119
|
+
)
|
120
|
+
else:
|
121
|
+
|
122
|
+
functions.append(
|
123
|
+
StructuredTool(
|
124
|
+
name=func.__name__,
|
125
|
+
description=func.__doc__,
|
126
|
+
func=func,
|
127
|
+
args_schema=create_schema_from_function(func.__name__, func)
|
128
|
+
)
|
129
|
+
)
|
130
|
+
except Exception as e:
|
131
|
+
logger.warning(f"Error processing {file_path}: {e!s}")
|
132
|
+
|
133
|
+
if mcp_hub:
|
134
|
+
for server in mcp_hub:
|
135
|
+
try:
|
136
|
+
mcp_client = MCPClient(client, server)
|
137
|
+
toolkit = MCPToolkit(client=mcp_client)
|
138
|
+
toolkit.initialize()
|
139
|
+
functions.extend(toolkit.get_tools())
|
140
|
+
except Exception as e:
|
141
|
+
logger.warn(f"Failed to initialize MCP server {server}: {e!s}")
|
142
|
+
|
143
|
+
if remote_functions:
|
144
|
+
for function in remote_functions:
|
145
|
+
try:
|
146
|
+
toolkit = RemoteToolkit(client, function)
|
147
|
+
toolkit.initialize()
|
148
|
+
functions.extend(toolkit.get_tools())
|
149
|
+
except Exception as e:
|
150
|
+
logger.warn(f"Failed to initialize remote function {function}: {e!s}")
|
151
|
+
|
152
|
+
if chain:
|
153
|
+
toolkit = ChainToolkit(client, chain)
|
154
|
+
toolkit.initialize()
|
155
|
+
functions.extend(toolkit.get_tools())
|
156
|
+
|
157
|
+
return functions
|
158
|
+
|
159
|
+
|
160
|
+
|
13
161
|
def kit(bl_kit: FunctionKit = None, **kwargs: dict) -> Callable:
|
14
162
|
"""Create function tools with Beamlit and LangChain integration."""
|
15
163
|
|
beamlit/models/__init__.py
CHANGED
@@ -11,9 +11,9 @@ from .agent_spec import AgentSpec
|
|
11
11
|
from .api_key import ApiKey
|
12
12
|
from .configuration import Configuration
|
13
13
|
from .continent import Continent
|
14
|
+
from .core_event import CoreEvent
|
14
15
|
from .core_spec import CoreSpec
|
15
16
|
from .core_spec_configurations import CoreSpecConfigurations
|
16
|
-
from .core_status import CoreStatus
|
17
17
|
from .country import Country
|
18
18
|
from .create_api_key_for_service_account_body import CreateApiKeyForServiceAccountBody
|
19
19
|
from .create_workspace_service_account_body import CreateWorkspaceServiceAccountBody
|
@@ -35,6 +35,8 @@ from .get_trace_response_200 import GetTraceResponse200
|
|
35
35
|
from .get_workspace_service_accounts_response_200_item import (
|
36
36
|
GetWorkspaceServiceAccountsResponse200Item,
|
37
37
|
)
|
38
|
+
from .histogram_bucket import HistogramBucket
|
39
|
+
from .histogram_stats import HistogramStats
|
38
40
|
from .increase_and_rate_metric import IncreaseAndRateMetric
|
39
41
|
from .integration_config import IntegrationConfig
|
40
42
|
from .integration_connection import IntegrationConnection
|
@@ -42,16 +44,21 @@ from .integration_connection_config import IntegrationConnectionConfig
|
|
42
44
|
from .integration_connection_secret import IntegrationConnectionSecret
|
43
45
|
from .integration_connection_spec import IntegrationConnectionSpec
|
44
46
|
from .integration_model import IntegrationModel
|
47
|
+
from .integration_repository import IntegrationRepository
|
45
48
|
from .invite_workspace_user_body import InviteWorkspaceUserBody
|
49
|
+
from .last_n_requests_metric import LastNRequestsMetric
|
50
|
+
from .latency_metric import LatencyMetric
|
46
51
|
from .location_response import LocationResponse
|
47
52
|
from .metadata import Metadata
|
48
53
|
from .metadata_labels import MetadataLabels
|
49
54
|
from .metric import Metric
|
50
55
|
from .metrics import Metrics
|
56
|
+
from .metrics_models import MetricsModels
|
57
|
+
from .metrics_request_total_per_code import MetricsRequestTotalPerCode
|
58
|
+
from .metrics_rps_per_code import MetricsRpsPerCode
|
51
59
|
from .model import Model
|
52
60
|
from .model_metadata import ModelMetadata
|
53
61
|
from .model_private_cluster import ModelPrivateCluster
|
54
|
-
from .model_provider import ModelProvider
|
55
62
|
from .model_release import ModelRelease
|
56
63
|
from .model_spec import ModelSpec
|
57
64
|
from .owner_fields import OwnerFields
|
@@ -69,6 +76,19 @@ from .private_cluster import PrivateCluster
|
|
69
76
|
from .private_location import PrivateLocation
|
70
77
|
from .provider_config import ProviderConfig
|
71
78
|
from .qps import QPS
|
79
|
+
from .repository import Repository
|
80
|
+
from .request_duration_over_time_metric import RequestDurationOverTimeMetric
|
81
|
+
from .request_duration_over_time_metrics import RequestDurationOverTimeMetrics
|
82
|
+
from .request_total_by_origin_metric import RequestTotalByOriginMetric
|
83
|
+
from .request_total_by_origin_metric_request_total_by_origin import (
|
84
|
+
RequestTotalByOriginMetricRequestTotalByOrigin,
|
85
|
+
)
|
86
|
+
from .request_total_by_origin_metric_request_total_by_origin_and_code import (
|
87
|
+
RequestTotalByOriginMetricRequestTotalByOriginAndCode,
|
88
|
+
)
|
89
|
+
from .request_total_metric import RequestTotalMetric
|
90
|
+
from .request_total_metric_request_total_per_code import RequestTotalMetricRequestTotalPerCode
|
91
|
+
from .request_total_metric_rps_per_code import RequestTotalMetricRpsPerCode
|
72
92
|
from .resource_deployment_metrics import ResourceDeploymentMetrics
|
73
93
|
from .resource_deployment_metrics_inference_per_second_per_region import (
|
74
94
|
ResourceDeploymentMetricsInferencePerSecondPerRegion,
|
@@ -77,12 +97,10 @@ from .resource_deployment_metrics_query_per_second_per_region_per_code import (
|
|
77
97
|
ResourceDeploymentMetricsQueryPerSecondPerRegionPerCode,
|
78
98
|
)
|
79
99
|
from .resource_environment_metrics import ResourceEnvironmentMetrics
|
80
|
-
from .
|
81
|
-
|
82
|
-
)
|
83
|
-
from .resource_environment_metrics_query_per_region_per_code import (
|
84
|
-
ResourceEnvironmentMetricsQueryPerRegionPerCode,
|
100
|
+
from .resource_environment_metrics_request_total_per_code import (
|
101
|
+
ResourceEnvironmentMetricsRequestTotalPerCode,
|
85
102
|
)
|
103
|
+
from .resource_environment_metrics_rps_per_code import ResourceEnvironmentMetricsRpsPerCode
|
86
104
|
from .resource_log import ResourceLog
|
87
105
|
from .resource_metrics import ResourceMetrics
|
88
106
|
from .runtime import Runtime
|
@@ -99,6 +117,9 @@ from .store_function_kit import StoreFunctionKit
|
|
99
117
|
from .store_function_labels import StoreFunctionLabels
|
100
118
|
from .store_function_parameter import StoreFunctionParameter
|
101
119
|
from .time_fields import TimeFields
|
120
|
+
from .token_rate_metric import TokenRateMetric
|
121
|
+
from .token_rate_metrics import TokenRateMetrics
|
122
|
+
from .token_total_metric import TokenTotalMetric
|
102
123
|
from .trace_ids_response import TraceIdsResponse
|
103
124
|
from .update_workspace_service_account_body import UpdateWorkspaceServiceAccountBody
|
104
125
|
from .update_workspace_service_account_response_200 import UpdateWorkspaceServiceAccountResponse200
|
@@ -120,9 +141,9 @@ __all__ = (
|
|
120
141
|
"ApiKey",
|
121
142
|
"Configuration",
|
122
143
|
"Continent",
|
144
|
+
"CoreEvent",
|
123
145
|
"CoreSpec",
|
124
146
|
"CoreSpecConfigurations",
|
125
|
-
"CoreStatus",
|
126
147
|
"Country",
|
127
148
|
"CreateApiKeyForServiceAccountBody",
|
128
149
|
"CreateWorkspaceServiceAccountBody",
|
@@ -142,6 +163,8 @@ __all__ = (
|
|
142
163
|
"GetTraceLogsResponse200",
|
143
164
|
"GetTraceResponse200",
|
144
165
|
"GetWorkspaceServiceAccountsResponse200Item",
|
166
|
+
"HistogramBucket",
|
167
|
+
"HistogramStats",
|
145
168
|
"IncreaseAndRateMetric",
|
146
169
|
"IntegrationConfig",
|
147
170
|
"IntegrationConnection",
|
@@ -149,16 +172,21 @@ __all__ = (
|
|
149
172
|
"IntegrationConnectionSecret",
|
150
173
|
"IntegrationConnectionSpec",
|
151
174
|
"IntegrationModel",
|
175
|
+
"IntegrationRepository",
|
152
176
|
"InviteWorkspaceUserBody",
|
177
|
+
"LastNRequestsMetric",
|
178
|
+
"LatencyMetric",
|
153
179
|
"LocationResponse",
|
154
180
|
"Metadata",
|
155
181
|
"MetadataLabels",
|
156
182
|
"Metric",
|
157
183
|
"Metrics",
|
184
|
+
"MetricsModels",
|
185
|
+
"MetricsRequestTotalPerCode",
|
186
|
+
"MetricsRpsPerCode",
|
158
187
|
"Model",
|
159
188
|
"ModelMetadata",
|
160
189
|
"ModelPrivateCluster",
|
161
|
-
"ModelProvider",
|
162
190
|
"ModelRelease",
|
163
191
|
"ModelSpec",
|
164
192
|
"OwnerFields",
|
@@ -176,12 +204,21 @@ __all__ = (
|
|
176
204
|
"PrivateLocation",
|
177
205
|
"ProviderConfig",
|
178
206
|
"QPS",
|
207
|
+
"Repository",
|
208
|
+
"RequestDurationOverTimeMetric",
|
209
|
+
"RequestDurationOverTimeMetrics",
|
210
|
+
"RequestTotalByOriginMetric",
|
211
|
+
"RequestTotalByOriginMetricRequestTotalByOrigin",
|
212
|
+
"RequestTotalByOriginMetricRequestTotalByOriginAndCode",
|
213
|
+
"RequestTotalMetric",
|
214
|
+
"RequestTotalMetricRequestTotalPerCode",
|
215
|
+
"RequestTotalMetricRpsPerCode",
|
179
216
|
"ResourceDeploymentMetrics",
|
180
217
|
"ResourceDeploymentMetricsInferencePerSecondPerRegion",
|
181
218
|
"ResourceDeploymentMetricsQueryPerSecondPerRegionPerCode",
|
182
219
|
"ResourceEnvironmentMetrics",
|
183
|
-
"
|
184
|
-
"
|
220
|
+
"ResourceEnvironmentMetricsRequestTotalPerCode",
|
221
|
+
"ResourceEnvironmentMetricsRpsPerCode",
|
185
222
|
"ResourceLog",
|
186
223
|
"ResourceMetrics",
|
187
224
|
"Runtime",
|
@@ -198,6 +235,9 @@ __all__ = (
|
|
198
235
|
"StoreFunctionLabels",
|
199
236
|
"StoreFunctionParameter",
|
200
237
|
"TimeFields",
|
238
|
+
"TokenRateMetric",
|
239
|
+
"TokenRateMetrics",
|
240
|
+
"TokenTotalMetric",
|
201
241
|
"TraceIdsResponse",
|
202
242
|
"UpdateWorkspaceServiceAccountBody",
|
203
243
|
"UpdateWorkspaceServiceAccountResponse200",
|
beamlit/models/agent.py
CHANGED
@@ -7,7 +7,7 @@ from ..types import UNSET, Unset
|
|
7
7
|
|
8
8
|
if TYPE_CHECKING:
|
9
9
|
from ..models.agent_spec import AgentSpec
|
10
|
-
from ..models.
|
10
|
+
from ..models.core_event import CoreEvent
|
11
11
|
from ..models.environment_metadata import EnvironmentMetadata
|
12
12
|
|
13
13
|
|
@@ -19,32 +19,41 @@ class Agent:
|
|
19
19
|
"""Agent
|
20
20
|
|
21
21
|
Attributes:
|
22
|
+
events (Union[Unset, list['CoreEvent']]): Core events
|
22
23
|
metadata (Union[Unset, EnvironmentMetadata]): Environment metadata
|
23
24
|
spec (Union[Unset, AgentSpec]): Agent specification
|
24
|
-
status (Union[Unset,
|
25
|
+
status (Union[Unset, str]): Agent status
|
25
26
|
"""
|
26
27
|
|
28
|
+
events: Union[Unset, list["CoreEvent"]] = UNSET
|
27
29
|
metadata: Union[Unset, "EnvironmentMetadata"] = UNSET
|
28
30
|
spec: Union[Unset, "AgentSpec"] = UNSET
|
29
|
-
status: Union[Unset,
|
31
|
+
status: Union[Unset, str] = UNSET
|
30
32
|
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
31
33
|
|
32
34
|
def to_dict(self) -> dict[str, Any]:
|
35
|
+
events: Union[Unset, list[dict[str, Any]]] = UNSET
|
36
|
+
if not isinstance(self.events, Unset):
|
37
|
+
events = []
|
38
|
+
for componentsschemas_core_events_item_data in self.events:
|
39
|
+
componentsschemas_core_events_item = componentsschemas_core_events_item_data.to_dict()
|
40
|
+
events.append(componentsschemas_core_events_item)
|
41
|
+
|
33
42
|
metadata: Union[Unset, dict[str, Any]] = UNSET
|
34
|
-
if not isinstance(self.metadata, Unset):
|
43
|
+
if self.metadata and not isinstance(self.metadata, Unset):
|
35
44
|
metadata = self.metadata.to_dict()
|
36
45
|
|
37
46
|
spec: Union[Unset, dict[str, Any]] = UNSET
|
38
|
-
if not isinstance(self.spec, Unset):
|
47
|
+
if self.spec and not isinstance(self.spec, Unset):
|
39
48
|
spec = self.spec.to_dict()
|
40
49
|
|
41
|
-
status
|
42
|
-
if not isinstance(self.status, Unset):
|
43
|
-
status = self.status.to_dict()
|
50
|
+
status = self.status
|
44
51
|
|
45
52
|
field_dict: dict[str, Any] = {}
|
46
53
|
field_dict.update(self.additional_properties)
|
47
54
|
field_dict.update({})
|
55
|
+
if events is not UNSET:
|
56
|
+
field_dict["events"] = events
|
48
57
|
if metadata is not UNSET:
|
49
58
|
field_dict["metadata"] = metadata
|
50
59
|
if spec is not UNSET:
|
@@ -57,12 +66,19 @@ class Agent:
|
|
57
66
|
@classmethod
|
58
67
|
def from_dict(cls: type[T], src_dict: dict[str, Any]) -> T:
|
59
68
|
from ..models.agent_spec import AgentSpec
|
60
|
-
from ..models.
|
69
|
+
from ..models.core_event import CoreEvent
|
61
70
|
from ..models.environment_metadata import EnvironmentMetadata
|
62
71
|
|
63
72
|
if not src_dict:
|
64
73
|
return None
|
65
74
|
d = src_dict.copy()
|
75
|
+
events = []
|
76
|
+
_events = d.pop("events", UNSET)
|
77
|
+
for componentsschemas_core_events_item_data in _events or []:
|
78
|
+
componentsschemas_core_events_item = CoreEvent.from_dict(componentsschemas_core_events_item_data)
|
79
|
+
|
80
|
+
events.append(componentsschemas_core_events_item)
|
81
|
+
|
66
82
|
_metadata = d.pop("metadata", UNSET)
|
67
83
|
metadata: Union[Unset, EnvironmentMetadata]
|
68
84
|
if isinstance(_metadata, Unset):
|
@@ -77,14 +93,10 @@ class Agent:
|
|
77
93
|
else:
|
78
94
|
spec = AgentSpec.from_dict(_spec)
|
79
95
|
|
80
|
-
|
81
|
-
status: Union[Unset, CoreStatus]
|
82
|
-
if isinstance(_status, Unset):
|
83
|
-
status = UNSET
|
84
|
-
else:
|
85
|
-
status = CoreStatus.from_dict(_status)
|
96
|
+
status = d.pop("status", UNSET)
|
86
97
|
|
87
98
|
agent = cls(
|
99
|
+
events=events,
|
88
100
|
metadata=metadata,
|
89
101
|
spec=spec,
|
90
102
|
status=status,
|
beamlit/models/agent_metadata.py
CHANGED
@@ -51,7 +51,7 @@ class AgentMetadata:
|
|
51
51
|
display_name = self.display_name
|
52
52
|
|
53
53
|
labels: Union[Unset, dict[str, Any]] = UNSET
|
54
|
-
if not isinstance(self.labels, Unset):
|
54
|
+
if self.labels and not isinstance(self.labels, Unset):
|
55
55
|
labels = self.labels.to_dict()
|
56
56
|
|
57
57
|
name = self.name
|
@@ -0,0 +1,45 @@
|
|
1
|
+
from typing import Any, TypeVar
|
2
|
+
|
3
|
+
from attrs import define as _attrs_define
|
4
|
+
from attrs import field as _attrs_field
|
5
|
+
|
6
|
+
T = TypeVar("T", bound="AgentRender")
|
7
|
+
|
8
|
+
|
9
|
+
@_attrs_define
|
10
|
+
class AgentRender:
|
11
|
+
"""AgentRender"""
|
12
|
+
|
13
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
14
|
+
|
15
|
+
def to_dict(self) -> dict[str, Any]:
|
16
|
+
field_dict: dict[str, Any] = {}
|
17
|
+
field_dict.update(self.additional_properties)
|
18
|
+
|
19
|
+
return field_dict
|
20
|
+
|
21
|
+
@classmethod
|
22
|
+
def from_dict(cls: type[T], src_dict: dict[str, Any]) -> T:
|
23
|
+
if not src_dict:
|
24
|
+
return None
|
25
|
+
d = src_dict.copy()
|
26
|
+
agent_render = cls()
|
27
|
+
|
28
|
+
agent_render.additional_properties = d
|
29
|
+
return agent_render
|
30
|
+
|
31
|
+
@property
|
32
|
+
def additional_keys(self) -> list[str]:
|
33
|
+
return list(self.additional_properties.keys())
|
34
|
+
|
35
|
+
def __getitem__(self, key: str) -> Any:
|
36
|
+
return self.additional_properties[key]
|
37
|
+
|
38
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
39
|
+
self.additional_properties[key] = value
|
40
|
+
|
41
|
+
def __delitem__(self, key: str) -> None:
|
42
|
+
del self.additional_properties[key]
|
43
|
+
|
44
|
+
def __contains__(self, key: str) -> bool:
|
45
|
+
return key in self.additional_properties
|
beamlit/models/agent_spec.py
CHANGED
@@ -11,6 +11,7 @@ if TYPE_CHECKING:
|
|
11
11
|
from ..models.flavor import Flavor
|
12
12
|
from ..models.model_private_cluster import ModelPrivateCluster
|
13
13
|
from ..models.pod_template_spec import PodTemplateSpec
|
14
|
+
from ..models.repository import Repository
|
14
15
|
from ..models.runtime import Runtime
|
15
16
|
from ..models.serverless_config import ServerlessConfig
|
16
17
|
|
@@ -31,11 +32,13 @@ class AgentSpec:
|
|
31
32
|
policies (Union[Unset, list[str]]):
|
32
33
|
private_clusters (Union[Unset, ModelPrivateCluster]): Private cluster where the model deployment is deployed
|
33
34
|
runtime (Union[Unset, Runtime]): Set of configurations for a deployment
|
35
|
+
sandbox (Union[Unset, bool]): Sandbox mode
|
34
36
|
serverless_config (Union[Unset, ServerlessConfig]): Configuration for a serverless deployment
|
35
37
|
agent_chain (Union[Unset, list['AgentChain']]): Agent chain
|
36
38
|
description (Union[Unset, str]): Agent description
|
37
39
|
functions (Union[Unset, list[str]]):
|
38
40
|
model (Union[Unset, str]): Model name
|
41
|
+
repository (Union[Unset, Repository]): Repository
|
39
42
|
store_id (Union[Unset, str]): Store id
|
40
43
|
"""
|
41
44
|
|
@@ -47,17 +50,19 @@ class AgentSpec:
|
|
47
50
|
policies: Union[Unset, list[str]] = UNSET
|
48
51
|
private_clusters: Union[Unset, "ModelPrivateCluster"] = UNSET
|
49
52
|
runtime: Union[Unset, "Runtime"] = UNSET
|
53
|
+
sandbox: Union[Unset, bool] = UNSET
|
50
54
|
serverless_config: Union[Unset, "ServerlessConfig"] = UNSET
|
51
55
|
agent_chain: Union[Unset, list["AgentChain"]] = UNSET
|
52
56
|
description: Union[Unset, str] = UNSET
|
53
57
|
functions: Union[Unset, list[str]] = UNSET
|
54
58
|
model: Union[Unset, str] = UNSET
|
59
|
+
repository: Union[Unset, "Repository"] = UNSET
|
55
60
|
store_id: Union[Unset, str] = UNSET
|
56
61
|
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
57
62
|
|
58
63
|
def to_dict(self) -> dict[str, Any]:
|
59
64
|
configurations: Union[Unset, dict[str, Any]] = UNSET
|
60
|
-
if not isinstance(self.configurations, Unset):
|
65
|
+
if self.configurations and not isinstance(self.configurations, Unset):
|
61
66
|
configurations = self.configurations.to_dict()
|
62
67
|
|
63
68
|
enabled = self.enabled
|
@@ -74,7 +79,7 @@ class AgentSpec:
|
|
74
79
|
integration_connections = self.integration_connections
|
75
80
|
|
76
81
|
pod_template: Union[Unset, dict[str, Any]] = UNSET
|
77
|
-
if not isinstance(self.pod_template, Unset):
|
82
|
+
if self.pod_template and not isinstance(self.pod_template, Unset):
|
78
83
|
pod_template = self.pod_template.to_dict()
|
79
84
|
|
80
85
|
policies: Union[Unset, list[str]] = UNSET
|
@@ -82,15 +87,17 @@ class AgentSpec:
|
|
82
87
|
policies = self.policies
|
83
88
|
|
84
89
|
private_clusters: Union[Unset, dict[str, Any]] = UNSET
|
85
|
-
if not isinstance(self.private_clusters, Unset):
|
90
|
+
if self.private_clusters and not isinstance(self.private_clusters, Unset):
|
86
91
|
private_clusters = self.private_clusters.to_dict()
|
87
92
|
|
88
93
|
runtime: Union[Unset, dict[str, Any]] = UNSET
|
89
|
-
if not isinstance(self.runtime, Unset):
|
94
|
+
if self.runtime and not isinstance(self.runtime, Unset):
|
90
95
|
runtime = self.runtime.to_dict()
|
91
96
|
|
97
|
+
sandbox = self.sandbox
|
98
|
+
|
92
99
|
serverless_config: Union[Unset, dict[str, Any]] = UNSET
|
93
|
-
if not isinstance(self.serverless_config, Unset):
|
100
|
+
if self.serverless_config and not isinstance(self.serverless_config, Unset):
|
94
101
|
serverless_config = self.serverless_config.to_dict()
|
95
102
|
|
96
103
|
agent_chain: Union[Unset, list[dict[str, Any]]] = UNSET
|
@@ -108,6 +115,10 @@ class AgentSpec:
|
|
108
115
|
|
109
116
|
model = self.model
|
110
117
|
|
118
|
+
repository: Union[Unset, dict[str, Any]] = UNSET
|
119
|
+
if self.repository and not isinstance(self.repository, Unset):
|
120
|
+
repository = self.repository.to_dict()
|
121
|
+
|
111
122
|
store_id = self.store_id
|
112
123
|
|
113
124
|
field_dict: dict[str, Any] = {}
|
@@ -129,6 +140,8 @@ class AgentSpec:
|
|
129
140
|
field_dict["privateClusters"] = private_clusters
|
130
141
|
if runtime is not UNSET:
|
131
142
|
field_dict["runtime"] = runtime
|
143
|
+
if sandbox is not UNSET:
|
144
|
+
field_dict["sandbox"] = sandbox
|
132
145
|
if serverless_config is not UNSET:
|
133
146
|
field_dict["serverlessConfig"] = serverless_config
|
134
147
|
if agent_chain is not UNSET:
|
@@ -139,6 +152,8 @@ class AgentSpec:
|
|
139
152
|
field_dict["functions"] = functions
|
140
153
|
if model is not UNSET:
|
141
154
|
field_dict["model"] = model
|
155
|
+
if repository is not UNSET:
|
156
|
+
field_dict["repository"] = repository
|
142
157
|
if store_id is not UNSET:
|
143
158
|
field_dict["storeId"] = store_id
|
144
159
|
|
@@ -151,6 +166,7 @@ class AgentSpec:
|
|
151
166
|
from ..models.flavor import Flavor
|
152
167
|
from ..models.model_private_cluster import ModelPrivateCluster
|
153
168
|
from ..models.pod_template_spec import PodTemplateSpec
|
169
|
+
from ..models.repository import Repository
|
154
170
|
from ..models.runtime import Runtime
|
155
171
|
from ..models.serverless_config import ServerlessConfig
|
156
172
|
|
@@ -198,6 +214,8 @@ class AgentSpec:
|
|
198
214
|
else:
|
199
215
|
runtime = Runtime.from_dict(_runtime)
|
200
216
|
|
217
|
+
sandbox = d.pop("sandbox", UNSET)
|
218
|
+
|
201
219
|
_serverless_config = d.pop("serverlessConfig", UNSET)
|
202
220
|
serverless_config: Union[Unset, ServerlessConfig]
|
203
221
|
if isinstance(_serverless_config, Unset):
|
@@ -218,6 +236,13 @@ class AgentSpec:
|
|
218
236
|
|
219
237
|
model = d.pop("model", UNSET)
|
220
238
|
|
239
|
+
_repository = d.pop("repository", UNSET)
|
240
|
+
repository: Union[Unset, Repository]
|
241
|
+
if isinstance(_repository, Unset):
|
242
|
+
repository = UNSET
|
243
|
+
else:
|
244
|
+
repository = Repository.from_dict(_repository)
|
245
|
+
|
221
246
|
store_id = d.pop("storeId", UNSET)
|
222
247
|
|
223
248
|
agent_spec = cls(
|
@@ -229,11 +254,13 @@ class AgentSpec:
|
|
229
254
|
policies=policies,
|
230
255
|
private_clusters=private_clusters,
|
231
256
|
runtime=runtime,
|
257
|
+
sandbox=sandbox,
|
232
258
|
serverless_config=serverless_config,
|
233
259
|
agent_chain=agent_chain,
|
234
260
|
description=description,
|
235
261
|
functions=functions,
|
236
262
|
model=model,
|
263
|
+
repository=repository,
|
237
264
|
store_id=store_id,
|
238
265
|
)
|
239
266
|
|