llama-deploy-appserver 0.3.17__py3-none-any.whl → 0.3.19__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.
@@ -19,7 +19,7 @@ from starlette.routing import Route
19
19
  from workflows import Context, Workflow
20
20
  from workflows.handler import WorkflowHandler
21
21
  from workflows.server import SqliteWorkflowStore, WorkflowServer
22
- from workflows.server.abstract_workflow_store import EmptyWorkflowStore
22
+ from workflows.server.memory_workflow_store import MemoryWorkflowStore
23
23
 
24
24
  logger = logging.getLogger()
25
25
 
@@ -95,7 +95,7 @@ class Deployment:
95
95
  def create_workflow_server(
96
96
  self, deployment_config: DeploymentConfig, settings: ApiserverSettings
97
97
  ) -> WorkflowServer:
98
- persistence = EmptyWorkflowStore()
98
+ persistence = MemoryWorkflowStore()
99
99
  if settings.persistence == "local":
100
100
  logger.info("Using local sqlite persistence for workflows")
101
101
  persistence = SqliteWorkflowStore(
@@ -125,7 +125,7 @@ class Deployment:
125
125
  f"/deployments/{config.name}{route.path}",
126
126
  route.endpoint,
127
127
  name=f"{config.name}_{route.name}",
128
- methods=route.methods,
128
+ methods=list(route.methods) if route.methods else None,
129
129
  include_in_schema=True, # change to false when schemas are added to workflow server
130
130
  tags=["workflows"],
131
131
  )
@@ -4,7 +4,8 @@ import platform
4
4
  import subprocess
5
5
  import sys
6
6
  import threading
7
- from typing import Callable, TextIO, cast
7
+ from dataclasses import dataclass
8
+ from typing import Callable, TextIO, Tuple, cast
8
9
 
9
10
 
10
11
  def run_process(
@@ -25,13 +26,13 @@ def run_process(
25
26
  use_pty = _should_use_pty(use_tty)
26
27
  prefixer = _make_prefixer(prefix, color_code, line_transform)
27
28
 
28
- process, sources, cleanup = _spawn_process(cmd, cwd=cwd, env=env, use_pty=use_pty)
29
+ spawned = _spawn_process(cmd, cwd=cwd, env=env, use_pty=use_pty)
29
30
  threads: list[threading.Thread] = []
30
31
  try:
31
- cleanup()
32
+ spawned.cleanup()
32
33
  _log_command(cmd, prefixer)
33
- threads = _start_stream_threads(sources, prefixer)
34
- ret = process.wait()
34
+ threads = _start_stream_threads(spawned.sources, prefixer)
35
+ ret = spawned.process.wait()
35
36
  if ret != 0:
36
37
  raise subprocess.CalledProcessError(ret, cmd)
37
38
  finally:
@@ -56,11 +57,11 @@ def spawn_process(
56
57
  use_pty = _should_use_pty(use_tty)
57
58
  prefixer = _make_prefixer(prefix, color_code, line_transform)
58
59
 
59
- process, sources, cleanup = _spawn_process(cmd, cwd=cwd, env=env, use_pty=use_pty)
60
- cleanup()
60
+ spawned = _spawn_process(cmd, cwd=cwd, env=env, use_pty=use_pty)
61
+ spawned.cleanup()
61
62
  _log_command(cmd, prefixer)
62
- _start_stream_threads(sources, prefixer)
63
- return process
63
+ _start_stream_threads(spawned.sources, prefixer)
64
+ return spawned.process
64
65
 
65
66
 
66
67
  @functools.cache
@@ -109,13 +110,20 @@ def should_use_color() -> bool:
109
110
  return _should_use_pty(None)
110
111
 
111
112
 
113
+ @dataclass
114
+ class SpawnProcessResult:
115
+ process: subprocess.Popen
116
+ sources: list[Tuple[int | TextIO, TextIO]]
117
+ cleanup: Callable[[], None]
118
+
119
+
112
120
  def _spawn_process(
113
121
  cmd: list[str],
114
122
  *,
115
123
  cwd: os.PathLike | None,
116
124
  env: dict[str, str] | None,
117
125
  use_pty: bool,
118
- ) -> tuple[subprocess.Popen, list[tuple[int | TextIO, TextIO]], Callable[[], None]]:
126
+ ) -> SpawnProcessResult:
119
127
  if use_pty:
120
128
  import pty
121
129
 
@@ -139,7 +147,7 @@ def _spawn_process(
139
147
  sources: list[tuple[int | TextIO, TextIO]] = [
140
148
  (master_fd, cast(TextIO, sys.stdout)),
141
149
  ]
142
- return process, sources, cleanup
150
+ return SpawnProcessResult(process, sources, cleanup)
143
151
 
144
152
  use_shell = False
145
153
  if platform.system() == "Windows":
@@ -161,10 +169,10 @@ def _spawn_process(
161
169
 
162
170
  assert process.stdout is not None and process.stderr is not None
163
171
  sources = [
164
- (process.stdout, cast(TextIO, sys.stdout)),
165
- (process.stderr, cast(TextIO, sys.stderr)),
172
+ (cast(int | TextIO, process.stdout), cast(TextIO, sys.stdout)),
173
+ (cast(int | TextIO, process.stderr), cast(TextIO, sys.stderr)),
166
174
  ]
167
- return process, sources, cleanup
175
+ return SpawnProcessResult(process, sources, cleanup)
168
176
 
169
177
 
170
178
  def _stream_source(
@@ -81,12 +81,12 @@ class AgentDataStore(AbstractWorkflowStore):
81
81
  filters = self._build_filters(handler)
82
82
  results = await self.client.search(filter=filters, page_size=1000)
83
83
  await asyncio.gather(
84
- *[self.client.delete_item(item_id=x.id) for x in results.items]
84
+ *[self.client.delete_item(item_id=x.id) for x in results.items if x.id]
85
85
  )
86
86
  return len(results.items)
87
87
 
88
88
  async def _get_item_id(self, handler: PersistentHandler) -> str | None:
89
- cached_id = self.cache.get(handler.handler_id, None)
89
+ cached_id = self.cache.get(handler.handler_id)
90
90
  if cached_id is not None:
91
91
  return cached_id
92
92
  results = await self.client.search(
@@ -19,10 +19,7 @@ class LRUCache(Generic[K, V]):
19
19
  def get(self, key: K, default: V | None = None) -> V | None:
20
20
  if key not in self._store:
21
21
  return default
22
- # mark as recently used
23
- value = self._store.pop(key)
24
- self._store[key] = value
25
- return value
22
+ return self[key]
26
23
 
27
24
  def set(self, key: K, value: V):
28
25
  if key in self._store:
@@ -37,7 +34,12 @@ class LRUCache(Generic[K, V]):
37
34
  return key in self._store
38
35
 
39
36
  def __getitem__(self, key: K) -> V:
40
- return self.get(key)
37
+ # mark as recently used
38
+ if key not in self._store:
39
+ raise KeyError(key)
40
+ value = self._store.pop(key)
41
+ self._store[key] = value
42
+ return value
41
43
 
42
44
  def __setitem__(self, key: K, value: V):
43
45
  self.set(key, value)
@@ -1,15 +1,15 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: llama-deploy-appserver
3
- Version: 0.3.17
3
+ Version: 0.3.19
4
4
  Summary: Application server components for LlamaDeploy
5
5
  Author: Massimiliano Pippi, Adrian Lyjak
6
6
  Author-email: Massimiliano Pippi <mpippi@gmail.com>, Adrian Lyjak <adrianlyjak@gmail.com>
7
7
  License: MIT
8
- Requires-Dist: llama-index-workflows[server]>=2.6.0
8
+ Requires-Dist: llama-index-workflows[server]>=2.9.1
9
9
  Requires-Dist: pydantic-settings>=2.10.1
10
10
  Requires-Dist: fastapi>=0.100.0
11
11
  Requires-Dist: websockets>=12.0
12
- Requires-Dist: llama-deploy-core>=0.3.17,<0.4.0
12
+ Requires-Dist: llama-deploy-core>=0.3.19,<0.4.0
13
13
  Requires-Dist: httpx>=0.24.0,<1.0.0
14
14
  Requires-Dist: prometheus-fastapi-instrumentator>=7.1.0
15
15
  Requires-Dist: packaging>=25.0
@@ -3,10 +3,10 @@ llama_deploy/appserver/app.py,sha256=8f45734ee7d3748fefb29d9d8bf987de3fda8983487
3
3
  llama_deploy/appserver/bootstrap.py,sha256=d0c7b4ad5bd64aa5070d993b1439006694a639010ae757b1d897680318173743,2573
4
4
  llama_deploy/appserver/configure_logging.py,sha256=194dd1ebed3c1d9065d9174f7828d557a577eaac8fb0443b3102430b1f578c19,6329
5
5
  llama_deploy/appserver/correlation_id.py,sha256=8ac5bc6160c707b93a9fb818b64dd369a4ef7a53f9f91a6b3d90c4cf446f7327,572
6
- llama_deploy/appserver/deployment.py,sha256=b813ac5abe71940b8535e7c66348192848df14b9cdca2ff2830d0bee60c8a26c,6397
6
+ llama_deploy/appserver/deployment.py,sha256=4cec5be1872005a275be74d96ed7a80fe417195bd2c3a3845a105b485c9de794,6430
7
7
  llama_deploy/appserver/deployment_config_parser.py,sha256=e2b6c483203d96ab795c4e55df15c694c20458d5a03fab89c2b71e481291a2d3,510
8
8
  llama_deploy/appserver/interrupts.py,sha256=14f262a0cedc00bb3aecd3d6c14c41ba0e88e7d2a6df02cd35b5bea1940822a2,1622
9
- llama_deploy/appserver/process_utils.py,sha256=5d449008cac17878e30aa0c47748f6b9feddcef72891e1a5190c8d86120fcb36,6297
9
+ llama_deploy/appserver/process_utils.py,sha256=2f501d31df2ab77ad249139801f885b956cc5750fb6d048079fc9f5ff12d403e,6518
10
10
  llama_deploy/appserver/py.typed,sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855,0
11
11
  llama_deploy/appserver/routers/__init__.py,sha256=ee2d14ebf4b067c844947ed1cc98186456e8bfa4919282722eaaf8cca345a138,214
12
12
  llama_deploy/appserver/routers/deployments.py,sha256=e7bafd72c1b4b809e5ad57442594a997c85ecab998b8430da65899faa910db1c,7572
@@ -16,9 +16,9 @@ llama_deploy/appserver/settings.py,sha256=aa4512d2f1f28b8ee7d3fedc8c61f77bce9f80
16
16
  llama_deploy/appserver/stats.py,sha256=1f3989f6705a6de3e4d61ee8cdd189fbe04a2c53ec5e720b2e5168acc331427f,691
17
17
  llama_deploy/appserver/types.py,sha256=4edc991aafb6b8497f068d12387455df292da3ff8440223637641ab1632553ec,2133
18
18
  llama_deploy/appserver/workflow_loader.py,sha256=03ef9d2d5eed6b0ec3e3520a6566163637b6ba99b9fa77ecee8ce0243a211d13,15413
19
- llama_deploy/appserver/workflow_store/agent_data_store.py,sha256=c94ab0e0628eb3d6364179e4fbf9467524270cdf38d8d9294494f89c9629a229,4219
19
+ llama_deploy/appserver/workflow_store/agent_data_store.py,sha256=c58d84ac658679cb9c9e4c7bc2f4096af8bb1aa8f6e3c24ff5a84be1125f4ab3,4221
20
20
  llama_deploy/appserver/workflow_store/keyed_lock.py,sha256=bb1504d9de09d51a8f60721cc77b14d4051ac5a897ace6f9d9cba494f068465e,950
21
- llama_deploy/appserver/workflow_store/lru_cache.py,sha256=7511231b6aba81ea96044cf644cd9c1f11d78190b7b7f578b1b5a55e2c218f9f,1323
22
- llama_deploy_appserver-0.3.17.dist-info/WHEEL,sha256=66530aef82d5020ef5af27ae0123c71abb9261377c5bc519376c671346b12918,79
23
- llama_deploy_appserver-0.3.17.dist-info/METADATA,sha256=e47c6356b06e16a3ff9606bf74c56b1b03820dba63b876cbee2d1188faba3924,1082
24
- llama_deploy_appserver-0.3.17.dist-info/RECORD,,
21
+ llama_deploy/appserver/workflow_store/lru_cache.py,sha256=bb05c573cf92532a3e673e5b3d5765c4165bf6f8d985744941580c06ceb3eb2d,1386
22
+ llama_deploy_appserver-0.3.19.dist-info/WHEEL,sha256=66530aef82d5020ef5af27ae0123c71abb9261377c5bc519376c671346b12918,79
23
+ llama_deploy_appserver-0.3.19.dist-info/METADATA,sha256=d9eaf5a1bffc3fc66b27530c6c04d91920678840c11aa0fb011eed8a2105ae67,1082
24
+ llama_deploy_appserver-0.3.19.dist-info/RECORD,,