decisionnode-edge 0.9.2__tar.gz → 0.9.2.1__tar.gz

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 (21) hide show
  1. {decisionnode_edge-0.9.2 → decisionnode_edge-0.9.2.1}/PKG-INFO +2 -1
  2. {decisionnode_edge-0.9.2 → decisionnode_edge-0.9.2.1}/README.md +1 -0
  3. {decisionnode_edge-0.9.2 → decisionnode_edge-0.9.2.1}/pyproject.toml +1 -1
  4. {decisionnode_edge-0.9.2 → decisionnode_edge-0.9.2.1}/src/decisionnode_edge/__init__.py +1 -1
  5. {decisionnode_edge-0.9.2 → decisionnode_edge-0.9.2.1}/src/decisionnode_edge/backends.py +6 -2
  6. {decisionnode_edge-0.9.2 → decisionnode_edge-0.9.2.1}/src/decisionnode_edge.egg-info/PKG-INFO +2 -1
  7. {decisionnode_edge-0.9.2 → decisionnode_edge-0.9.2.1}/LICENSE +0 -0
  8. {decisionnode_edge-0.9.2 → decisionnode_edge-0.9.2.1}/setup.cfg +0 -0
  9. {decisionnode_edge-0.9.2 → decisionnode_edge-0.9.2.1}/src/decisionnode_edge/__main__.py +0 -0
  10. {decisionnode_edge-0.9.2 → decisionnode_edge-0.9.2.1}/src/decisionnode_edge/answers.py +0 -0
  11. {decisionnode_edge-0.9.2 → decisionnode_edge-0.9.2.1}/src/decisionnode_edge/build.py +0 -0
  12. {decisionnode_edge-0.9.2 → decisionnode_edge-0.9.2.1}/src/decisionnode_edge/model.py +0 -0
  13. {decisionnode_edge-0.9.2 → decisionnode_edge-0.9.2.1}/src/decisionnode_edge/places.py +0 -0
  14. {decisionnode_edge-0.9.2 → decisionnode_edge-0.9.2.1}/src/decisionnode_edge/request.py +0 -0
  15. {decisionnode_edge-0.9.2 → decisionnode_edge-0.9.2.1}/src/decisionnode_edge/server.py +0 -0
  16. {decisionnode_edge-0.9.2 → decisionnode_edge-0.9.2.1}/src/decisionnode_edge/systemone.py +0 -0
  17. {decisionnode_edge-0.9.2 → decisionnode_edge-0.9.2.1}/src/decisionnode_edge/template.py +0 -0
  18. {decisionnode_edge-0.9.2 → decisionnode_edge-0.9.2.1}/src/decisionnode_edge.egg-info/SOURCES.txt +0 -0
  19. {decisionnode_edge-0.9.2 → decisionnode_edge-0.9.2.1}/src/decisionnode_edge.egg-info/dependency_links.txt +0 -0
  20. {decisionnode_edge-0.9.2 → decisionnode_edge-0.9.2.1}/src/decisionnode_edge.egg-info/requires.txt +0 -0
  21. {decisionnode_edge-0.9.2 → decisionnode_edge-0.9.2.1}/src/decisionnode_edge.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: decisionnode-edge
3
- Version: 0.9.2
3
+ Version: 0.9.2.1
4
4
  Summary: Run DecisionNode Edge locally: typed, calibrated decisions in the shape of the DecisionNode API.
5
5
  Author-email: "Bynn Intelligence Inc." <licensing@bynn.com>
6
6
  License-Expression: AGPL-3.0-only
@@ -230,6 +230,7 @@ Options can be flat (`{"threads": 16}`) or under a backend's name (`{"openvino":
230
230
  | `llamacpp` | `server`, `gguf`: the program and the model file | `llama-server` on `PATH`, the build's file |
231
231
  | `llamacpp` | `gpu_layers`, `threads` | 999 (all layers on the GPU when there is one), llama.cpp's choice |
232
232
  | `llamacpp` | `context`: the longest prompt llama.cpp takes | 16,384 |
233
+ | `mlx` | `cache_limit_gb`: how much freed GPU memory MLX keeps for reuse | 2 |
233
234
 
234
235
  vLLM runs its engine inside your process and uses the first visible GPU (choose it with `CUDA_VISIBLE_DEVICES`). Its first load takes about half a minute while it compiles. MLX uses the Apple GPU.
235
236
 
@@ -204,6 +204,7 @@ Options can be flat (`{"threads": 16}`) or under a backend's name (`{"openvino":
204
204
  | `llamacpp` | `server`, `gguf`: the program and the model file | `llama-server` on `PATH`, the build's file |
205
205
  | `llamacpp` | `gpu_layers`, `threads` | 999 (all layers on the GPU when there is one), llama.cpp's choice |
206
206
  | `llamacpp` | `context`: the longest prompt llama.cpp takes | 16,384 |
207
+ | `mlx` | `cache_limit_gb`: how much freed GPU memory MLX keeps for reuse | 2 |
207
208
 
208
209
  vLLM runs its engine inside your process and uses the first visible GPU (choose it with `CUDA_VISIBLE_DEVICES`). Its first load takes about half a minute while it compiles. MLX uses the Apple GPU.
209
210
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "decisionnode-edge"
7
- version = "0.9.2"
7
+ version = "0.9.2.1"
8
8
  description = "Run DecisionNode Edge locally: typed, calibrated decisions in the shape of the DecisionNode API."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -10,4 +10,4 @@ from .model import EdgeModel
10
10
  from .request import RequestError
11
11
 
12
12
  __all__ = ["EdgeModel", "RequestError"]
13
- __version__ = "0.9.2"
13
+ __version__ = "0.9.2.1"
@@ -165,7 +165,7 @@ def load(name: str, path: str, config: dict, artifacts: str | None, options: dic
165
165
  if name == "vllm":
166
166
  return VLLM(path, max_tokens, options, device)
167
167
  if name == "mlx":
168
- return MLX(path)
168
+ return MLX(path, options)
169
169
  build = read_build(artifacts)
170
170
  if build is not None and build.get("model_fingerprint") != fingerprint(path):
171
171
  raise ValueError(f"{artifacts} was built from another model than {path}")
@@ -304,14 +304,18 @@ class MLX:
304
304
  touches readout.safetensors); the text model's output is the hidden state after the final norm."""
305
305
 
306
306
  name = "mlx"
307
+ cache_limit_gb = 2.0
307
308
 
308
- def __init__(self, path: str):
309
+ def __init__(self, path: str, options: dict | None = None):
309
310
  from pathlib import Path
310
311
 
311
312
  import mlx.core as mx
312
313
  from mlx_lm.utils import load_model
313
314
 
314
315
  self.mx = mx
316
+ # MLX keeps freed buffers for reuse, by default up to its memory limit, so a server reading long prompts grew its
317
+ # cache to most of the machine's memory. A bound keeps the reuse that matters for speed.
318
+ mx.set_cache_limit(int(float((options or {}).get("cache_limit_gb", self.cache_limit_gb)) * 2**30))
315
319
  model, _ = load_model(Path(path))
316
320
  self.text = model.language_model.model
317
321
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: decisionnode-edge
3
- Version: 0.9.2
3
+ Version: 0.9.2.1
4
4
  Summary: Run DecisionNode Edge locally: typed, calibrated decisions in the shape of the DecisionNode API.
5
5
  Author-email: "Bynn Intelligence Inc." <licensing@bynn.com>
6
6
  License-Expression: AGPL-3.0-only
@@ -230,6 +230,7 @@ Options can be flat (`{"threads": 16}`) or under a backend's name (`{"openvino":
230
230
  | `llamacpp` | `server`, `gguf`: the program and the model file | `llama-server` on `PATH`, the build's file |
231
231
  | `llamacpp` | `gpu_layers`, `threads` | 999 (all layers on the GPU when there is one), llama.cpp's choice |
232
232
  | `llamacpp` | `context`: the longest prompt llama.cpp takes | 16,384 |
233
+ | `mlx` | `cache_limit_gb`: how much freed GPU memory MLX keeps for reuse | 2 |
233
234
 
234
235
  vLLM runs its engine inside your process and uses the first visible GPU (choose it with `CUDA_VISIBLE_DEVICES`). Its first load takes about half a minute while it compiles. MLX uses the Apple GPU.
235
236