Skip to content

Commit 339f84f

Browse files
committed
docs+config: close out #32 non-functional cleanup items
Functional LLM backend abstraction landed across #35, #38, #39, #40, #43. This commit closes the strictly-textual remainder of the original issue: - deploy/config/geniepod.toml: add commented `backend = "..."` examples under [services.llm] with both canonical and hyphenated alias forms. - deploy/config/geniepod.dev.toml: same, with a note that dev machines typically stay on llama.cpp. - README.md: replace "transitional llama.cpp" framing with the current reality — llama.cpp is the default backend; genie-ai-runtime is selectable per-deployment via [services.llm].backend. Updated the How-It-Works diagram comment and the How-It-Fits-Together prose. - ARCHITECTURE.md: rewrite the Current Transitional Adapters row for the LLM client to reflect that the boundary IS now resolved via the LlmClient facade; update the process-topology diagram comment; update the Refactor Direction step to name "LLM backends" instead of "llama.cpp". - crates/genie-core/Cargo.toml: declare `llama-cpp` and `genie-ai-runtime` features (both default-on, byte-identical builds today). Comment notes the per-backend `#[cfg]` gating is incremental and will land alongside the CI matrix from #34 so a --no-default-features regression is caught automatically rather than silently bit-rotting. Direct push to main per maintainer call — the changes are documentation and commented config examples; the feature flags are no-op declarations that don't change build behavior. Refs #32.
1 parent 6bec4d1 commit 339f84f

5 files changed

Lines changed: 29 additions & 10 deletions

File tree

ARCHITECTURE.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ The current repo still contains pragmatic adapters used to ship on Jetson now.
7878

7979
| Current adapter | Long-term replacement | Notes |
8080
| --- | --- | --- |
81-
| `llama.cpp` OpenAI-compatible client | `genie-ai-runtime` client | Keep the client boundary narrow and model/runtime assumptions explicit. |
81+
| `llama.cpp` OpenAI-compatible client (default) | `genie-ai-runtime` client (opt-in) | Both backends ship behind the `LlmClient` facade; per-deployment selection via `[services.llm].backend` in `geniepod.toml`. Backend identity surfaces in `/api/health`, startup logs, and `genie-ctl status`. |
8282
| Home Assistant provider | `genie-home-runtime` MCP/API client | Keep HA-specific behavior behind `ha/` and tools/home boundaries. |
8383
| Actuation safety in `genie-core` | final safety in `genie-home-runtime` | Keep current safety as an agent-side guard and confirmation layer. |
8484
| `genie-api` dashboard | application layer | Keep it operational and lightweight; avoid making it the long-term product app. |
@@ -116,7 +116,8 @@ Code in memory, voice, prompt, and channels should not learn Home Assistant inte
116116
Current Jetson deployment:
117117

118118
```text
119-
llama-server (:8080)
119+
LLM backend (:8080) # llama-server by default; genie-ai-runtime if
120+
# [services.llm].backend = "genie_ai_runtime"
120121
^
121122
|
122123
genie-core (:3000) <---- genie-ctl
@@ -223,7 +224,7 @@ Long-term direction:
223224
The clean architecture path is incremental:
224225

225226
1. Make boundary language consistent in docs and config.
226-
2. Keep Home Assistant and llama.cpp behind narrow adapter traits.
227+
2. Keep Home Assistant and LLM backends behind narrow adapter traits (LLM side resolved via the `LlmClient` facade in `crates/genie-core/src/llm/`).
227228
3. Move physical actuation authority downward into `genie-home-runtime` when it exists.
228229
4. Move Jetson model-server specialization downward into `genie-ai-runtime`.
229230
5. Keep GenieClaw focused on voice, memory, skills, tools, channels, and household interaction.

README.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ Voice in, voice out, controls Home Assistant, no cloud.**
2929
└────────┘ └────────┘ └──────┬───────┘ └───────┘
3030
3131
memory ◄─────┼─────► local LLM
32-
(SQLite) │ (llama.cpp today;
33-
│ genie-ai-runtime
34-
replacing it)
32+
(SQLite) │ (llama.cpp by default,
33+
│ genie-ai-runtime opt-in
34+
via [services.llm].backend)
3535
3636
Home Assistant
3737
(rate-limited, audited)
@@ -65,7 +65,7 @@ This repo is the Rust agent runtime for a very specific product shape:
6565
- a local household memory system
6666
- safe handoff to a home-control runtime
6767
- transitional Home Assistant support while `genie-home-runtime` is not yet split out
68-
- transitional `llama.cpp` support while `genie-ai-runtime` is not yet split out
68+
- pluggable local LLM backend (`llama.cpp` default; `genie-ai-runtime` selectable via `[services.llm].backend = "genie_ai_runtime"`)
6969
- a privacy-first and security-first system
7070
- a memory-footprint-conscious runtime built for constrained edge hardware
7171
- a household trust model that exposes redacted posture, not raw config files
@@ -149,8 +149,11 @@ logic, response style, channels, and skill routing.
149149

150150
At a high level:
151151

152-
1. Today, `llama.cpp` provides the local model server. Longer term,
153-
`genie-ai-runtime` should provide the Jetson-only inference service.
152+
1. The local model server is `llama.cpp` by default; the
153+
`genie-ai-runtime` Jetson-tuned runtime is selectable per-deployment
154+
via `[services.llm].backend = "genie_ai_runtime"` in `geniepod.toml`.
155+
Backend identity flows through `LlmClient::backend_name()` into
156+
logs, `/api/health`, and `genie-ctl status` for operator visibility.
154157
2. `genie-core` handles prompts, tool calls, memory, chat, and voice orchestration.
155158
3. Today, Home Assistant can provide device state and service execution. Longer term,
156159
`genie-home-runtime` should provide that boundary and the final actuation safety layer.

crates/genie-core/Cargo.toml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,15 @@ name = "genie-core"
1414
path = "src/main.rs"
1515

1616
[features]
17-
default = ["telegram"]
17+
default = ["telegram", "llama-cpp", "genie-ai-runtime"]
1818
telegram = []
19+
# LLM backend feature surface (declared per issue #32 closeout).
20+
# Both default-on so today's builds are byte-identical.
21+
# Per-backend `#[cfg]` gating of the modules and constructors will land
22+
# alongside the CI matrix from issue #34, so a `--no-default-features`
23+
# regression is caught automatically rather than silently bit-rotting.
24+
llama-cpp = []
25+
genie-ai-runtime = []
1926

2027
[dependencies]
2128
genie-common = { workspace = true }

deploy/config/geniepod.dev.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ systemd_unit = "genie-core.service"
8585
[services.llm]
8686
url = "http://127.0.0.1:8080/health"
8787
systemd_unit = "genie-llm.service"
88+
# backend = "llama_cpp" # Default. Local llama.cpp `--server` on :8080.
89+
# backend = "genie_ai_runtime" # Jetson-tuned runtime (dev machines typically stay on llama.cpp).
8890

8991
# Uncomment to enable Home Assistant integration during development:
9092
# [services.homeassistant]

deploy/config/geniepod.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,12 @@ systemd_unit = "genie-core.service"
199199
[services.llm]
200200
url = "http://127.0.0.1:8080/health"
201201
systemd_unit = "genie-llm.service"
202+
# backend = "llama_cpp" # Default. Local llama.cpp `--server` on :8080.
203+
# backend = "genie_ai_runtime" # Jetson-tuned runtime (see GeniePod/genie-ai-runtime).
204+
# Set systemd_unit = "genie-ai-runtime.service"
205+
# and ensure the binary + a compatible model are
206+
# installed before flipping this.
207+
# Accepts hyphenated aliases too: "llama-cpp" / "genie-ai-runtime".
202208

203209
# Uncomment to enable Home Assistant integration:
204210
# [services.homeassistant]

0 commit comments

Comments
 (0)