beamlit 0.0.29rc32__py3-none-any.whl → 0.0.30__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/common/__init__.py +4 -1
- beamlit/common/error.py +9 -0
- beamlit/common/settings.py +1 -1
- beamlit/deploy/deploy.py +13 -5
- beamlit/deploy/parser.py +2 -1
- beamlit/run.py +3 -1
- beamlit/serve/app.py +12 -8
- {beamlit-0.0.29rc32.dist-info → beamlit-0.0.30.dist-info}/METADATA +1 -1
- {beamlit-0.0.29rc32.dist-info → beamlit-0.0.30.dist-info}/RECORD +10 -9
- {beamlit-0.0.29rc32.dist-info → beamlit-0.0.30.dist-info}/WHEEL +0 -0
beamlit/common/__init__.py
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
+
from .error import HTTPError
|
1
2
|
from .logger import init as init_logger
|
2
3
|
from .secrets import Secret
|
3
|
-
from .settings import Settings, get_settings, init_agent
|
4
|
+
from .settings import Settings, get_settings, init, init_agent
|
4
5
|
from .utils import copy_folder
|
5
6
|
|
6
7
|
__all__ = [
|
@@ -8,6 +9,8 @@ __all__ = [
|
|
8
9
|
"Settings",
|
9
10
|
"get_settings",
|
10
11
|
"init_agent",
|
12
|
+
"init",
|
11
13
|
"copy_folder",
|
12
14
|
"init_logger",
|
15
|
+
"HTTPError",
|
13
16
|
]
|
beamlit/common/error.py
ADDED
beamlit/common/settings.py
CHANGED
@@ -42,7 +42,7 @@ class SettingsServer(BaseSettings):
|
|
42
42
|
module: str = Field(default="main.main")
|
43
43
|
port: int = Field(default=80)
|
44
44
|
host: str = Field(default="0.0.0.0")
|
45
|
-
|
45
|
+
directory: str = Field(default="src")
|
46
46
|
|
47
47
|
class Settings(BaseSettings):
|
48
48
|
model_config = SettingsConfigDict(
|
beamlit/deploy/deploy.py
CHANGED
@@ -174,15 +174,15 @@ def dockerfile(
|
|
174
174
|
Returns:
|
175
175
|
str: Dockerfile content
|
176
176
|
"""
|
177
|
+
settings = get_settings()
|
177
178
|
if type == "agent":
|
178
179
|
module = f"{resource.module.__file__.split('/')[-1].replace('.py', '')}.{resource.module.__name__}"
|
179
180
|
else:
|
180
|
-
module = f"functions.{resource.module.
|
181
|
+
module = f"functions.{resource.module.__file__.split('/')[-1].replace('.py', '')}.{resource.module.__name__}"
|
181
182
|
cmd = ["bl", "serve", "--port", "80", "--module", module]
|
182
183
|
if type == "agent":
|
183
184
|
cmd.append("--remote")
|
184
185
|
cmd_str = ",".join([f'"{c}"' for c in cmd])
|
185
|
-
|
186
186
|
return f"""
|
187
187
|
FROM python:3.12-slim
|
188
188
|
|
@@ -201,7 +201,7 @@ RUN uv sync --no-cache
|
|
201
201
|
|
202
202
|
COPY README.m[d] /beamlit/README.md
|
203
203
|
COPY LICENS[E] /beamlit/LICENSE
|
204
|
-
COPY
|
204
|
+
COPY {settings.server.directory} /beamlit/src
|
205
205
|
|
206
206
|
ENV PATH="/beamlit/.venv/bin:$PATH"
|
207
207
|
|
@@ -226,11 +226,11 @@ def generate_beamlit_deployment(directory: str):
|
|
226
226
|
logger.info(f"Importing server module: {settings.server.module}")
|
227
227
|
functions: list[tuple[Resource, Function]] = []
|
228
228
|
agents: list[tuple[Resource, Agent]] = []
|
229
|
-
for resource in get_resources("agent"):
|
229
|
+
for resource in get_resources("agent", settings.server.directory):
|
230
230
|
agent = get_beamlit_deployment_from_resource(resource)
|
231
231
|
if agent:
|
232
232
|
agents.append((resource, agent))
|
233
|
-
for resource in get_resources("function"):
|
233
|
+
for resource in get_resources("function", settings.server.directory):
|
234
234
|
function = get_beamlit_deployment_from_resource(resource)
|
235
235
|
if function:
|
236
236
|
functions.append((resource, function))
|
@@ -251,6 +251,10 @@ def generate_beamlit_deployment(directory: str):
|
|
251
251
|
with open(os.path.join(agent_dir, f"Dockerfile"), "w") as f:
|
252
252
|
content = dockerfile("agent", resource, agent)
|
253
253
|
f.write(content)
|
254
|
+
# write destination docker
|
255
|
+
with open(os.path.join(agent_dir, f"destination.txt"), "w") as f:
|
256
|
+
content = agent.spec.runtime.image
|
257
|
+
f.write(content)
|
254
258
|
for resource, function in functions:
|
255
259
|
# write deployment file
|
256
260
|
function_dir = os.path.join(functions_dir, function.metadata.name)
|
@@ -262,3 +266,7 @@ def generate_beamlit_deployment(directory: str):
|
|
262
266
|
with open(os.path.join(function_dir, f"Dockerfile"), "w") as f:
|
263
267
|
content = dockerfile("function", resource, function)
|
264
268
|
f.write(content)
|
269
|
+
# write destination docker
|
270
|
+
with open(os.path.join(function_dir, f"destination.txt"), "w") as f:
|
271
|
+
content = function.spec.runtime.image
|
272
|
+
f.write(content)
|
beamlit/deploy/parser.py
CHANGED
@@ -7,6 +7,7 @@ from typing import Callable, Literal
|
|
7
7
|
|
8
8
|
from beamlit.models import StoreFunctionParameter
|
9
9
|
|
10
|
+
|
10
11
|
@dataclass
|
11
12
|
class Resource:
|
12
13
|
type: Literal["agent", "function"]
|
@@ -16,7 +17,7 @@ class Resource:
|
|
16
17
|
func: Callable
|
17
18
|
|
18
19
|
|
19
|
-
def get_resources(from_decorator, dir
|
20
|
+
def get_resources(from_decorator, dir) -> list[Resource]:
|
20
21
|
"""
|
21
22
|
Scans through Python files in a directory to find functions decorated with a specific decorator.
|
22
23
|
|
beamlit/run.py
CHANGED
@@ -3,7 +3,7 @@ from typing import Any
|
|
3
3
|
|
4
4
|
import requests
|
5
5
|
from beamlit.client import AuthenticatedClient
|
6
|
-
from beamlit.common
|
6
|
+
from beamlit.common import HTTPError, get_settings
|
7
7
|
|
8
8
|
|
9
9
|
class RunClient:
|
@@ -45,4 +45,6 @@ class RunClient:
|
|
45
45
|
kwargs["json"] = json
|
46
46
|
|
47
47
|
response = client.request(method, url, **kwargs)
|
48
|
+
if response.status_code >= 400:
|
49
|
+
raise HTTPError(response.status_code, response.text)
|
48
50
|
return response
|
beamlit/serve/app.py
CHANGED
@@ -7,13 +7,10 @@ from logging import getLogger
|
|
7
7
|
from uuid import uuid4
|
8
8
|
|
9
9
|
from asgi_correlation_id import CorrelationIdMiddleware
|
10
|
-
from beamlit.common
|
11
|
-
from beamlit.common.instrumentation import (
|
12
|
-
|
13
|
-
|
14
|
-
get_span_exporter,
|
15
|
-
instrument_app,
|
16
|
-
)
|
10
|
+
from beamlit.common import HTTPError, get_settings, init
|
11
|
+
from beamlit.common.instrumentation import (get_metrics_exporter,
|
12
|
+
get_resource_attributes,
|
13
|
+
get_span_exporter, instrument_app)
|
17
14
|
from fastapi import FastAPI, Request, Response
|
18
15
|
from fastapi.responses import JSONResponse
|
19
16
|
from traceloop.sdk import Traceloop
|
@@ -90,10 +87,17 @@ async def root(request: Request):
|
|
90
87
|
content = {"error": str(e)}
|
91
88
|
if settings.environment == "development":
|
92
89
|
content["traceback"] = str(traceback.format_exc())
|
93
|
-
logger.error(
|
90
|
+
logger.error(str(traceback.format_exc()))
|
94
91
|
return JSONResponse(status_code=400, content=content)
|
92
|
+
except HTTPError as e:
|
93
|
+
content = {"error": e.message, "status_code": e.status_code}
|
94
|
+
if settings.environment == "development":
|
95
|
+
content["traceback"] = str(traceback.format_exc())
|
96
|
+
logger.error(f"{e.status_code} {str(traceback.format_exc())}")
|
97
|
+
return JSONResponse(status_code=e.status_code, content=content)
|
95
98
|
except Exception as e:
|
96
99
|
content = {"error": f"Internal server error, {e}"}
|
97
100
|
if settings.environment == "development":
|
98
101
|
content["traceback"] = str(traceback.format_exc())
|
102
|
+
logger.error(str(traceback.format_exc()))
|
99
103
|
return JSONResponse(status_code=500, content=content)
|
@@ -2,7 +2,7 @@ beamlit/__init__.py,sha256=545gFC-wLLwUktWcOAjUWe_Glha40tBetRTOYSfHnbI,164
|
|
2
2
|
beamlit/client.py,sha256=PnR6ybZk5dLIJPnDKAf2epHOeQC_7yL0fG4muvphHjA,12695
|
3
3
|
beamlit/errors.py,sha256=gO8GBmKqmSNgAg-E5oT-oOyxztvp7V_6XG7OUTT15q0,546
|
4
4
|
beamlit/py.typed,sha256=8ZJUsxZiuOy1oJeVhsTWQhTG_6pTVHVXk5hJL79ebTk,25
|
5
|
-
beamlit/run.py,sha256=
|
5
|
+
beamlit/run.py,sha256=BCVQXdtIzJedxqGSWttYlJphO5ru7VNDYrUAQmCNq_c,1445
|
6
6
|
beamlit/types.py,sha256=E1hhDh_zXfsSQ0NCt9-uw90_Mr5iIlsdfnfvxv5HarU,1005
|
7
7
|
beamlit/agents/__init__.py,sha256=nf1iwQwGtCG6nDqyVhxfWoqR6dv6X3bvSpCeqkTCFaM,101
|
8
8
|
beamlit/agents/chain.py,sha256=HzBs3nI4xaH86I_r-M-HGGp6roXsJxMx-qXl_GrJaY0,2831
|
@@ -128,17 +128,18 @@ beamlit/authentication/authentication.py,sha256=8R-3WdQSykNjCbebAW2p8Glvw5nlAmSE
|
|
128
128
|
beamlit/authentication/clientcredentials.py,sha256=cxZPPu--CgizwqX0pdfFQ91gJt1EFKwyy-aBB_dXX7I,3990
|
129
129
|
beamlit/authentication/credentials.py,sha256=p_1xenabCbQuRz7BiFk7oTK4uCxAt_zoyku5o-jcKGE,5343
|
130
130
|
beamlit/authentication/device_mode.py,sha256=tmr22gllKOZwBRub_QjF5pYa425x-nE8tQNpZ_EGR6g,3644
|
131
|
-
beamlit/common/__init__.py,sha256=
|
131
|
+
beamlit/common/__init__.py,sha256=vj4_boIBVitMsaQR8BqBqE2eupOIh6MWBAYlYyCCH98,341
|
132
|
+
beamlit/common/error.py,sha256=f9oJDFxhoHK-vpjxBgEp0NwWIk0N_THPemUI7uQxVzU,270
|
132
133
|
beamlit/common/generate.py,sha256=LtdCju_QayRS4lZrrb_0VHqWWvTcv4Mbf-iV1TB_Qko,7522
|
133
134
|
beamlit/common/instrumentation.py,sha256=MsBDfFcMYqGDiHHj4j5hLHE4EWxZExkhmCeFS3SKzJY,3181
|
134
135
|
beamlit/common/logger.py,sha256=VFRbaZh93n8ZGugeeYKe88IP2nI3g2JNa7XN4j8wVJE,1116
|
135
136
|
beamlit/common/secrets.py,sha256=sid81bOe3LflkMKDHwBsBs9nIju8bp5-v9qU9gkyNMc,212
|
136
|
-
beamlit/common/settings.py,sha256=
|
137
|
+
beamlit/common/settings.py,sha256=2V06qodZHwPBqRDdpPyZhdCO7HeMjWr2rkEePOgmHqE,5936
|
137
138
|
beamlit/common/utils.py,sha256=jouz5igBvT37Xn_e94-foCHyQczVim-UzVcoIF6RWJ4,657
|
138
139
|
beamlit/deploy/__init__.py,sha256=GS7l7Jtm2yKs7iNLKcfjYO-rAhUzggQ3xiYSf3oxLBY,91
|
139
|
-
beamlit/deploy/deploy.py,sha256=
|
140
|
+
beamlit/deploy/deploy.py,sha256=AbQxSVGAPbwBn4wKPiMEF5GjtGa8q4u3DBuhnYdz4GI,9706
|
140
141
|
beamlit/deploy/format.py,sha256=78tOoeNPJ8969AhQTeFlIwZgQ3un8gmTSMmrYbRQSds,1818
|
141
|
-
beamlit/deploy/parser.py,sha256=
|
142
|
+
beamlit/deploy/parser.py,sha256=Ga0poCZkoRnuTw082QnTcNGCBJncoRAnVsn8-1FsaJE,6907
|
142
143
|
beamlit/functions/__init__.py,sha256=_RPG1Bfg54JGdIPnViAU6n9zD7E1cDNsdXi8oYGskzE,138
|
143
144
|
beamlit/functions/decorator.py,sha256=NsdIWs55Yhn-TUO855DIE2AarV-euXtl7Qt5c2W3AUo,3239
|
144
145
|
beamlit/functions/github/__init__.py,sha256=gYnUkeegukOfbymdabuuJkScvH-_ZJygX05BoqkPn0o,49
|
@@ -251,10 +252,10 @@ beamlit/models/websocket_channel.py,sha256=jg3vN7yS_oOIwGtndtIUr1LsyEA58RXLXahqS
|
|
251
252
|
beamlit/models/workspace.py,sha256=l__bIpbA4oJvxXo7UbEoCcqkvu9MiNt5aXXpZ3bgwHg,4309
|
252
253
|
beamlit/models/workspace_labels.py,sha256=WbnUY6eCTkUNdY7hhhSF-KQCl8fWFfkCf7hzCTiNp4A,1246
|
253
254
|
beamlit/models/workspace_user.py,sha256=70CcifQWYbeWG7TDui4pblTzUe5sVK0AS19vNCzKE8g,3423
|
254
|
-
beamlit/serve/app.py,sha256=
|
255
|
+
beamlit/serve/app.py,sha256=k9THiOqcPs4lcQQhZaucLcboXCR_5AKP9AFCMNRbdPI,3559
|
255
256
|
beamlit/serve/middlewares/__init__.py,sha256=1dVmnOmhAQWvWktqHkKSIX-YoF6fmMU8xkUQuhg_rJU,148
|
256
257
|
beamlit/serve/middlewares/accesslog.py,sha256=Mu4T4_9OvHybjA0ApzZFpgi2C8f3X1NbUk-76v634XM,631
|
257
258
|
beamlit/serve/middlewares/processtime.py,sha256=lDAaIasZ4bwvN-HKHvZpaD9r-yrkVNZYx4abvbjbrCg,411
|
258
|
-
beamlit-0.0.
|
259
|
-
beamlit-0.0.
|
260
|
-
beamlit-0.0.
|
259
|
+
beamlit-0.0.30.dist-info/METADATA,sha256=UNYwevCSKK872KofAvX_-dHOIuFA_9LcrmF4lgT4mFg,2401
|
260
|
+
beamlit-0.0.30.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
261
|
+
beamlit-0.0.30.dist-info/RECORD,,
|
File without changes
|