mirror of
https://github.com/open-jarvis/OpenJarvis.git
synced 2026-07-31 03:12:16 +00:00
feat: wire gemma_cpp engine into discovery and optional imports
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
411e822916
commit
d08360ca21
@@ -15,7 +15,7 @@ from openjarvis.engine._base import (
|
||||
from openjarvis.engine._discovery import discover_engines, discover_models, get_engine
|
||||
|
||||
# Optional engines — only register if their SDK deps are present
|
||||
for _optional in ("cloud", "litellm"):
|
||||
for _optional in ("cloud", "litellm", "gemma_cpp"):
|
||||
try:
|
||||
importlib.import_module(f".{_optional}", __name__)
|
||||
except ImportError:
|
||||
|
||||
@@ -25,12 +25,24 @@ _HOST_MAP: Dict[str, str | None] = {
|
||||
"apple_fm": "apple_fm_host",
|
||||
"cloud": None,
|
||||
"litellm": None,
|
||||
"gemma_cpp": None,
|
||||
}
|
||||
|
||||
|
||||
def _make_engine(key: str, config: JarvisConfig) -> InferenceEngine:
|
||||
"""Instantiate a registered engine with the appropriate config host."""
|
||||
cls = EngineRegistry.get(key)
|
||||
|
||||
# gemma_cpp: pass config fields instead of host
|
||||
if key == "gemma_cpp":
|
||||
cfg = config.engine.gemma_cpp
|
||||
return cls(
|
||||
model_path=cfg.model_path or None,
|
||||
tokenizer_path=cfg.tokenizer_path or None,
|
||||
model_type=cfg.model_type or None,
|
||||
num_threads=cfg.num_threads,
|
||||
)
|
||||
|
||||
host_attr = _HOST_MAP.get(key)
|
||||
if host_attr is not None:
|
||||
host = getattr(config.engine, host_attr, None)
|
||||
|
||||
@@ -323,3 +323,37 @@ class TestGemmaCppConfigResolution:
|
||||
assert engine._tokenizer_path == ""
|
||||
assert engine._model_type == ""
|
||||
assert engine._num_threads == 0
|
||||
|
||||
|
||||
class TestGemmaCppDiscovery:
|
||||
def test_host_map_contains_gemma_cpp(self) -> None:
|
||||
from openjarvis.engine._discovery import _HOST_MAP
|
||||
assert "gemma_cpp" in _HOST_MAP
|
||||
assert _HOST_MAP["gemma_cpp"] is None
|
||||
|
||||
def test_make_engine_passes_config(self) -> None:
|
||||
from openjarvis.core.config import GemmaCppEngineConfig, JarvisConfig
|
||||
from openjarvis.core.registry import EngineRegistry
|
||||
from openjarvis.engine._discovery import _make_engine
|
||||
from openjarvis.engine.gemma_cpp import GemmaCppEngine
|
||||
|
||||
EngineRegistry.register_value("gemma_cpp", GemmaCppEngine)
|
||||
config = JarvisConfig()
|
||||
config.engine.gemma_cpp = GemmaCppEngineConfig(
|
||||
model_path="/cfg/model.sbs",
|
||||
tokenizer_path="/cfg/tokenizer.spm",
|
||||
model_type="9b-it",
|
||||
num_threads=4,
|
||||
)
|
||||
engine = _make_engine("gemma_cpp", config)
|
||||
assert engine._model_path == "/cfg/model.sbs"
|
||||
assert engine._tokenizer_path == "/cfg/tokenizer.spm"
|
||||
assert engine._model_type == "9b-it"
|
||||
assert engine._num_threads == 4
|
||||
|
||||
def test_registry_contains_gemma_cpp(self) -> None:
|
||||
from openjarvis.core.registry import EngineRegistry
|
||||
from openjarvis.engine.gemma_cpp import GemmaCppEngine
|
||||
|
||||
EngineRegistry.register_value("gemma_cpp", GemmaCppEngine)
|
||||
assert EngineRegistry.contains("gemma_cpp")
|
||||
|
||||
Reference in New Issue
Block a user