mirror of
https://github.com/SHOGGOTH-SECTOR/sica-fondt.git
synced 2026-07-31 08:06:26 +00:00
cerebellum: env-driven plug-and-play model selection
PickLLM reads OPENHERMES_URL/OPENHERMES_MODEL from the environment and mounts OpenHermesClient when a URL is set, else StubLLM -- the bus wiring is identical either way. EnvLookup helper parses Env.vars. Verified both paths compile + run. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015hmgREHNsxYCuim33yUF2c
This commit is contained in:
parent
a2a3a2d336
commit
9244d58325
@ -50,6 +50,37 @@ actor OpenHermesClient is LLM
|
||||
// than perform an untested network call.
|
||||
respond("[openhermes " + _cfg.model + " @ " + _cfg.url + "] " + prompt)
|
||||
|
||||
// --- config plumbing ------------------------------------------------------
|
||||
primitive EnvLookup
|
||||
"""Find KEY in an Env.vars array ("KEY=value" entries); None if absent."""
|
||||
fun apply(vars: Array[String] val, key: String): (String | None) =>
|
||||
for v in vars.values() do
|
||||
let parts: Array[String] val = v.split_by("=", 2)
|
||||
try
|
||||
if parts(0)? == key then
|
||||
return parts(1)?
|
||||
end
|
||||
end
|
||||
end
|
||||
None
|
||||
|
||||
primitive PickLLM
|
||||
"""Plug-and-play model selection: OPENHERMES_URL picks the real client."""
|
||||
fun apply(out: OutStream, vars: Array[String] val): LLM =>
|
||||
match EnvLookup(vars, "OPENHERMES_URL")
|
||||
| let url: String =>
|
||||
let model =
|
||||
match EnvLookup(vars, "OPENHERMES_MODEL")
|
||||
| let m: String => m
|
||||
else "openhermes"
|
||||
end
|
||||
out.print("[cerebellum] model: OpenHermes " + model + " @ " + url)
|
||||
OpenHermesClient(OpenHermesConfig(url, model))
|
||||
else
|
||||
out.print("[cerebellum] model: StubLLM (set OPENHERMES_URL for a real model)")
|
||||
StubLLM
|
||||
end
|
||||
|
||||
// --- the harness ----------------------------------------------------------
|
||||
actor CerebellumHarness is OrganReceiver
|
||||
let _out: OutStream
|
||||
|
||||
@ -26,8 +26,10 @@ actor Main
|
||||
"reshuffle: cross-only"))
|
||||
|
||||
// --- cerebellum harness plugged into the bus (C1 / OpenHermes) ---
|
||||
// Swap StubLLM for a real OpenHermes client and nothing else changes.
|
||||
let cerebellum = CerebellumHarness(env.out, broker, StubLLM, 2)
|
||||
// Plug-and-play: PickLLM chooses the model from the environment
|
||||
// (OPENHERMES_URL/MODEL -> real client, else StubLLM); nothing else changes.
|
||||
let cerebellum =
|
||||
CerebellumHarness(env.out, broker, PickLLM(env.out, env.vars), 2)
|
||||
broker.register(Cerebellum, cerebellum)
|
||||
|
||||
// A user turn enters the bus addressed to the cerebellum; it sequences the
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user