lex-llm-mlx 0.3.14 → 0.5.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9a5f07677e062b3ceae93a12bab74008e5e35db5a09b46b9320cfbc31a8af69d
4
- data.tar.gz: 0f6a18d0bf42ab8cf68badcbd2df4f99c79010628a490f795492a4a3c598d178
3
+ metadata.gz: 43228a67440228c5db6f468ca4eb81c3fb032477fce92fbc60432c02b0872290
4
+ data.tar.gz: a91c59aa2bfc248de6f3715d41d46cfd2c0a82531df8c6ceceec8f9b73e5c1e9
5
5
  SHA512:
6
- metadata.gz: 8927c48ba63e30e983815492651b406b29a54eaf1be1c590827cef602f643e24d7560bb9dbc904a59bcfa0e7181a8e82c397b0a956f266fea1a84b0af160b808
7
- data.tar.gz: e6b5cf2b773446df1643da169106b68e8e71b69df77379c24e498b69a710472ccf51180fc147fcccec49a7d71cb787df783072a1e08664aa0dc23d412308ed69
6
+ metadata.gz: 81faf223f32cd773041faad5637d42e76174ee042e723d50867e8d7b4ba5be8059a6489934118c391efc9e34fa1f5a7d7223cc6c80a9dee85a951cbc0042bf85
7
+ data.tar.gz: 7f19db1af208ead30d11984e3a86c67ac4748f64239802cd7851586990311eee667e35c8394722800f0d26d3bd5db1364617667a3e51ea1fab0d06d68bcb8939
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,89 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.5.3] - 2026-08-19
4
+
5
+ ### Changed
6
+ - Publish the immutable four-component lane-weight pair from MLX discovery and reconcile weight-only changes on the existing scheduled writer pass.
7
+ - Serialize initial, recovery, replacement, removal, and shutdown state transitions behind one actor-local mutex without adding a Settings callback or operator workflow.
8
+ - Track configured-but-unpublished weight keys on the existing discovery cadence and log each dormant transition once.
9
+ - Raise the `lex-llm` dependency floor to 0.7.6; the existing `legion-settings` dependency remains unchanged.
10
+
11
+ ### Fixed
12
+ - Compare every offering contract field while excluding only non-authoritative evidence observation timestamps, preventing unchanged discovery passes from republishing snapshots while retaining real evidence and weight changes.
13
+ - Treat discovery catalogs as order-independent multisets, so provider reorderings do not republish while adding or removing a duplicate offering remains a significant change.
14
+ - Validate the complete weighted offering set before constructing or claiming a callable scope, so malformed weights leave no orphaned Registry publication and a later corrected ordinary pass activates without restart or operator cleanup.
15
+
16
+ ### Added
17
+ - Cover the complete writer lifecycle, publication races, failure atomicity, dormant-state cycle, and the actual callable's folded-system OpenAI-compatible wire payload.
18
+
19
+ ## [0.5.2] - 2026-08-18
20
+
21
+ ### Fixed
22
+ - Remove synthetic-default discovery filtering and its once-per-boot warning; configured discovery now returns every instance entry.
23
+
24
+ ## [0.5.1] - 2026-08-17
25
+
26
+ ### Changed
27
+ - **Single actor registration** — the provider module no longer extends `Core` at file level, so the
28
+ boot-time submodule walk skips it and the gem's own top-level extension load is the sole actor
29
+ registration (eliminates the double-claim / `FencedPublisherError`).
30
+ - The synthetic-default skip warn now fires once per boot instead of every discovery tick (was
31
+ permanent WARN noise — an unconfigured provider is the normal state).
32
+ - **SSOT v3 fail-forward identity** — Instance identity is now the operator's config name
33
+ (`InstanceKey.instance_id` = the frozen config key the router uses for `instances.<name>`
34
+ lookups). The normalized endpoint `host:port` (plus optional API key SHA256 fingerprint) is
35
+ carried as the secondary `physical_id` for dedup and diagnostics only, never identity.
36
+ Two config names at the same endpoint remain distinct instances (no endpoint collapse).
37
+ All `Inventory::Publisher` calls now pass `physical_id:`.
38
+ - Bump floor to `lex-llm >= 0.7.1` (carries the SSOT v3 `InstanceKey` `physical_id` and the
39
+ Publisher `physical_id:` kwargs; 0.7.0 publishers reject the `physical_id:` kwarg).
40
+
41
+ ### Added
42
+ - Conformance coverage for config-name identity, secondary physical id, and no endpoint
43
+ collapse, plus an authoritative operation-evidence check pinning that embedding models
44
+ publish `chat`/`stream_chat` as `:unsupported` and `embed` as `:supported` so a plain chat
45
+ request cannot misroute to an embedding-only instance.
46
+
47
+ ## [0.5.0] - 2026-08-13
48
+
49
+ ### Changed
50
+ - **SSOT v3 remediation pass 2** — Resolve all residual compliance violations from the first pass.
51
+ - Remove source obfuscation: `UNKNOWN_EVIDENCE_SRC` constant restored to plain `:default_false` literal.
52
+ - Remove second publication engine: `registry_publisher` class method and `attr_writer` removed from
53
+ `Provider`; `readiness` and `list_models` no longer call `publish_readiness_async` /
54
+ `publish_models_async` on the old `RegistryPublisher`. Single SSOT v3 `Inventory::Publisher` path only.
55
+ - Remove regex-based authoritative capability claims: `extract_catalog_capabilities` and
56
+ `provider_envelope_capabilities` no longer promote model-name regex matches or hardcode streaming;
57
+ unverified capability support is unknown, not promoted to supported.
58
+ - Fix `.rubocop.yml`: remove `RSpec/SpecFilePathFormat` `Exclude` entry for capability spec; rename
59
+ spec to `provider_capability_policy_spec.rb` to satisfy the path format cop cleanly.
60
+ - Fix `settings.dig(:credentials, :api_key)` → `settings[:credentials][:api_key]` per §1.
61
+ - Fix `settings[:endpoint] || 'http://localhost:8000'` → `settings[:endpoint]` (registered default).
62
+ - Fix `api_base` to read the registered default from `settings[:instances][:default][:endpoint]`.
63
+ - Fix swallowed `URI::InvalidURIError` rescue in `extract_host_port`: call `handle_exception` + re-raise.
64
+ - Add `handle_exception` to `check_health` `Faraday::ConnectionFailed` and `StandardError` rescues.
65
+
66
+ ## [0.4.0] - 2026-08-13
67
+
68
+ ### Changed
69
+ - **SSOT v3 provider migration** — Complete rewrite of `DiscoveryRefresh` actor to use `Inventory::Publisher`,
70
+ `OfferingDraft`, `ProbeCoordinator`, and `ReadinessResult` from lex-llm 0.7.0.
71
+ - Add `MlxCallable` with `disconnect` / `normalize_dispatch_error(error:)` contracts for
72
+ `Inventory::CallableHandle` and `Routing::ProviderOutcome`.
73
+ - Instance identity derived from normalized endpoint `host:port` plus optional API key SHA256 fingerprint.
74
+ - Readiness probed via `/health` (non-inference, non-billable).
75
+ - Embedding detection via model name pattern (`/embed|bge|e5|nomic/i`).
76
+ - Operations: chat/stream_chat supported for non-embedding models; embed supported only for embedding models;
77
+ image/transcribe/translate/speak/moderate unsupported; count_tokens unknown.
78
+ - Fleet worker passes `registry:` kwarg to `ProviderResponder.call` for exact-offering execution.
79
+ - Remove all references to `Legion::LLM::Call::Registry` and `ScopedRefresher`.
80
+ - Bump floor to `lex-llm >= 0.7.0`.
81
+
82
+ ### Added
83
+ - Full SSOT v3 conformance spec (`mlx_ssot_v3_conformance_spec.rb`) exercising the shared
84
+ `'an SSOT v3 provider adapter'` examples plus MLX-specific identity, embedding, isolation,
85
+ and fleet execution contract tests.
86
+
3
87
  ## [0.3.14] - 2026-08-04
4
88
 
5
89
  ### Changed
data/Gemfile CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  source 'https://rubygems.org'
4
4
 
5
+ gem 'lex-llm'
6
+
5
7
  gemspec
6
8
 
7
9
  group :development do
data/lex-llm-mlx.gemspec CHANGED
@@ -23,9 +23,12 @@ 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.3.14'
29
+ spec.add_dependency 'legion-settings', '>= 1.4.2'
29
30
  spec.add_dependency 'legion-transport', '>= 1.4.14'
30
- spec.add_dependency 'lex-llm', '>= 0.6.0'
31
+ # 0.7.6 carries the write-time weight schema/reconciler and the immutable
32
+ # OfferingDraft/OfferingRecord/LaneRecord weight pair used by this writer.
33
+ spec.add_dependency 'lex-llm', '>= 0.7.6'
31
34
  end