llama-deploy-core 0.3.0a11__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.
- llama_deploy/core/client/manage_client.py +77 -86
- llama_deploy/core/deployment_config.py +5 -2
- llama_deploy/core/schema/__init__.py +4 -1
- llama_deploy/core/schema/base.py +0 -9
- llama_deploy/core/schema/deployments.py +7 -0
- llama_deploy/core/schema/projects.py +1 -0
- llama_deploy/core/schema/public.py +5 -0
- llama_deploy/core/server/manage_api/__init__.py +5 -1
- llama_deploy/core/server/manage_api/_abstract_deployments_service.py +17 -1
- llama_deploy/core/server/manage_api/_create_deployments_router.py +25 -7
- {llama_deploy_core-0.3.0a11.dist-info → llama_deploy_core-0.3.0a13.dist-info}/METADATA +3 -2
- llama_deploy_core-0.3.0a13.dist-info/RECORD +21 -0
- llama_deploy_core-0.3.0a11.dist-info/RECORD +0 -20
- {llama_deploy_core-0.3.0a11.dist-info → llama_deploy_core-0.3.0a13.dist-info}/WHEEL +0 -0
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import
|
|
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
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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(
|
|
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
|
|
57
|
-
|
|
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) ->
|
|
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
|
-
) ->
|
|
167
|
+
) -> AsyncIterator[LogEvent]:
|
|
151
168
|
"""Stream logs as LogEvent items from the control plane using SSE.
|
|
152
169
|
|
|
153
|
-
|
|
170
|
+
Yields `LogEvent` models until the stream ends (e.g., rollout completes).
|
|
154
171
|
"""
|
|
155
|
-
|
|
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
|
-
|
|
170
|
-
|
|
171
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
]
|
llama_deploy/core/schema/base.py
CHANGED
|
@@ -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
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
from ._abstract_deployments_service import
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
183
|
+
base_router.include_router(public_router, prefix="/deployments-public")
|
|
184
|
+
base_router.include_router(router, prefix="/deployments")
|
|
185
|
+
return base_router
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: llama-deploy-core
|
|
3
|
-
Version: 0.3.
|
|
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
|
|
10
11
|
Requires-Dist: httpx>=0.27.0 ; extra == 'client'
|
|
11
12
|
Requires-Dist: fastapi>=0.115.0 ; extra == 'server'
|
|
12
|
-
Requires-Python: >=3.
|
|
13
|
+
Requires-Python: >=3.11, <4
|
|
13
14
|
Provides-Extra: client
|
|
14
15
|
Provides-Extra: server
|
|
15
16
|
Description-Content-Type: text/markdown
|
|
@@ -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.0a11.dist-info/WHEEL,sha256=66530aef82d5020ef5af27ae0123c71abb9261377c5bc519376c671346b12918,79
|
|
19
|
-
llama_deploy_core-0.3.0a11.dist-info/METADATA,sha256=c8e44fcfa8c82bb7d0a3c2fa07f6fd8381e30f3876f01deb929dc199d9b5260d,627
|
|
20
|
-
llama_deploy_core-0.3.0a11.dist-info/RECORD,,
|
|
File without changes
|