beamlit 0.0.33rc50__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.
Files changed (79) hide show
  1. beamlit/agents/__init__.py +2 -1
  2. beamlit/agents/chat.py +16 -4
  3. beamlit/agents/decorator.py +68 -155
  4. beamlit/agents/thread.py +14 -0
  5. beamlit/api/workspaces/workspace_quotas_request.py +97 -0
  6. beamlit/authentication/clientcredentials.py +5 -3
  7. beamlit/authentication/device_mode.py +4 -4
  8. beamlit/common/instrumentation.py +202 -34
  9. beamlit/common/settings.py +3 -1
  10. beamlit/deploy/deploy.py +64 -60
  11. beamlit/deploy/format.py +10 -0
  12. beamlit/functions/__init__.py +2 -2
  13. beamlit/functions/decorator.py +149 -1
  14. beamlit/functions/github/github.py +0 -1
  15. beamlit/models/__init__.py +51 -11
  16. beamlit/models/agent.py +27 -15
  17. beamlit/models/agent_metadata.py +1 -1
  18. beamlit/models/agent_render.py +45 -0
  19. beamlit/models/agent_spec.py +32 -5
  20. beamlit/models/core_event.py +88 -0
  21. beamlit/models/core_spec.py +14 -5
  22. beamlit/models/core_spec_configurations.py +1 -1
  23. beamlit/models/core_status.py +3 -20
  24. beamlit/models/environment.py +2 -2
  25. beamlit/models/environment_metadata.py +1 -1
  26. beamlit/models/function.py +27 -15
  27. beamlit/models/function_metadata.py +1 -1
  28. beamlit/models/function_render.py +45 -0
  29. beamlit/models/function_spec.py +14 -5
  30. beamlit/models/histogram_bucket.py +79 -0
  31. beamlit/models/histogram_stats.py +88 -0
  32. beamlit/models/increase_and_rate_metric.py +0 -9
  33. beamlit/models/integration_connection.py +2 -2
  34. beamlit/models/integration_connection_spec.py +11 -2
  35. beamlit/models/integration_repository.py +88 -0
  36. beamlit/models/last_n_requests_metric.py +88 -0
  37. beamlit/models/latency_metric.py +124 -0
  38. beamlit/models/metadata.py +1 -1
  39. beamlit/models/metric.py +18 -9
  40. beamlit/models/metrics.py +81 -46
  41. beamlit/models/metrics_models.py +45 -0
  42. beamlit/models/metrics_request_total_per_code.py +45 -0
  43. beamlit/models/metrics_rps_per_code.py +45 -0
  44. beamlit/models/model.py +27 -15
  45. beamlit/models/model_metadata.py +1 -1
  46. beamlit/models/model_provider.py +2 -2
  47. beamlit/models/model_render.py +45 -0
  48. beamlit/models/model_spec.py +14 -14
  49. beamlit/models/pending_invitation_accept.py +1 -1
  50. beamlit/models/pending_invitation_render.py +3 -3
  51. beamlit/models/policy.py +2 -2
  52. beamlit/models/provider_config.py +1 -1
  53. beamlit/models/repository.py +70 -0
  54. beamlit/models/repository_type_0.py +70 -0
  55. beamlit/models/request_duration_over_time_metric.py +97 -0
  56. beamlit/models/request_duration_over_time_metrics.py +74 -0
  57. beamlit/models/request_total_by_origin_metric.py +103 -0
  58. beamlit/models/request_total_by_origin_metric_request_total_by_origin.py +45 -0
  59. beamlit/models/request_total_by_origin_metric_request_total_by_origin_and_code.py +45 -0
  60. beamlit/models/request_total_metric.py +115 -0
  61. beamlit/models/request_total_metric_request_total_per_code.py +45 -0
  62. beamlit/models/request_total_metric_rps_per_code.py +45 -0
  63. beamlit/models/resource_deployment_metrics.py +6 -4
  64. beamlit/models/resource_deployment_metrics_query_per_second_per_region_per_code.py +1 -1
  65. beamlit/models/resource_environment_metrics.py +155 -75
  66. beamlit/models/resource_environment_metrics_request_total_per_code.py +45 -0
  67. beamlit/models/resource_environment_metrics_rps_per_code.py +45 -0
  68. beamlit/models/resource_metrics.py +1 -1
  69. beamlit/models/runtime.py +2 -2
  70. beamlit/models/store_agent.py +1 -1
  71. beamlit/models/store_function.py +1 -1
  72. beamlit/models/token_rate_metric.py +88 -0
  73. beamlit/models/token_rate_metrics.py +106 -0
  74. beamlit/models/token_total_metric.py +106 -0
  75. beamlit/models/workspace.py +17 -8
  76. beamlit/serve/app.py +9 -13
  77. {beamlit-0.0.33rc50.dist-info → beamlit-0.0.34.dist-info}/METADATA +21 -3
  78. {beamlit-0.0.33rc50.dist-info → beamlit-0.0.34.dist-info}/RECORD +79 -50
  79. {beamlit-0.0.33rc50.dist-info → beamlit-0.0.34.dist-info}/WHEEL +0 -0
@@ -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.models import Function, FunctionKit
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
 
@@ -18,4 +18,3 @@ def github(name: str, *args):
18
18
  msg = f"Invalid mode: {name}"
19
19
  raise ValueError(msg)
20
20
  return modes[name](*args)
21
- return modes[name](*args)
@@ -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 .resource_environment_metrics_inference_per_region import (
81
- ResourceEnvironmentMetricsInferencePerRegion,
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
- "ResourceEnvironmentMetricsInferencePerRegion",
184
- "ResourceEnvironmentMetricsQueryPerRegionPerCode",
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.core_status import CoreStatus
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, CoreStatus]): Core status
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, "CoreStatus"] = 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: Union[Unset, dict[str, Any]] = UNSET
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.core_status import CoreStatus
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
- _status = d.pop("status", UNSET)
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,
@@ -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
@@ -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