Stabilize local dev merge

Align regression tests with the current Odysseus behavior after merging origin/dev into local main.

- keep phone/name-only contacts valid and cover null email without crashes

- pin explicit web-search false form submission in chat.js

- update Cookbook dependency/download completion tests for combined live + persisted output

- expose SGLang OS package repair hints from backend diagnosis

- treat MLX and MLX-community repos as servable on Apple Metal while keeping CUDA behavior unchanged

- keep desktop new-chat coverage on the shared preferred-model helper

- remove a hardcoded crop overlay portal z-index literal

- include the local agent-loop cleanup that removes the old manage_notes reminder repair shim

Verified with: docker run --rm -v /home/pewds/odysseus-cookbook-fresh:/app -w /app odysseus-cookbook-fresh-odysseus python3 -m pytest -q (4515 passed, 4 skipped).
This commit is contained in:
pewdiepie-archdaemon
2026-07-07 01:15:20 +00:00
parent b5ec40d505
commit 038bdd85ec
12 changed files with 55 additions and 78 deletions
+11 -11
View File
@@ -43,13 +43,12 @@ def _fake_sysctl(brand="Apple M2 Pro", memsize_gb=32, wired_mb=None, display_jso
return run
def test_mlx_models_hidden_on_metal():
"""MLX-quantized models can't be served by llama.cpp or Ollama (the only
Metal-capable engines Odysseus generates), so they must never be recommended
on Apple Silicon — even though the catalog tags them as Apple-only."""
def test_mlx_models_visible_on_metal():
"""Apple Silicon can serve MLX models through the MLX engine, so Cookbook
should surface MLX rows on Metal while still hiding them on CUDA."""
results = rank_models(_metal_system(), limit=900)
mlx = [m for m in results if str(m.get("quant", "")).startswith("mlx-")]
assert mlx == [], f"MLX models surfaced but cannot be served: {[m['name'] for m in mlx]}"
assert mlx, "MLX models should be available on Apple Silicon / Metal hardware"
def _cuda_system():
@@ -65,17 +64,18 @@ def test_mlx_hidden_on_cuda_backend_unchanged():
assert mlx == []
def test_only_gguf_models_recommended_on_metal():
"""llama.cpp and Ollama (the only Metal engines) need GGUF. Safetensors-only
repos — incl. vLLM-only AWQ/GPTQ/FP8 — can't be served on Metal, so every
model recommended on Apple Silicon must ship a servable GGUF."""
def test_only_gguf_or_mlx_models_recommended_on_metal():
"""Metal recommendations must be servable locally: either GGUF for
llama.cpp/Ollama or MLX for the MLX engine."""
catalog = {m["name"]: m for m in get_models()}
unservable = [
r["name"] for r in rank_models(_metal_system(), limit=900)
if not (catalog.get(r["name"], {}).get("is_gguf")
if not (str(r.get("quant", "")).startswith("mlx-")
or str(r.get("name", "")).startswith(("mlx-community/", "lmstudio-community/"))
or catalog.get(r["name"], {}).get("is_gguf")
or catalog.get(r["name"], {}).get("gguf_sources"))
]
assert unservable == [], f"{len(unservable)} non-GGUF models on Metal, e.g. {unservable[:3]}"
assert unservable == [], f"{len(unservable)} non-servable models on Metal, e.g. {unservable[:3]}"
def test_qwen_catalog_entries_point_at_verified_gguf_repos():