llama-deploy-core 0.3.0a12__py3-none-any.whl → 0.3.0a13__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.
@@ -1,8 +1,7 @@
1
- import contextlib
2
- from typing import Iterator, List
1
+ from typing import AsyncIterator, Callable, List
3
2
 
4
3
  import httpx
5
- from llama_deploy.core.schema.base import LogEvent
4
+ from llama_deploy.core.schema import LogEvent
6
5
  from llama_deploy.core.schema.deployments import (
7
6
  DeploymentCreate,
8
7
  DeploymentResponse,
@@ -14,30 +13,41 @@ from llama_deploy.core.schema.git_validation import (
14
13
  RepositoryValidationResponse,
15
14
  )
16
15
  from llama_deploy.core.schema.projects import ProjectsListResponse, ProjectSummary
16
+ from llama_deploy.core.schema.public import VersionResponse
17
17
 
18
18
 
19
19
  class ClientError(Exception):
20
20
  """Base class for client errors."""
21
21
 
22
- def __init__(self, message: str) -> None:
22
+ def __init__(self, message: str, status_code: int | None = None) -> None:
23
23
  super().__init__(message)
24
+ self.status_code = status_code
24
25
 
25
26
 
26
27
  class BaseClient:
27
- def __init__(self, base_url: str) -> None:
28
+ def __init__(self, base_url: str, api_key: str | None = None) -> None:
28
29
  self.base_url = base_url.rstrip("/")
29
- self.client = httpx.Client(
30
+
31
+ headers: dict[str, str] = {}
32
+ if api_key:
33
+ headers["Authorization"] = f"Bearer {api_key}"
34
+
35
+ self.client = httpx.AsyncClient(
30
36
  base_url=self.base_url,
37
+ headers=headers,
31
38
  event_hooks={"response": [self._handle_response]},
32
39
  )
33
- self.hookless_client = httpx.Client(base_url=self.base_url)
40
+ self.hookless_client = httpx.AsyncClient(
41
+ base_url=self.base_url, headers=headers
42
+ )
34
43
 
35
- def _handle_response(self, response: httpx.Response) -> None:
44
+ async def _handle_response(self, response: httpx.Response) -> None:
36
45
  try:
37
46
  response.raise_for_status()
38
47
  except httpx.HTTPStatusError as e:
39
48
  try:
40
- response.read()
49
+ # Ensure content is loaded for JSON/text extraction
50
+ await response.aread()
41
51
  error_data = e.response.json()
42
52
  if isinstance(error_data, dict) and "detail" in error_data:
43
53
  error_message = error_data["detail"]
@@ -45,24 +55,30 @@ class BaseClient:
45
55
  error_message = str(error_data)
46
56
  except (ValueError, KeyError):
47
57
  error_message = e.response.text
48
- raise ClientError(f"HTTP {e.response.status_code}: {error_message}") from e
58
+ raise ClientError(
59
+ f"HTTP {e.response.status_code}: {error_message}",
60
+ e.response.status_code,
61
+ ) from e
49
62
  except httpx.RequestError as e:
50
63
  raise ClientError(f"Request failed: {e}") from e
51
64
 
65
+ async def aclose(self) -> None:
66
+ await self.client.aclose()
67
+ await self.hookless_client.aclose()
68
+
52
69
 
53
70
  class ControlPlaneClient(BaseClient):
54
71
  """Unscoped client for non-project endpoints."""
55
72
 
56
- def health_check(self) -> dict:
57
- response = self.client.get("/health")
58
- return response.json()
73
+ def __init__(self, base_url: str, api_key: str | None = None) -> None:
74
+ super().__init__(base_url, api_key)
59
75
 
60
- def server_version(self) -> dict:
61
- response = self.client.get("/version")
62
- return response.json()
76
+ async def server_version(self) -> VersionResponse:
77
+ response = await self.client.get("/api/v1beta1/deployments-public/version")
78
+ return VersionResponse.model_validate(response.json())
63
79
 
64
- def list_projects(self) -> List[ProjectSummary]:
65
- response = self.client.get("/api/v1beta1/deployments/list-projects")
80
+ async def list_projects(self) -> List[ProjectSummary]:
81
+ response = await self.client.get("/api/v1beta1/deployments/list-projects")
66
82
  projects_response = ProjectsListResponse.model_validate(response.json())
67
83
  return [project for project in projects_response.projects]
68
84
 
@@ -74,62 +90,63 @@ class ProjectClient(BaseClient):
74
90
  self,
75
91
  base_url: str,
76
92
  project_id: str,
93
+ api_key: str | None = None,
77
94
  ) -> None:
78
- super().__init__(base_url)
95
+ super().__init__(base_url, api_key)
79
96
  self.project_id = project_id
80
97
 
81
- def list_deployments(self) -> List[DeploymentResponse]:
82
- response = self.client.get(
98
+ async def list_deployments(self) -> List[DeploymentResponse]:
99
+ response = await self.client.get(
83
100
  "/api/v1beta1/deployments",
84
101
  params={"project_id": self.project_id},
85
102
  )
86
103
  deployments_response = DeploymentsListResponse.model_validate(response.json())
87
104
  return [deployment for deployment in deployments_response.deployments]
88
105
 
89
- def get_deployment(
106
+ async def get_deployment(
90
107
  self, deployment_id: str, include_events: bool = False
91
108
  ) -> DeploymentResponse:
92
- response = self.client.get(
109
+ response = await self.client.get(
93
110
  f"/api/v1beta1/deployments/{deployment_id}",
94
111
  params={"project_id": self.project_id, "include_events": include_events},
95
112
  )
96
113
  return DeploymentResponse.model_validate(response.json())
97
114
 
98
- def create_deployment(
115
+ async def create_deployment(
99
116
  self, deployment_data: DeploymentCreate
100
117
  ) -> DeploymentResponse:
101
- response = self.client.post(
118
+ response = await self.client.post(
102
119
  "/api/v1beta1/deployments",
103
120
  params={"project_id": self.project_id},
104
121
  json=deployment_data.model_dump(exclude_none=True),
105
122
  )
106
123
  return DeploymentResponse.model_validate(response.json())
107
124
 
108
- def delete_deployment(self, deployment_id: str) -> None:
109
- self.client.delete(
125
+ async def delete_deployment(self, deployment_id: str) -> None:
126
+ await self.client.delete(
110
127
  f"/api/v1beta1/deployments/{deployment_id}",
111
128
  params={"project_id": self.project_id},
112
129
  )
113
130
 
114
- def update_deployment(
131
+ async def update_deployment(
115
132
  self,
116
133
  deployment_id: str,
117
134
  update_data: DeploymentUpdate,
118
135
  ) -> DeploymentResponse:
119
- response = self.client.patch(
136
+ response = await self.client.patch(
120
137
  f"/api/v1beta1/deployments/{deployment_id}",
121
138
  params={"project_id": self.project_id},
122
139
  json=update_data.model_dump(),
123
140
  )
124
141
  return DeploymentResponse.model_validate(response.json())
125
142
 
126
- def validate_repository(
143
+ async def validate_repository(
127
144
  self,
128
145
  repo_url: str,
129
146
  deployment_id: str | None = None,
130
147
  pat: str | None = None,
131
148
  ) -> RepositoryValidationResponse:
132
- response = self.client.post(
149
+ response = await self.client.post(
133
150
  "/api/v1beta1/deployments/validate-repository",
134
151
  params={"project_id": self.project_id},
135
152
  json=RepositoryValidationRequest(
@@ -140,21 +157,19 @@ class ProjectClient(BaseClient):
140
157
  )
141
158
  return RepositoryValidationResponse.model_validate(response.json())
142
159
 
143
- def stream_deployment_logs(
160
+ async def stream_deployment_logs(
144
161
  self,
145
162
  deployment_id: str,
146
163
  *,
147
164
  include_init_containers: bool = False,
148
165
  since_seconds: int | None = None,
149
166
  tail_lines: int | None = None,
150
- ) -> tuple["Closer", Iterator[LogEvent]]:
167
+ ) -> AsyncIterator[LogEvent]:
151
168
  """Stream logs as LogEvent items from the control plane using SSE.
152
169
 
153
- This yields `LogEvent` models until the stream ends (e.g. rollout).
170
+ Yields `LogEvent` models until the stream ends (e.g., rollout completes).
154
171
  """
155
- # Use a separate client without response hooks so we don't consume the stream
156
-
157
- params = {
172
+ params: dict[str, object] = {
158
173
  "project_id": self.project_id,
159
174
  "include_init_containers": include_init_containers,
160
175
  }
@@ -166,54 +181,30 @@ class ProjectClient(BaseClient):
166
181
  url = f"/api/v1beta1/deployments/{deployment_id}/logs"
167
182
  headers = {"Accept": "text/event-stream"}
168
183
 
169
- stack = contextlib.ExitStack()
170
- response = stack.enter_context(
171
- self.hookless_client.stream(
172
- "GET", url, params=params, headers=headers, timeout=None
173
- )
174
- )
175
- try:
184
+ async with self.hookless_client.stream(
185
+ "GET", url, params=params, headers=headers, timeout=None
186
+ ) as response:
176
187
  response.raise_for_status()
177
- except Exception:
178
- stack.close()
179
- raise
180
-
181
- return stack.close, _iterate_log_stream(response, stack.close)
182
-
183
-
184
- def _iterate_log_stream(
185
- response: httpx.Response, closer: "Closer"
186
- ) -> Iterator[LogEvent]:
187
- event_name: str | None = None
188
- data_lines: list[str] = []
189
-
190
- try:
191
- for line in response.iter_lines():
192
- if line is None:
193
- continue
194
- line = line.decode() if isinstance(line, (bytes, bytearray)) else line
195
- print("got line", line)
196
- if line.startswith("event:"):
197
- event_name = line[len("event:") :].strip()
198
- elif line.startswith("data:"):
199
- data_lines.append(line[len("data:") :].lstrip())
200
- elif line.strip() == "":
201
- if event_name == "log" and data_lines:
202
- data_str = "\n".join(data_lines)
203
- try:
204
- yield LogEvent.model_validate_json(data_str)
205
- print("yielded log event", data_str)
206
- except Exception:
207
- # If parsing fails, skip malformed event
208
- pass
209
- # reset for next event
210
- event_name = None
211
- data_lines = []
212
- finally:
213
- try:
214
- closer()
215
- except Exception:
216
- pass
217
-
218
188
 
219
- type Closer = callable[tuple[()], None]
189
+ event_name: str | None = None
190
+ data_lines: list[str] = []
191
+ async for line in response.aiter_lines():
192
+ if line is None:
193
+ continue
194
+ line = line.decode() if isinstance(line, (bytes, bytearray)) else line
195
+ if line.startswith("event:"):
196
+ event_name = line[len("event:") :].strip()
197
+ elif line.startswith("data:"):
198
+ data_lines.append(line[len("data:") :].lstrip())
199
+ elif line.strip() == "":
200
+ if event_name == "log" and data_lines:
201
+ data_str = "\n".join(data_lines)
202
+ try:
203
+ yield LogEvent.model_validate_json(data_str)
204
+ except Exception:
205
+ pass
206
+ event_name = None
207
+ data_lines = []
208
+
209
+
210
+ Closer = Callable[[], None]
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import json
4
4
  import tomllib
5
5
  from pathlib import Path
6
- from typing import Any
6
+ from typing import Any, TypeVar
7
7
 
8
8
  import yaml
9
9
  from llama_deploy.core.path_util import validate_path_traversal
@@ -229,7 +229,10 @@ class DeploymentConfig(BaseModel):
229
229
  )
230
230
 
231
231
 
232
- def _pick_non_default[T](a: T, b: T, default: T) -> T:
232
+ T = TypeVar("T")
233
+
234
+
235
+ def _pick_non_default(a: T, b: T, default: T) -> T:
233
236
  if a != default:
234
237
  return a
235
238
  return b or default
@@ -1,4 +1,4 @@
1
- from .base import Base, LogEvent
1
+ from .base import Base
2
2
  from .deployments import (
3
3
  DeploymentCreate,
4
4
  DeploymentResponse,
@@ -6,10 +6,12 @@ from .deployments import (
6
6
  DeploymentUpdate,
7
7
  LlamaDeploymentPhase,
8
8
  LlamaDeploymentSpec,
9
+ LogEvent,
9
10
  apply_deployment_update,
10
11
  )
11
12
  from .git_validation import RepositoryValidationRequest, RepositoryValidationResponse
12
13
  from .projects import ProjectsListResponse, ProjectSummary
14
+ from .public import VersionResponse
13
15
 
14
16
  __all__ = [
15
17
  "Base",
@@ -25,4 +27,5 @@ __all__ = [
25
27
  "RepositoryValidationRequest",
26
28
  "ProjectSummary",
27
29
  "ProjectsListResponse",
30
+ "VersionResponse",
28
31
  ]
@@ -1,5 +1,3 @@
1
- from datetime import datetime
2
-
3
1
  from pydantic import BaseModel, ConfigDict
4
2
 
5
3
  base_config = ConfigDict(
@@ -20,10 +18,3 @@ base_config = ConfigDict(
20
18
 
21
19
  class Base(BaseModel):
22
20
  model_config = base_config
23
-
24
-
25
- class LogEvent(Base):
26
- pod: str
27
- container: str
28
- text: str
29
- timestamp: datetime
@@ -205,3 +205,10 @@ def apply_deployment_update(
205
205
  secret_adds=secret_adds,
206
206
  secret_removes=secret_removes,
207
207
  )
208
+
209
+
210
+ class LogEvent(Base):
211
+ pod: str
212
+ container: str
213
+ text: str
214
+ timestamp: datetime
@@ -5,6 +5,7 @@ class ProjectSummary(Base):
5
5
  """Summary of a project with deployment count"""
6
6
 
7
7
  project_id: str
8
+ project_name: str
8
9
  deployment_count: int
9
10
 
10
11
 
@@ -0,0 +1,5 @@
1
+ from .base import Base
2
+
3
+
4
+ class VersionResponse(Base):
5
+ version: str
@@ -1,9 +1,13 @@
1
- from ._abstract_deployments_service import AbstractDeploymentsService
1
+ from ._abstract_deployments_service import (
2
+ AbstractDeploymentsService,
3
+ AbstractPublicDeploymentsService,
4
+ )
2
5
  from ._create_deployments_router import create_v1beta1_deployments_router
3
6
  from ._exceptions import DeploymentNotFoundError, ReplicaSetNotFoundError
4
7
 
5
8
  __all__ = [
6
9
  "AbstractDeploymentsService",
10
+ "AbstractPublicDeploymentsService",
7
11
  "create_v1beta1_deployments_router",
8
12
  "DeploymentNotFoundError",
9
13
  "ReplicaSetNotFoundError",
@@ -2,11 +2,27 @@ from abc import ABC, abstractmethod
2
2
  from typing import AsyncGenerator, cast
3
3
 
4
4
  from llama_deploy.core import schema
5
- from llama_deploy.core.schema.base import LogEvent
5
+ from llama_deploy.core.schema import LogEvent
6
6
  from llama_deploy.core.schema.deployments import DeploymentResponse
7
7
 
8
8
 
9
+ class AbstractPublicDeploymentsService(ABC):
10
+ @abstractmethod
11
+ async def get_version(self) -> schema.VersionResponse:
12
+ """
13
+ Get the version of the server
14
+ """
15
+ ...
16
+
17
+
9
18
  class AbstractDeploymentsService(ABC):
19
+ @abstractmethod
20
+ async def get_projects(self) -> schema.ProjectsListResponse:
21
+ """
22
+ Get a list of projects
23
+ """
24
+ ...
25
+
10
26
  @abstractmethod
11
27
  async def validate_repository(
12
28
  self,
@@ -1,14 +1,16 @@
1
1
  import logging
2
2
  from typing import Awaitable, Callable
3
3
 
4
- from fastapi import APIRouter, Depends, HTTPException, Request, Response
4
+ from fastapi import APIRouter, Depends, HTTPException, Request, Response, params
5
5
  from fastapi.params import Query
6
6
  from fastapi.responses import StreamingResponse
7
- from llama_deploy.control_plane import k8s_client
8
7
  from llama_deploy.core import schema
9
8
  from typing_extensions import Annotated
10
9
 
11
- from ._abstract_deployments_service import AbstractDeploymentsService
10
+ from ._abstract_deployments_service import (
11
+ AbstractDeploymentsService,
12
+ AbstractPublicDeploymentsService,
13
+ )
12
14
  from ._exceptions import DeploymentNotFoundError, ReplicaSetNotFoundError
13
15
 
14
16
  logger = logging.getLogger(__name__)
@@ -20,15 +22,29 @@ async def get_project_id(project_id: Annotated[str, Query()]) -> str:
20
22
 
21
23
  def create_v1beta1_deployments_router(
22
24
  deployments_service: AbstractDeploymentsService,
25
+ public_service: AbstractPublicDeploymentsService,
23
26
  get_project_id: Callable[[str], Awaitable[str]] = get_project_id,
27
+ dependencies: list[params.Depends] = [],
28
+ public_dependencies: list[params.Depends] = [],
24
29
  ) -> APIRouter:
25
- router = APIRouter(prefix="/api/v1beta1/deployments", tags=["v1beta1-deployments"])
30
+ base_router = APIRouter(prefix="/api/v1beta1")
31
+ public_router = APIRouter(
32
+ tags=["v1beta1-deployments-public"],
33
+ dependencies=public_dependencies,
34
+ )
35
+ router = APIRouter(
36
+ tags=["v1beta1-deployments"],
37
+ dependencies=dependencies,
38
+ )
39
+
40
+ @public_router.get("/version")
41
+ async def get_version() -> schema.VersionResponse:
42
+ return await public_service.get_version()
26
43
 
27
44
  @router.get("/list-projects")
28
45
  async def get_projects() -> schema.ProjectsListResponse:
29
46
  """Get all unique projects with their deployment counts"""
30
- projects_data = await k8s_client.get_projects_with_deployment_count()
31
- return schema.ProjectsListResponse(projects=projects_data)
47
+ return await deployments_service.get_projects()
32
48
 
33
49
  @router.post("/validate-repository")
34
50
  async def validate_repository(
@@ -164,4 +180,6 @@ def create_v1beta1_deployments_router(
164
180
  # Deployment exists but hasn't created a ReplicaSet yet
165
181
  raise HTTPException(status_code=409, detail=str(e))
166
182
 
167
- return router
183
+ base_router.include_router(public_router, prefix="/deployments-public")
184
+ base_router.include_router(router, prefix="/deployments")
185
+ return base_router
@@ -1,9 +1,10 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: llama-deploy-core
3
- Version: 0.3.0a12
3
+ Version: 0.3.0a13
4
4
  Summary: Core models and schemas for LlamaDeploy
5
5
  License: MIT
6
6
  Requires-Dist: fastapi>=0.115.0
7
+ Requires-Dist: overrides>=7.7.0
7
8
  Requires-Dist: pydantic>=2.0.0
8
9
  Requires-Dist: pyyaml>=6.0.2
9
10
  Requires-Dist: types-pyyaml>=6.0.12.20250822
@@ -0,0 +1,21 @@
1
+ llama_deploy/core/__init__.py,sha256=112612bf2e928c2e0310d6556bb13fc28c00db70297b90a8527486cd2562e408,43
2
+ llama_deploy/core/client/manage_client.py,sha256=87ec120c3d8e781a7c5ea5fe9cd75fb90620c52500bbf7bfe25dbdf0fbba7e54,7715
3
+ llama_deploy/core/config.py,sha256=69bb0ea8ac169eaa4e808cd60a098b616bddd3145d26c6c35e56db38496b0e6a,35
4
+ llama_deploy/core/deployment_config.py,sha256=b052fa66bd140fa39dea2de6cda362b39f8aca22f9c1cc0011c9f4a025263d0c,15117
5
+ llama_deploy/core/git/git_util.py,sha256=c581c1da13871b4e89eda58f56ddb074139454c06ae9b04c0b396fdb2b9a5176,9193
6
+ llama_deploy/core/path_util.py,sha256=14d50c0c337c8450ed46cafc88436027056b365a48370a69cdb76c88d7c26fd1,798
7
+ llama_deploy/core/py.typed,sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855,0
8
+ llama_deploy/core/schema/__init__.py,sha256=d1459ee50c690779a682130eff72f61dc1a687d2d4b26d8a5d3620a72d92d831,802
9
+ llama_deploy/core/schema/base.py,sha256=2de6d23e58c36b6bb311ec0aea4b902661867056c1250c6b7ce3bad17141fe15,677
10
+ llama_deploy/core/schema/deployments.py,sha256=d9254d9a478d7aeaf3d28ec6205215ea892dcfb245966d726d69d0418e03b03d,6486
11
+ llama_deploy/core/schema/git_validation.py,sha256=27b306aa6ecabe58cab6381d92551545f263fe7550c58b3087115410bc71fd21,1915
12
+ llama_deploy/core/schema/projects.py,sha256=b3820037cd6d222bcc5fb2f1e74bde9741845a423dd01aa0fa65874e28ba802a,316
13
+ llama_deploy/core/schema/public.py,sha256=d73def6f5b642c0e7b738ff6ff6bc9d8ce2e7800da537e906c5721430e0ab4c1,71
14
+ llama_deploy/core/server/manage_api/__init__.py,sha256=e477ccab59cfd084edbad46f209972a282e623eb314d0847a754a46a16361db5,457
15
+ llama_deploy/core/server/manage_api/_abstract_deployments_service.py,sha256=85ceab2a343c3642db7f77d4a665d5710a14bca920bbfdc25c5f1168cce30b22,4638
16
+ llama_deploy/core/server/manage_api/_create_deployments_router.py,sha256=cde496f5922a74ae6199224abb25aefa1a357bb45c06ce25de79283d6f1a7174,6622
17
+ llama_deploy/core/server/manage_api/_exceptions.py,sha256=ee71cd9c2354a665e6905cd9cc752d2d65f71f0b936d33fec3c1c5229c38accf,246
18
+ llama_deploy/core/ui_build.py,sha256=290dafa951918e5593b9035570fa4c66791d7e5ea785bd372ad11e99e8283857,1514
19
+ llama_deploy_core-0.3.0a13.dist-info/WHEEL,sha256=66530aef82d5020ef5af27ae0123c71abb9261377c5bc519376c671346b12918,79
20
+ llama_deploy_core-0.3.0a13.dist-info/METADATA,sha256=74764be1b14a49b143f75cc1c41fa83fc6409a9abf9d5c3e1c9885e640f19f22,659
21
+ llama_deploy_core-0.3.0a13.dist-info/RECORD,,
@@ -1,20 +0,0 @@
1
- llama_deploy/core/__init__.py,sha256=112612bf2e928c2e0310d6556bb13fc28c00db70297b90a8527486cd2562e408,43
2
- llama_deploy/core/client/manage_client.py,sha256=c098a12def4ece9897d1d5d70c69bf2bd7140de5ec970cae30a5927901e2a3da,7499
3
- llama_deploy/core/config.py,sha256=69bb0ea8ac169eaa4e808cd60a098b616bddd3145d26c6c35e56db38496b0e6a,35
4
- llama_deploy/core/deployment_config.py,sha256=ff10cc96f2c64abc4761eb83c5372fd22f3770159b45503818264723b578de4e,15092
5
- llama_deploy/core/git/git_util.py,sha256=c581c1da13871b4e89eda58f56ddb074139454c06ae9b04c0b396fdb2b9a5176,9193
6
- llama_deploy/core/path_util.py,sha256=14d50c0c337c8450ed46cafc88436027056b365a48370a69cdb76c88d7c26fd1,798
7
- llama_deploy/core/py.typed,sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855,0
8
- llama_deploy/core/schema/__init__.py,sha256=cc60a6fb54983d7ca13e2cc86d414a0d006a79c20e44344701f9fbe3b1d21577,739
9
- llama_deploy/core/schema/base.py,sha256=c02e33e35e7e4540b3065a82267febeb6da169222210a1d1c2479f6a7f1c6a4b,802
10
- llama_deploy/core/schema/deployments.py,sha256=1e310548f6847ee000b06d655b3fec006148bd2994b4c6b7d073582a7c312ec1,6392
11
- llama_deploy/core/schema/git_validation.py,sha256=27b306aa6ecabe58cab6381d92551545f263fe7550c58b3087115410bc71fd21,1915
12
- llama_deploy/core/schema/projects.py,sha256=c97eda38207d80354c2ee3a237cba9c3f6838148197cfa2d97b9a18d3da1a38b,294
13
- llama_deploy/core/server/manage_api/__init__.py,sha256=ed814d76fcade150d43205631b12bcae0b06bc2b8456a81fee24d6cf867adbc8,370
14
- llama_deploy/core/server/manage_api/_abstract_deployments_service.py,sha256=1bb1fbe904f84f892f092fb82d931cb2c2ca6a7563a64fb6ab52be21c02d75e5,4290
15
- llama_deploy/core/server/manage_api/_create_deployments_router.py,sha256=9b3fd2eeae027e3095da4db1785cdcc971b49023de615efe13b0a9e5f649982d,6081
16
- llama_deploy/core/server/manage_api/_exceptions.py,sha256=ee71cd9c2354a665e6905cd9cc752d2d65f71f0b936d33fec3c1c5229c38accf,246
17
- llama_deploy/core/ui_build.py,sha256=290dafa951918e5593b9035570fa4c66791d7e5ea785bd372ad11e99e8283857,1514
18
- llama_deploy_core-0.3.0a12.dist-info/WHEEL,sha256=66530aef82d5020ef5af27ae0123c71abb9261377c5bc519376c671346b12918,79
19
- llama_deploy_core-0.3.0a12.dist-info/METADATA,sha256=b224c05824f8f1d3edaba70f2252be8874e7d98ec588dc7269f53e14b0ae2bc2,627
20
- llama_deploy_core-0.3.0a12.dist-info/RECORD,,