Build(deps-dev): Bump @types/node from 22.14.0 to 24.5.2#129
Closed
dependabot[bot] wants to merge 1 commit into
Closed
Build(deps-dev): Bump @types/node from 22.14.0 to 24.5.2#129dependabot[bot] wants to merge 1 commit into
dependabot[bot] wants to merge 1 commit into
Conversation
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.14.0 to 24.5.2. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-version: 24.5.2 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
Contributor
Author
|
Superseded by #137. |
joelteply
added a commit
that referenced
this pull request
Jun 2, 2026
…129 slice 1) The artifact resolver's heuristic in model_registry::artifacts::find_model_dir_in_root compares model_id.split('/').next_back().to_lowercase().replace('.','') against the on-disk directory name. For this row that yields: repo_slug: qwen35-4b-code-forged-gguf dir_name: qwen3.5-4b-code-forged dir_name.contains(repo_slug) returns false (dot stays in dir, "-gguf" suffix on repo_slug isn't in dir). The local GGUF exists at the expected path but the resolver misses it, so the in-process llama.cpp adapter is never registered for this model at boot. Two viable fixes: (a) explicit gguf_local_path on the TOML row, or (b) fix the dir-name heuristic. Per [[no-fallbacks-ever]], (a) is the correct path — explicit source-of-truth field that the resolver's explicit branch (first priority) honors. (b) is a separate doctrinal cleanup tracked as a followup. After this commit: AIProviderModule's llamacpp-local registration loop in modules/ai_provider.rs:340 finds the row, sees a resolved gguf_local_path on disk, and registers an in-process adapter for continuum-ai/qwen3.5-4b-code-forged-GGUF. Selectors can then route requests for that model id to a real backend on this Intel MacBookPro15,1. Per Joel (2026-06-01): "Get true persona cognition, no matter how small a model, running for multiple persona on this machine without taking it down." This is slice 1 — one real response from one model on this Mac. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
joelteply
added a commit
that referenced
this pull request
Jun 2, 2026
…slice 1) ## Result Confirmed: Qwen2.5-0.5B-Instruct Q4_K_M running CPU-only via the bundled llama.cpp on MacBookPro15,1 + Intel Core i9 + AMD Radeon Pro 560X + Intel UHD Graphics 630 + 32 GiB RAM. [full] tokens=10 text="12 times 7 is 84." test result: ok. 1 passed; 0 failed; finished in 3.27s Real cognition, correct arithmetic, no echo storm, stop_sequences honored (no <|im_end|> leak). The chat-flawless foundation is online. ## Why this commit exists #128 cfg-gated HeuristicInferenceAdapter out of production. With the fake gone, the substrate needed a real model adapter path that actually works on this hardware. The default Apple build path (`--features metal`) hangs forever in `ggml_metal_device_init` on this Mac's Intel + AMD discrete GPU combination — a known upstream issue (see #131 fork-patch task and the issues linked there). Process goes status "U" (uninterruptible kernel wait), zero CPU, never even opens the GGUF, no stderr — silent hang. Per [[no-fallbacks-ever]]: substrate must NOT silently degrade. The right answer is either fix Metal at the source (#131, the fork patch in CambrianTech/llama.cpp) OR provide an opt-in escape hatch for hardware where Metal cannot init. This commit ships the escape hatch for the chat-flawless slice; the fork patch follow-up (#131) is the durable fix. ## What ships ### `workers/llama/Cargo.toml` New feature `mac-cpu-only = []`. Opt-in only. Defaults unchanged. Apple Silicon and Docker builds use `--features metal` as before; nothing in any production path enables `mac-cpu-only`. ### `workers/llama/src/lib.rs` `compile_error!` guard against accidentally-CPU-only Mac builds NOW also accepts `mac-cpu-only` as the declared intentional opt-in: ```rust #[cfg(all(target_os = "macos", not(feature = "metal"), not(feature = "mac-cpu-only")))] compile_error!(...); ``` Builds without `metal` AND without `mac-cpu-only` still fail loud with the same instructive message as before. The new feature is the documented escape hatch for hardware where Metal genuinely cannot initialize (Intel + AMD discrete + the specific driver class observed 2026-06-01). ### `workers/continuum-core/tests/qwen35_chat_pipeline_full.rs` Env-var honoring config so the test can target THIS Mac (CPU-only, small context) without recompiling for every parameter sweep: QWEN35_N_GPU_LAYERS (default: -1 = all on GPU) QWEN35_CONTEXT_LENGTH (default: 32_768) Production / Apple Silicon test runs hit the defaults and behave exactly as before. CPU-only Intel Mac runs set both to honest small values: QWEN35_N_GPU_LAYERS=0 QWEN35_CONTEXT_LENGTH=2048 ## Verification Build (no metal, mac-cpu-only): cargo build --release --no-default-features \ --features livekit-webrtc,accelerate,test-fixtures,load-dynamic-ort,llama/mac-cpu-only \ --test qwen35_chat_pipeline_full Run: QWEN35_4B_GGUF=$HOME/.continuum/genome/models/qwen2.5-0.5b-instruct/qwen2.5-0.5b-instruct-q4_k_m.gguf \ QWEN35_N_GPU_LAYERS=0 QWEN35_CONTEXT_LENGTH=2048 \ target/release/deps/qwen35_chat_pipeline_full-<hash> \ --ignored --nocapture qwen35_persona_style_chat_produces_coherent_short_reply Result: test passes, model produces coherent answer to "What is 12 times 7?" in 3.27 seconds. ## What's NOT here - New TOML row for qwen2.5-0.5b-instruct in `config/models.toml` — comes in #130 slice 2 (wiring the LCD through the persona path). - LoRA training fixture — safetensors downloaded to `~/.continuum/genome/models/qwen2.5-0.5b-instruct/safetensors/`, foundry-side work in [[experiential-plasticity-mitosis-cull-sentinel]]. - Multi-persona airc round-trip — #130. - Metal fork patch — #131 (the durable fix for the Intel + AMD hang). - Apple Silicon / Docker build verification — `--features metal` path unchanged by this commit; CI on M-series should still produce identical artifacts. References: [[no-fallbacks-ever]], [[no-if-statements-use-llms-for-cognition]], [[persona-chat-flawless-before-video]], [[lcd-model-qwen25-05b-and-foundry-lora]], #128 (heuristic cfg-gated), #130 (multi-persona LCD next), #131 (fork patch for the Metal hang). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
joelteply
added a commit
that referenced
this pull request
Jun 2, 2026
…eriesPro/Cuda/Cloud (#133 slice 1) ## Why Joel (2026-06-01): "We will build a more intelligent model selection system, but for now get the main ones in shape. And we iterate on a workable one you should be able to talk with (plural many of them) and start optimizing obsessively. This will speed up all the other hardware too." The previous 3-variant (Floor/Base/Pro) framing was a transitional shape captured in #120. It clusters too coarsely: Sm60 (1080Ti) and Sm120 (5090) both landed in `Pro` despite spanning 5+ years of NVIDIA architectures; M-series Pro/Max and discrete CUDA shared a bucket despite very different cost/perf profiles; cloud-routed inference had no natural home. The 5-variant taxonomy maps to hardware classes the substrate actually targets and authors per-tier role rosters against. Each variant names the hardware class, not a "tier number" — easier for operators to recognize and reason about. Joel's exact framing: LCD/Compat is the substrate's lowest-common-denominator safe mode (works everywhere); M-series is the design center; M5+/MSeriesPro carries the headroom; CUDA owns the discrete-NVIDIA spectrum; Cloud is the always-eligible peer per [[inference-is-an-adapter-always-in-the-loop]]. ## What ships ### src/persona/hw_tier_descriptor.rs - `HwTierCategory` enum replaces `Floor | Base | Pro` with `Compat | MSeries | MSeriesPro | Cuda | Cloud`. Each variant documented with the hardware class it represents and the substrate expectations at that tier. - Test `category_serializes_as_lowercase` updated to cover all 5 variants — each serializes as a lowercase string token to match the JSON seed shape. - Test `seeds_cover_all_three_categories` renamed and broadened to `seeds_cover_required_categories` — all 5 variants now required to have at least one shipping seed. Seeds without representatives fail the build loud, surfacing roster gaps at CI time. - Test `serde_roundtrip_uses_camel_case` updated from `HwTierCategory::Base` to `HwTierCategory::MSeries` (the same M1 8 GiB descriptor under the new taxonomy). ### seeds/hw_tiers/*.json (9 files) Category fields updated to match the new enum tokens: cpu_only.json floor → compat mac_intel_metal_discrete.json floor → compat m1_uma_8gb.json base → mseries m1_uma_16gb.json base → mseries m3_uma_pro_max.json pro → mseriespro m5_uma_pro_max.json pro → mseriespro sm60.json pro → cuda sm120.json pro → cuda cloud.json pro → cloud Note text in seed files still references the old taxonomy in places ("Floor tier"/"Base tier"/"Pro tier") — these are human-readable prose and follow up in a subsequent slice that authors proper LCD/Compat-targeted role templates. The structural change is the enum + category tokens; prose comes second. ## Tests (25/25 green) - 12 generator concurrency tests (regression check) - 11 hw_tier_descriptor tests (schema invariants, seed parsing, category coverage, serde shapes) - 2 persona orm entity registration tests (cross-collection BaseEntity check still holds) ## What's next (#133 slices) This is slice 1 (rename only). Following slices: - Slice 2: add models.toml row for qwen2.5-0.5b-instruct with ALL per-model knobs (n_ubatch, context_length, chat_template, etc.) — retire the hardcoded constants from LlamaCppAdapter source per [[intent-driven-api-not-hot-patches]]. - Slice 3: LlamaCppAdapter::for_persona(persona) constructor — derive every knob from declared persona intent. - Slice 4: author proper Compat-tier role_template seeds for Helper and Coder targeting LCD Qwen2.5-0.5B. - Slice 5: PersonaSpawnerModule (#121) — detect tier, read role templates, spawn personas, attach to airc, join continuum room. - Slice 6: hardware probe → tier mapping wired so substrate auto- detects Compat on this Intel Mac without operator override. - Slice 7: verify multi-persona LCD chat through the substrate-managed path, then begin obsessive optimization on this Mac. References: [[intent-driven-api-not-hot-patches]], [[lcd-model-qwen25- 05b-and-foundry-lora]], [[optimizing-for-low-end-compounds-on-high-end]], [[orm-everything-not-hand-edited-files]], #120 (the original 3-variant shape this supersedes), #121 (PersonaSpawnerModule that consumes this), #129 (cognition proven on this Intel Mac), #130 (rigged-up demo binary that this proper path supersedes). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
joelteply
added a commit
that referenced
this pull request
Jun 2, 2026
…slice 2) ## Why Joel (2026-06-01): "Build the persona template for this Mac Intel, and use it for the persona in the headless connected over airc general room personas, not rigged up, detected and spawned properly. This LCD is the lowest default." Per [[lcd-model-qwen25-05b-and-foundry-lora]], Qwen2.5-0.5B-Instruct Q4_K_M is the substrate's lowest-common-denominator model: plain Qwen2 attention (no SSM ops), 468 MiB on disk, known-good llama.cpp support, runs on Compat tier hardware including this Intel MacBookPro15,1 + AMD Radeon Pro 560X via CPU-only path while #131 tracks the upstream ggml-metal hang fix in the CambrianTech/llama.cpp fork. #129 proved real cognition through this model end-to-end (qwen35 chat pipeline test, `tokens=10 text="12 times 7 is 84."` in 3.27s). #130 confirmed multi-persona airc transport delivery (probe message landed in channel 11c1a7ac, both Paige + Pax woke and started inference) but used a rigged-up env-var-driven path. This commit registers the model in `config/models.toml` so the substrate's proper spawn path can resolve it via the registry — no hardcoded paths in adapter code. ## What ships ### `config/models.toml` New `[[model]]` row for `continuum-ai/qwen2.5-0.5b-instruct-GGUF`: - `id`, `name`, `provider`, `arch` — standard registry fields - `context_window = 32768` (model's trained ctx — adapter applies a smaller runtime context via persona/role intent in slice 3) - `max_output_tokens = 4096`, `tokens_per_second = 60.0` - `capabilities = ["text-generation", "chat", "streaming"]` - `gguf_hint`, `gguf_local_path` — explicit local path bypasses the artifact resolver heuristic per the #129 slice 1 lesson - `chat_template` — qwen2.5 chatml (matches qwen3.5) - `stop_sequences = ["<|im_end|>", "<|endoftext|>"]` — defense-in- depth against EOG misdetection - `multi_party_strategy = "proper_chat_ml_single_party"` — Qwen2.5 was trained on standard user/assistant alternation; multi-party transcripts get filtered to clean two-party shape (per the prior qwen3.5 substrate-level findings at #75) ### Header comment Documents the LCD doctrine in the TOML file itself so a future operator reading the model catalog sees the substrate-strategy context without having to dig through memory files. Cross-references the sibling BF16 safetensors fixture (for foundry LoRA work) and the follow-up tasks #131 (Metal fork patch) and #122 (LoRA paging). ## What's NOT here Per-model inference knobs that don't fit the current TOML schema: - `n_ubatch` (currently hardcoded 512 in LlamaCppAdapter::load) - `n_seq_max` (currently derived by batching_probe) - explicit `context_length` runtime override These move into the registry shape in slice 3, alongside the `LlamaCppAdapter::for_persona(persona)` constructor that reads them all from the row per [[intent-driven-api-not-hot-patches]] and [[orm-everything-not-hand-edited-files]]. ## Tests (28 green) - 12 generator concurrency tests (regression check, unrelated) - 16 model_registry tests including the loader/discovery suite — validates that the new TOML row parses without errors and the registry can resolve the model by id ## Slice progression on #133 1. ✓ HwTierCategory rename (d8256f3) 2. ✓ This commit — qwen2.5-0.5b-instruct registered 3. ⏳ LlamaCppAdapter::for_persona(persona) — derive every knob from declared intent; per-model fields (n_ubatch, etc.) move into the registry shape here. 4. ⏳ Author proper Compat-tier role_template seeds (Helper + Coder referencing qwen2.5-0.5b model id). 5. ⏳ PersonaSpawnerModule — substrate detects, spawns, attaches to airc. 6. ⏳ Hardware probe → Compat detection on this Intel Mac. 7. ⏳ Verify multi-persona LCD chat through substrate-managed path, then begin obsessive optimization. References: [[lcd-model-qwen25-05b-and-foundry-lora]], [[intent-driven-api-not-hot-patches]], [[orm-everything-not-hand-edited-files]], [[no-fallbacks-ever]], #129 (cognition proven), #130 (transport proven), #131 (fork patch), #132 (optimize phase). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
joelteply
added a commit
that referenced
this pull request
Jun 2, 2026
…ice 4) Replaces the hand-tuned chain `with_model_id().with_context_length()` with a PersonaInferenceProfile constructed from env vars + LCD defaults, then `LlamaCppAdapter::for_persona(&profile)`. Demo binary now exercises the intent-driven API per [[intent-driven-api-not-hot- patches]] end-to-end; first concrete consumer of the for_persona constructor introduced in slice 3b (b70c238). Profile fields (built from env / LCD defaults): - persona_id from airc peer_id (seed-derived per [[persona-identity-derives-from-source-id]]) - model_id = LCD model registered in slice 2 (e2510c0) - tier_category = Compat (Intel Mac falls here per the post-#129 LCD doctrine) - n_ubatch = 512 (covers realistic RAG-built persona prompts) - stop_sequences explicit (defense-in-depth; registry row carries them too) The spawner (#133 slice 5, task #121) will eventually replace the env-var-derived profile construction with one resolved from (role_template, hw_tier_descriptor, model_meta) — at which point this demo binary becomes a #[cfg(test)] fixture. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
joelteply
added a commit
that referenced
this pull request
Jun 2, 2026
…slice 11)
The live-airc moment. Demo binary stops doing the work itself; the
substrate-managed serve_persona_loop (slice 10) takes over against
the production conversation impl.
- AircPersonaConversation: PersonaConversation impl wrapping
Arc<PersonaAircRuntime>.
• high_water_mark → airc.page_recent(limit).max(lamport)
• next_message → lazy subscribe-on-first-call, projection to
IncomingMessage with self-skip + non-text-skip filtered IN
the projection (loop counters stay honest), LiveLag returned
as Err so the loop's transient-error path counts + continues
• say → runtime.say(text)
Constructor is cheap + infallible (subscribe is lazy) so slice 12
can mint one of these per planned persona at boot before any of
them necessarily attaches.
- PersonaAircRuntime::from_attached: new constructor wrapping an
already-attached + already-joined Arc<Airc> without firing
bootstrap's airc.join(uuid_as_string) path (which derives the
wrong channel — the demo binary works around this by joining by
NAME above; the constructor lets the demo continue doing so).
bootstrap() stays untouched for the existing PersonaInstance-
ManagerModule call site.
- airc_chat_demo main(): ~110 lines of inline subscribe + filter +
RAG + inference + say collapsed into ~30 lines that build
HostedPersona + AircPersonaConversation and call
serve_persona_loop. The Joel-grade lesson from #129/#130 (no
if-statements, no fallbacks, LCD-first) is now codified in the
substrate, not the demo. The same call is what slice 12 fires
from headless continuum-core boot for every persona the spawner
planned.
Verification:
- All 17 slice-related tests green (4 supervisor + 4 service_loop +
9 spawner/spawner_module). Pre-existing
persona::allocator::test_allocate_no_keys failure on the branch
HEAD is unrelated (tracked as separate task) and reproduces on
clean stash, ruling out slice 11 as cause.
- cargo build --bin airc_chat_demo passes.
Next: slice 12 — headless continuum-core boot wires
HwCapabilityProbe + PersonaSpawnerModule.plan_for_tier +
bootstrap_planned + materialize_adapters + serve_persona_loop, one
per planned persona. Demo binary becomes a small "watch one persona
talk" smoke runner; production substrate hosts personas without it.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumps @types/node from 22.14.0 to 24.5.2.
Commits
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot mergewill merge this PR after your CI passes on it@dependabot squash and mergewill squash and merge this PR after your CI passes on it@dependabot cancel mergewill cancel a previously requested merge and block automerging@dependabot reopenwill reopen this PR if it is closed@dependabot closewill close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)