from __future__ import annotations
import inspect
import os
import sys
import pytest
def _try_import():
try:
import oxillama_py
has_ext = oxillama_py.Engine is not None
return oxillama_py, has_ext
except ImportError:
return None, False
oxillama_py, HAS_EXT = _try_import()
pytestmark = pytest.mark.skipif(
oxillama_py is None,
reason="oxillama_py package not importable",
)
def test_hub_origin_typed_dict():
try:
from oxillama_py import HubOrigin
assert "repo_id" in HubOrigin.__annotations__
assert "filename" in HubOrigin.__annotations__
assert "sha256" in HubOrigin.__annotations__
except ImportError:
pyi_path = os.path.join(
os.path.dirname(os.path.dirname(__file__)),
"oxillama_py",
"__init__.pyi",
)
assert os.path.exists(pyi_path), "oxillama_py/__init__.pyi must exist"
with open(pyi_path) as f:
content = f.read()
assert "HubOrigin" in content, "__init__.pyi must mention HubOrigin"
def test_hub_origin_typed_dict_keys():
try:
from oxillama_py import HubOrigin
annotations = HubOrigin.__annotations__
assert "repo_id" in annotations, "HubOrigin must have 'repo_id'"
assert "filename" in annotations, "HubOrigin must have 'filename'"
assert "sha256" in annotations, "HubOrigin must have 'sha256'"
except (ImportError, AttributeError):
pyi = os.path.join(
os.path.dirname(os.path.dirname(__file__)),
"oxillama_py",
"__init__.pyi",
)
if os.path.exists(pyi):
content = open(pyi).read()
for key in ("repo_id", "filename", "sha256"):
assert key in content, f"pyi stub must mention '{key}'"
@pytest.mark.skipif(not HAS_EXT, reason="Native extension not available")
def test_engine_has_logits_dlpack_method():
assert hasattr(oxillama_py.Engine, "logits_dlpack"), (
"Engine is missing 'logits_dlpack' method"
)
@pytest.mark.skipif(not HAS_EXT, reason="Native extension not available")
def test_engine_has_embeddings_dlpack_method():
assert hasattr(oxillama_py.Engine, "embeddings_dlpack"), (
"Engine is missing 'embeddings_dlpack' method"
)
@pytest.mark.skipif(not HAS_EXT, reason="Native extension not available")
def test_engine_has_from_snapshot_with_hub():
assert hasattr(oxillama_py.Engine, "from_snapshot_with_hub"), (
"Engine is missing 'from_snapshot_with_hub' classmethod"
)
@pytest.mark.skipif(not HAS_EXT, reason="Native extension not available")
def test_from_snapshot_with_hub_is_callable():
method = getattr(oxillama_py.Engine, "from_snapshot_with_hub")
assert callable(method), "from_snapshot_with_hub must be callable"
@pytest.mark.skipif(not HAS_EXT, reason="Native extension not available")
def test_snapshot_hub_origin_none_by_default():
assert hasattr(oxillama_py.Engine, "snapshot"), "Engine must have snapshot method"
snap_fn = getattr(oxillama_py.Engine, "snapshot")
assert callable(snap_fn), "Engine.snapshot must be callable"
@pytest.mark.skipif(not HAS_EXT, reason="Native extension not available")
def test_snapshot_accepts_hub_origin_kwarg():
snap_fn = getattr(oxillama_py.Engine, "snapshot")
sig_str = getattr(snap_fn, "__text_signature__", "") or ""
doc_str = getattr(snap_fn, "__doc__", "") or ""
assert "hub_origin" in sig_str or "hub_origin" in doc_str, (
"Engine.snapshot must document hub_origin kwarg in signature or docstring; "
f"sig={sig_str!r}, doc={doc_str[:200]!r}"
)
@pytest.mark.skipif(not HAS_EXT, reason="Native extension not available")
def test_dlpack_capsule_type_check():
method = getattr(oxillama_py.Engine, "logits_dlpack", None)
assert method is not None, "logits_dlpack must exist on Engine"
assert callable(method), "logits_dlpack must be callable"
@pytest.mark.skipif(not HAS_EXT, reason="Native extension not available")
def test_embeddings_dlpack_is_callable():
method = getattr(oxillama_py.Engine, "embeddings_dlpack", None)
assert method is not None, "embeddings_dlpack must exist on Engine"
assert callable(method), "embeddings_dlpack must be callable"
SKIP_NO_MODEL = pytest.mark.skipif(
not os.environ.get("OXILLAMA_TEST_MODEL"),
reason="OXILLAMA_TEST_MODEL not set",
)
@SKIP_NO_MODEL
@pytest.mark.skipif(not HAS_EXT, reason="Native extension not available")
def test_logits_dlpack_returns_capsule(tmp_path):
model_path = os.environ["OXILLAMA_TEST_MODEL"]
cfg = oxillama_py.EngineConfig(model_path)
engine = oxillama_py.Engine(cfg)
engine.load_model()
capsule = engine.logits_dlpack("Hello")
assert capsule is not None, "logits_dlpack must return a non-None object"
repr_str = repr(capsule)
assert isinstance(repr_str, str), "capsule must have a repr"
@SKIP_NO_MODEL
@pytest.mark.skipif(not HAS_EXT, reason="Native extension not available")
def test_embeddings_dlpack_returns_capsule(tmp_path):
model_path = os.environ["OXILLAMA_TEST_MODEL"]
cfg = oxillama_py.EngineConfig(model_path)
engine = oxillama_py.Engine(cfg)
engine.load_model()
capsule = engine.embeddings_dlpack("Hello world")
assert capsule is not None, "embeddings_dlpack must return a non-None object"
@SKIP_NO_MODEL
@pytest.mark.skipif(not HAS_EXT, reason="Native extension not available")
def test_snapshot_with_hub_origin_roundtrip(tmp_path):
model_path = os.environ["OXILLAMA_TEST_MODEL"]
cfg = oxillama_py.EngineConfig(model_path)
engine = oxillama_py.Engine(cfg)
engine.load_model()
snap_path = str(tmp_path / "hub_snap.oxsn")
hub_origin = {
"repo_id": "meta-llama/Llama-2-7b-hf",
"filename": "llama-2-7b.Q4_K_M.gguf",
"sha256": "a" * 64,
}
engine.snapshot(snap_path, hub_origin=hub_origin)
assert os.path.exists(snap_path), "snapshot file must exist"
meta_path = snap_path + ".meta.json"
assert os.path.exists(meta_path), ".meta.json sidecar must be written"
import json
with open(meta_path) as f:
meta = json.load(f)
assert "hub_origin" in meta, "meta.json must contain hub_origin"
assert meta["hub_origin"]["repo_id"] == hub_origin["repo_id"]
assert meta["hub_origin"]["filename"] == hub_origin["filename"]