jevkit-runtime 0.3.0__tar.gz → 0.3.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 (31) hide show
  1. jevkit_runtime-0.3.1/CHANGELOG.md +42 -0
  2. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/PKG-INFO +6 -4
  3. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/README.md +3 -3
  4. jevkit_runtime-0.3.1/SECURITY.md +18 -0
  5. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/docs/diffusiongemma.md +16 -4
  6. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/docs/laya.md +17 -4
  7. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/pyproject.toml +3 -1
  8. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/src/jevkit_runtime/__init__.py +1 -1
  9. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/uv.lock +1 -1
  10. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/.github/workflows/downstream.yml +0 -0
  11. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/.github/workflows/publish.yml +0 -0
  12. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/.github/workflows/test.yml +0 -0
  13. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/.gitignore +0 -0
  14. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/LICENSE +0 -0
  15. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/scripts/dev.py +0 -0
  16. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/scripts/laya_server.py +0 -0
  17. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/scripts/offline/sitecustomize.py +0 -0
  18. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/src/jevkit_runtime/client.py +0 -0
  19. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/src/jevkit_runtime/errors.py +0 -0
  20. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/src/jevkit_runtime/meter.py +0 -0
  21. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/src/jevkit_runtime/protocol.py +0 -0
  22. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/src/jevkit_runtime/providers.py +0 -0
  23. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/src/jevkit_runtime/settings.py +0 -0
  24. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/src/jevkit_runtime/store.py +0 -0
  25. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/src/jevkit_runtime/transport.py +0 -0
  26. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/tests/test_client.py +0 -0
  27. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/tests/test_dev_runner.py +0 -0
  28. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/tests/test_protocol.py +0 -0
  29. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/tests/test_settings_and_providers.py +0 -0
  30. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/tests/test_store.py +0 -0
  31. {jevkit_runtime-0.3.0 → jevkit_runtime-0.3.1}/tests/test_transport.py +0 -0
@@ -0,0 +1,42 @@
1
+ # Changelog
2
+
3
+ `jevkit-runtime` is 0.x: a minor version may break the API. The JevKit tools pin `<0.(n+1)` so a
4
+ new minor release never changes an installed tool.
5
+
6
+ ## 0.3.1
7
+
8
+ - Documentation and package metadata only; the code is the same as 0.3.0.
9
+ - The DiffusionGemma and Laya guides report what to expect from the four tools' benchmarks.
10
+ - Add this changelog and a security policy, and list the repository and changelog on PyPI.
11
+ - README links point to GitHub, so they also work on PyPI.
12
+
13
+ ## 0.3.0
14
+
15
+ - Add the local decision servers `diffusiongemma` (OpenJev) and `laya` (laya-mlx) to the catalog.
16
+ They need no key, are chosen only by name and never in place of a configured hosted provider, and
17
+ are priced at zero API fees.
18
+ - A provider may carry its own price; `JEV_PRICE_PER_MTOK` overrides it and `Settings.list_price`
19
+ is the fallback.
20
+ - Providers with joint reads key every answer on the whole ordered batch and are re-sent whole when
21
+ any slot is missing.
22
+ - Setup guides for both servers in `docs/`, and the Laya server adapter in `scripts/`.
23
+
24
+ ## 0.2.0
25
+
26
+ Breaking redesign: one request pipeline, one answer store, one provider catalog.
27
+
28
+ - `Client.ask` owns the whole pipeline: request sharing, hedging, cache-only runs, charge callbacks
29
+ and provenance are per-call keyword arguments. It returns `Answers`, a dict with an `origins`
30
+ attribute.
31
+ - The import is now `jevkit_runtime`, matching the distribution.
32
+ - The answer store keeps answer and provenance in one row under a versioned schema; caches from
33
+ 0.1 are reset and re-asked.
34
+ - HTTP/2 is used whenever the `http2` extra is installed.
35
+ - Removed: the legacy key recipes, the two-table cache, the `DecisionClient` seam, and the unused
36
+ local providers.
37
+
38
+ ## 0.1.0
39
+
40
+ - First release: shared transport, settings, answer cache and metering for jgrep, jsort, jlink,
41
+ jselect and jcol, published as `jevkit-runtime` (the PyPI name `jevkit-core` belongs to another
42
+ project).
@@ -1,8 +1,10 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: jevkit-runtime
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: Shared transport, configuration, caching, and accounting for JevKit tools
5
5
  Project-URL: Homepage, https://github.com/keltokhy/jevkit-core
6
+ Project-URL: Repository, https://github.com/keltokhy/jevkit-core
7
+ Project-URL: Changelog, https://github.com/keltokhy/jevkit-core/blob/main/CHANGELOG.md
6
8
  Project-URL: Issues, https://github.com/keltokhy/jevkit-core/issues
7
9
  Author: Khaled Eltokhy
8
10
  License-Expression: MIT
@@ -82,13 +84,13 @@ in place of a configured hosted provider, need no key, and are metered at zero A
82
84
  DiffusionGemma reads every question in a batch together, so the runtime keys each of its answers
83
85
  on the whole ordered batch and re-sends a batch whole when any slot is missing.
84
86
 
85
- No package ships the models. [docs/diffusiongemma.md](docs/diffusiongemma.md) and
86
- [docs/laya.md](docs/laya.md) explain how to run the servers, and `scripts/laya_server.py` is the
87
+ No package ships the models. [docs/diffusiongemma.md](https://github.com/keltokhy/jevkit-core/blob/main/docs/diffusiongemma.md) and
88
+ [docs/laya.md](https://github.com/keltokhy/jevkit-core/blob/main/docs/laya.md) explain how to run the servers, and `scripts/laya_server.py` is the
87
89
  adapter the Laya guide starts.
88
90
 
89
91
  ## Development
90
92
 
91
- Keep the six checkouts as siblings. Each consumer depends on `jevkit-runtime>=0.2.0,<0.3.0` and
93
+ Keep the six checkouts as siblings. Each consumer depends on `jevkit-runtime>=0.3.0,<0.4.0` and
92
94
  overrides it for development with `jevkit-runtime = { path = "../jevkit-core", editable = true }`
93
95
  under `[tool.uv.sources]`.
94
96
 
@@ -67,13 +67,13 @@ in place of a configured hosted provider, need no key, and are metered at zero A
67
67
  DiffusionGemma reads every question in a batch together, so the runtime keys each of its answers
68
68
  on the whole ordered batch and re-sends a batch whole when any slot is missing.
69
69
 
70
- No package ships the models. [docs/diffusiongemma.md](docs/diffusiongemma.md) and
71
- [docs/laya.md](docs/laya.md) explain how to run the servers, and `scripts/laya_server.py` is the
70
+ No package ships the models. [docs/diffusiongemma.md](https://github.com/keltokhy/jevkit-core/blob/main/docs/diffusiongemma.md) and
71
+ [docs/laya.md](https://github.com/keltokhy/jevkit-core/blob/main/docs/laya.md) explain how to run the servers, and `scripts/laya_server.py` is the
72
72
  adapter the Laya guide starts.
73
73
 
74
74
  ## Development
75
75
 
76
- Keep the six checkouts as siblings. Each consumer depends on `jevkit-runtime>=0.2.0,<0.3.0` and
76
+ Keep the six checkouts as siblings. Each consumer depends on `jevkit-runtime>=0.3.0,<0.4.0` and
77
77
  overrides it for development with `jevkit-runtime = { path = "../jevkit-core", editable = true }`
78
78
  under `[tool.uv.sources]`.
79
79
 
@@ -0,0 +1,18 @@
1
+ # Security
2
+
3
+ ## Reporting a vulnerability
4
+
5
+ Please report security problems privately through GitHub:
6
+ [Report a vulnerability](https://github.com/keltokhy/jevkit-core/security/advisories/new).
7
+ Do not open a public issue. This is maintained by one person in spare time; expect a first reply
8
+ within a week.
9
+
10
+ Only the latest release is supported. Fixes ship as a new release, not as patches to older ones.
11
+
12
+ ## What to know when using it
13
+
14
+ - Text you pass in is sent to the model provider you configure (TypeSafe, OpenRouter, a gateway,
15
+ or a server on your own machine). Do not send data you are not allowed to share with that provider.
16
+ - API keys are read from environment variables or `~/.config/jev/<provider>.key` and are sent only
17
+ to the provider they belong to. They are never written to the answer cache or to logs.
18
+ - Answers are cached on disk in `~/.cache/jev`. Delete it to remove stored answers.
@@ -80,7 +80,19 @@ same URL and model, use `--no-cache` or a separate `XDG_CACHE_HOME`.
80
80
 
81
81
  ## What to expect
82
82
 
83
- A September 2026 jgrep comparison over 10,000 public-data decisions found news classification
84
- close to hosted Jev but more false positives on SMS spam at a 0.9 cutoff. For code, judge whole
85
- diff hunks or functions; isolated diff lines recalled poorly on a small synthetic fixture. Keep
86
- it experimental and evaluate its cutoff on your own data.
83
+ On September 22, 2026, DiffusionGemma (`openjev-0.1`) ran each tool's benchmarks on an Apple M3
84
+ Ultra with 96 GiB of unified memory, beside Jev 1.13's recorded runs. It is a reasonable
85
+ substitute for Jev when the text must stay on your machine and each decision is about one record,
86
+ or about long ones. In
87
+ [jgrep](https://github.com/keltokhy/jgrep/blob/main/docs/benchmarks/local-models-2026-09-22.md)
88
+ its spam F1 was 0.87 against Jev's 0.91, with the same news accuracy; in
89
+ [jlink](https://github.com/keltokhy/jlink/blob/main/docs/benchmarks/local-models-2026-09-22.md)
90
+ it came within 0.03 of Jev's F1 on four of five benchmarks; in
91
+ [jcol](https://github.com/keltokhy/jcol/blob/main/benchmarks/README.md#local-models-2026-09-22)
92
+ it agreed with the product label on 78 of 100 complaints against Jev's 75; and in
93
+ [jsort](https://github.com/keltokhy/jsort/blob/main/docs/benchmarks/local-models-2026-09-22.md)
94
+ its scores for whole FOMC statements correlated 0.89 with Jev's. It is not a substitute for
95
+ sorting single short lines, where its comparisons had a reliability of 0.62 and 0.39 against
96
+ Jev's 0.97 and 0.96, or for judging isolated diff lines. The server runs one call at a time on
97
+ the GPU: about a third of a second per short record, and 14 to 18 minutes per 3,000 record pairs.
98
+ Keep it experimental and evaluate its cutoff on your own data.
@@ -74,7 +74,20 @@ or a separate `XDG_CACHE_HOME`.
74
74
 
75
75
  ## What to expect
76
76
 
77
- A September 2026 jgrep experiment on an M3 Ultra found fast, strong short-text classification
78
- (92% top-1 on a news set) but weak precision on spam at the default 0.5 cutoff (53%, rising to
79
- 79% at 0.9) and weak code judgments. Treat it as a fast classifier for short texts, and evaluate
80
- thresholds on your own labeled inputs before relying on the scores.
77
+ On September 22, 2026, Laya (`laya-421m`) ran each tool's benchmarks on an Apple M3 Ultra with
78
+ 96 GiB of unified memory, beside Jev 1.13's recorded runs. It is a fast classifier of short texts
79
+ into broad topics, and not a substitute for Jev elsewhere. In
80
+ [jgrep](https://github.com/keltokhy/jgrep/blob/main/docs/benchmarks/local-models-2026-09-22.md)
81
+ it had the best news accuracy of the three models, 92% against Jev's 87%, and finished 2,000
82
+ messages in 46 s; at the default cutoff it also flagged 235 messages that were not spam, against
83
+ Jev's 41. Its 512-token window, question included, decides what it can read: the adapter refuses
84
+ longer requests with HTTP 422, which the tools report as failed decisions, so in
85
+ [jcol](https://github.com/keltokhy/jcol/blob/main/benchmarks/README.md#local-models-2026-09-22)
86
+ it refused 27 of 100 complaint narratives and in
87
+ [jsort](https://github.com/keltokhy/jsort/blob/main/docs/benchmarks/local-models-2026-09-22.md)
88
+ every whole FOMC statement. On what it could read, its pairwise comparisons in jsort did not
89
+ follow Jev's order, and in
90
+ [jlink](https://github.com/keltokhy/jlink/blob/main/docs/benchmarks/local-models-2026-09-22.md)
91
+ it scored most candidate pairs as matches, for an F1 of 0.16 to 0.22 on firms, products and
92
+ software where Jev's was 0.67 to 0.94. Evaluate thresholds on your own labeled inputs before
93
+ relying on the scores.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "jevkit-runtime"
3
- version = "0.3.0"
3
+ version = "0.3.1"
4
4
  description = "Shared transport, configuration, caching, and accounting for JevKit tools"
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -10,6 +10,8 @@ dependencies = ["httpx>=0.27"]
10
10
 
11
11
  [project.urls]
12
12
  Homepage = "https://github.com/keltokhy/jevkit-core"
13
+ Repository = "https://github.com/keltokhy/jevkit-core"
14
+ Changelog = "https://github.com/keltokhy/jevkit-core/blob/main/CHANGELOG.md"
13
15
  Issues = "https://github.com/keltokhy/jevkit-core/issues"
14
16
 
15
17
  [project.optional-dependencies]
@@ -28,7 +28,7 @@ from .settings import DEFAULT_PRICE_PER_MTOK, Settings
28
28
  from .store import AnswerStore, Entry
29
29
  from .transport import FATAL, RETRYABLE, post
30
30
 
31
- __version__ = "0.3.0"
31
+ __version__ = "0.3.1"
32
32
  __all__ = [
33
33
  "AnswerStore",
34
34
  "Answers",
@@ -139,7 +139,7 @@ wheels = [
139
139
 
140
140
  [[package]]
141
141
  name = "jevkit-runtime"
142
- version = "0.3.0"
142
+ version = "0.3.1"
143
143
  source = { editable = "." }
144
144
  dependencies = [
145
145
  { name = "httpx" },
File without changes