from pathlib import Path from ai_runtime import chat_endpoint, local_ai_env, minicpm_server_command, start_minicpm_server # Verify local chat endpoints use OpenAI-compatible paths. def test_chat_endpoint() -> None: assert chat_endpoint(8090) == "http://127.0.0.1:8090/v1/chat/completions" # Verify the MiniCPM server command points llama.cpp at the GGUF model. def test_minicpm_server_command() -> None: command = minicpm_server_command(Path("mini.gguf"), 9000) assert command[:3] == ("llama-server", "--model", "mini.gguf") assert "--port" in command assert "9000" in command assert "--n-gpu-layers" in command assert "--parallel" in command # Verify local AI env forces MiniCPM card generation and Nemotron boss play. def test_local_ai_env(monkeypatch) -> None: monkeypatch.setenv("TABRAS_CARD_ENDPOINT", "old") env = local_ai_env(9001) assert env["TABRAS_CARD_BACKEND"] == "llamacpp" assert env["TABRAS_CARD_ENDPOINT"] == "http://127.0.0.1:9001/v1/chat/completions" assert env["TABRAS_CARD_MAX_TOKENS"] == "256" assert env["TABRAS_CARD_TEMPERATURE"] == "0.7" assert env["TABRAS_AI_BOSS"] == "1" assert env["TABRAS_BOSS_BACKEND"] == "mlx" assert "Nemotron" in env["TABRAS_BOSS_MODEL"] assert env["TABRAS_ART_BACKEND"] == "diffusers" assert env["TABRAS_ART_MODEL"] == "stabilityai/sdxl-turbo" assert env["TABRAS_ART_WIDTH"] == "512" assert env["TABRAS_ART_HEIGHT"] == "320" # Verify starting MiniCPM fails early when the GGUF is absent. def test_start_minicpm_server_requires_model(tmp_path) -> None: missing = tmp_path / "missing.gguf" try: start_minicpm_server(missing, 9002) except FileNotFoundError as error: assert str(missing) in str(error) else: raise AssertionError("missing MiniCPM model did not fail")