lex-llm-mlx 0.3.14 → 0.5.2
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +8 -0
- data/CHANGELOG.md +68 -0
- data/Gemfile +2 -0
- data/lex-llm-mlx.gemspec +6 -2
- data/lib/legion/extensions/llm/mlx/actors/discovery_refresh.rb +788 -94
- data/lib/legion/extensions/llm/mlx/actors/fleet_worker.rb +6 -1
- data/lib/legion/extensions/llm/mlx/provider.rb +169 -150
- data/lib/legion/extensions/llm/mlx/runners/fleet_worker.rb +23 -4
- data/lib/legion/extensions/llm/mlx/version.rb +1 -1
- data/lib/legion/extensions/llm/mlx.rb +59 -25
- metadata +19 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7e5f9a7dab605748337a587418be077e253a7e6b497c6b014ecba9875043c6ad
|
|
4
|
+
data.tar.gz: 3114258fbcc3dd3b6f184f28d83bc14c866187947a08c42bf6128f86e002c9c3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 12ae5ec7295decb7048148673f35daac26c2737f0739b4d236a2097ac07d6b7c5eddcad7af5bbde8fc7e6c2ca3d4bea570a2021ff6d0b30f2eff1e45711dc836
|
|
7
|
+
data.tar.gz: d227264342de019670a47624dcf121ae21c9ed9653d3e65c47d15ff754c05da407b44b29e20de06ee357f21b5bf34fffe7fac9869c1cacecefcd2ed21fd42c62
|
data/.rubocop.yml
CHANGED
|
@@ -14,5 +14,13 @@ Metrics/BlockLength:
|
|
|
14
14
|
- spec/**/*
|
|
15
15
|
Metrics/MethodLength:
|
|
16
16
|
Enabled: false
|
|
17
|
+
RSpec/ExampleLength:
|
|
18
|
+
Enabled: false
|
|
17
19
|
RSpec/MultipleExpectations:
|
|
18
20
|
Enabled: false
|
|
21
|
+
Layout/LineLength:
|
|
22
|
+
Exclude:
|
|
23
|
+
- spec/**/*
|
|
24
|
+
RSpec/SpecFilePathFormat:
|
|
25
|
+
CustomTransform:
|
|
26
|
+
Actor: actors
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,73 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.5.2] - 2026-08-18
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
- Remove synthetic-default discovery filtering and its once-per-boot warning; configured discovery now returns every instance entry.
|
|
7
|
+
|
|
8
|
+
## [0.5.1] - 2026-08-17
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- **Single actor registration** — the provider module no longer extends `Core` at file level, so the
|
|
12
|
+
boot-time submodule walk skips it and the gem's own top-level extension load is the sole actor
|
|
13
|
+
registration (eliminates the double-claim / `FencedPublisherError`).
|
|
14
|
+
- The synthetic-default skip warn now fires once per boot instead of every discovery tick (was
|
|
15
|
+
permanent WARN noise — an unconfigured provider is the normal state).
|
|
16
|
+
- **SSOT v3 fail-forward identity** — Instance identity is now the operator's config name
|
|
17
|
+
(`InstanceKey.instance_id` = the frozen config key the router uses for `instances.<name>`
|
|
18
|
+
lookups). The normalized endpoint `host:port` (plus optional API key SHA256 fingerprint) is
|
|
19
|
+
carried as the secondary `physical_id` for dedup and diagnostics only, never identity.
|
|
20
|
+
Two config names at the same endpoint remain distinct instances (no endpoint collapse).
|
|
21
|
+
All `Inventory::Publisher` calls now pass `physical_id:`.
|
|
22
|
+
- Bump floor to `lex-llm >= 0.7.1` (carries the SSOT v3 `InstanceKey` `physical_id` and the
|
|
23
|
+
Publisher `physical_id:` kwargs; 0.7.0 publishers reject the `physical_id:` kwarg).
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
- Conformance coverage for config-name identity, secondary physical id, and no endpoint
|
|
27
|
+
collapse, plus an authoritative operation-evidence check pinning that embedding models
|
|
28
|
+
publish `chat`/`stream_chat` as `:unsupported` and `embed` as `:supported` so a plain chat
|
|
29
|
+
request cannot misroute to an embedding-only instance.
|
|
30
|
+
|
|
31
|
+
## [0.5.0] - 2026-08-13
|
|
32
|
+
|
|
33
|
+
### Changed
|
|
34
|
+
- **SSOT v3 remediation pass 2** — Resolve all residual compliance violations from the first pass.
|
|
35
|
+
- Remove source obfuscation: `UNKNOWN_EVIDENCE_SRC` constant restored to plain `:default_false` literal.
|
|
36
|
+
- Remove second publication engine: `registry_publisher` class method and `attr_writer` removed from
|
|
37
|
+
`Provider`; `readiness` and `list_models` no longer call `publish_readiness_async` /
|
|
38
|
+
`publish_models_async` on the old `RegistryPublisher`. Single SSOT v3 `Inventory::Publisher` path only.
|
|
39
|
+
- Remove regex-based authoritative capability claims: `extract_catalog_capabilities` and
|
|
40
|
+
`provider_envelope_capabilities` no longer promote model-name regex matches or hardcode streaming;
|
|
41
|
+
unverified capability support is unknown, not promoted to supported.
|
|
42
|
+
- Fix `.rubocop.yml`: remove `RSpec/SpecFilePathFormat` `Exclude` entry for capability spec; rename
|
|
43
|
+
spec to `provider_capability_policy_spec.rb` to satisfy the path format cop cleanly.
|
|
44
|
+
- Fix `settings.dig(:credentials, :api_key)` → `settings[:credentials][:api_key]` per §1.
|
|
45
|
+
- Fix `settings[:endpoint] || 'http://localhost:8000'` → `settings[:endpoint]` (registered default).
|
|
46
|
+
- Fix `api_base` to read the registered default from `settings[:instances][:default][:endpoint]`.
|
|
47
|
+
- Fix swallowed `URI::InvalidURIError` rescue in `extract_host_port`: call `handle_exception` + re-raise.
|
|
48
|
+
- Add `handle_exception` to `check_health` `Faraday::ConnectionFailed` and `StandardError` rescues.
|
|
49
|
+
|
|
50
|
+
## [0.4.0] - 2026-08-13
|
|
51
|
+
|
|
52
|
+
### Changed
|
|
53
|
+
- **SSOT v3 provider migration** — Complete rewrite of `DiscoveryRefresh` actor to use `Inventory::Publisher`,
|
|
54
|
+
`OfferingDraft`, `ProbeCoordinator`, and `ReadinessResult` from lex-llm 0.7.0.
|
|
55
|
+
- Add `MlxCallable` with `disconnect` / `normalize_dispatch_error(error:)` contracts for
|
|
56
|
+
`Inventory::CallableHandle` and `Routing::ProviderOutcome`.
|
|
57
|
+
- Instance identity derived from normalized endpoint `host:port` plus optional API key SHA256 fingerprint.
|
|
58
|
+
- Readiness probed via `/health` (non-inference, non-billable).
|
|
59
|
+
- Embedding detection via model name pattern (`/embed|bge|e5|nomic/i`).
|
|
60
|
+
- Operations: chat/stream_chat supported for non-embedding models; embed supported only for embedding models;
|
|
61
|
+
image/transcribe/translate/speak/moderate unsupported; count_tokens unknown.
|
|
62
|
+
- Fleet worker passes `registry:` kwarg to `ProviderResponder.call` for exact-offering execution.
|
|
63
|
+
- Remove all references to `Legion::LLM::Call::Registry` and `ScopedRefresher`.
|
|
64
|
+
- Bump floor to `lex-llm >= 0.7.0`.
|
|
65
|
+
|
|
66
|
+
### Added
|
|
67
|
+
- Full SSOT v3 conformance spec (`mlx_ssot_v3_conformance_spec.rb`) exercising the shared
|
|
68
|
+
`'an SSOT v3 provider adapter'` examples plus MLX-specific identity, embedding, isolation,
|
|
69
|
+
and fleet execution contract tests.
|
|
70
|
+
|
|
3
71
|
## [0.3.14] - 2026-08-04
|
|
4
72
|
|
|
5
73
|
### Changed
|
data/Gemfile
CHANGED
data/lex-llm-mlx.gemspec
CHANGED
|
@@ -23,9 +23,13 @@ Gem::Specification.new do |spec|
|
|
|
23
23
|
spec.files = `git ls-files -z`.split("\x0").reject { |file| file.match(%r{^(spec|test|features|tmp|coverage)/}) }
|
|
24
24
|
spec.require_paths = ['lib']
|
|
25
25
|
|
|
26
|
+
spec.add_dependency 'faraday', '>= 1.10.0'
|
|
26
27
|
spec.add_dependency 'legion-json', '>= 1.2.1'
|
|
27
28
|
spec.add_dependency 'legion-logging', '>= 1.3.2'
|
|
28
|
-
spec.add_dependency 'legion-settings', '>= 1.
|
|
29
|
+
spec.add_dependency 'legion-settings', '>= 1.4.2'
|
|
29
30
|
spec.add_dependency 'legion-transport', '>= 1.4.14'
|
|
30
|
-
|
|
31
|
+
# 0.7.1 carries the SSOT v3 InstanceKey (instance_id = config name +
|
|
32
|
+
# secondary physical_id) and the Publisher physical_id: kwargs the
|
|
33
|
+
# discovery actor calls. 0.7.0 publishers reject the physical_id: kwarg.
|
|
34
|
+
spec.add_dependency 'lex-llm', '>= 0.7.1'
|
|
31
35
|
end
|