commit e27c02a3c5eca01956f1264dcf39a53a943799e7
parent b3040f37f2a952becc32f84ebfe0f89a6ac67288
Author: triesap <tyson@radroots.org>
Date: Mon, 21 Sep 2026 13:47:59 +0000
runtime: add runtime composition for jev
Diffstat:
2 files changed, 68 insertions(+), 0 deletions(-)
diff --git a/src/hyf_runtime/jev_composition.mojo b/src/hyf_runtime/jev_composition.mojo
@@ -0,0 +1,55 @@
+from std.os import getenv
+
+from hyf_runtime.config import (
+ HyfLoadedRuntimeConfig,
+ assisted_execution_enabled,
+ provider_disabled,
+ typesafe_provider_configured,
+)
+
+
+@fieldwise_init
+struct JevComposition(Copyable, Movable):
+ var usable: Bool
+ var base_url: String
+ var model: String
+ var request_timeout_ms: Int
+ var reason: String
+
+
+def typesafe_api_key_present() -> Bool:
+ return getenv("TYPESAFE_API_KEY", "") != ""
+
+
+def compose_jev(config: HyfLoadedRuntimeConfig) raises -> JevComposition:
+ var typesafe = config.effective.assisted.typesafe.copy()
+ if provider_disabled(config):
+ return JevComposition(
+ usable=False, base_url="", model="", request_timeout_ms=0,
+ reason="provider_disabled",
+ )
+ if not assisted_execution_enabled(config):
+ return JevComposition(
+ usable=False, base_url="", model="", request_timeout_ms=0,
+ reason="disabled_by_runtime_config",
+ )
+ if not typesafe_provider_configured(config):
+ return JevComposition(
+ usable=False, base_url="", model="", request_timeout_ms=0,
+ reason="provider_unconfigured",
+ )
+ if not typesafe_api_key_present():
+ return JevComposition(
+ usable=False,
+ base_url=String(typesafe.base_url),
+ model=String(typesafe.model),
+ request_timeout_ms=typesafe.request_timeout_ms,
+ reason="missing_credentials",
+ )
+ return JevComposition(
+ usable=True,
+ base_url=String(typesafe.base_url),
+ model=String(typesafe.model),
+ request_timeout_ms=typesafe.request_timeout_ms,
+ reason="ready",
+ )
diff --git a/tests/test_runtime_paths.mojo b/tests/test_runtime_paths.mojo
@@ -292,3 +292,16 @@ def test_shared_budget_does_not_reset_per_stage() raises:
assert_true(budget_exhausted(value, 600_000_000))
var capped = budget_from_clock(5000, 2000, 0)
assert_equal(capped.cap_ms, 2000)
+
+
+from hyf_runtime.jev_composition import compose_jev
+
+
+def test_jev_runtime_composition_reasons() raises:
+ var disabled = default_loaded_runtime_config()
+ assert_equal(compose_jev(disabled).reason, "disabled_by_runtime_config")
+ var configured = _typesafe_config(True, "https://api.typesafe.ai")
+ var composition = compose_jev(configured)
+ assert_true(not composition.usable)
+ assert_equal(composition.reason, "missing_credentials")
+ assert_equal(composition.model, "jev-1.13.0")