Files
2026-07-13 13:08:41 +08:00

99 lines
3.4 KiB
Python

import asyncio
import pytest
from models.ollama_model_status import OllamaModelStatus
from utils import model_availability
from utils.model_availability import check_llm_and_image_provider_api_or_model_availability
def _set_litellm_env(monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.setenv("CAN_CHANGE_KEYS", "false")
monkeypatch.setenv("LLM", "litellm")
monkeypatch.setenv("LITELLM_BASE_URL", "http://localhost:4000")
monkeypatch.setenv("LITELLM_MODEL", "test-model")
def test_skips_image_provider_when_generation_disabled(monkeypatch):
_set_litellm_env(monkeypatch)
monkeypatch.setenv("DISABLE_IMAGE_GENERATION", "true")
monkeypatch.delenv("IMAGE_PROVIDER", raising=False)
asyncio.run(check_llm_and_image_provider_api_or_model_availability())
def test_skips_invalid_image_provider_when_generation_disabled(monkeypatch):
_set_litellm_env(monkeypatch)
monkeypatch.setenv("DISABLE_IMAGE_GENERATION", "true")
monkeypatch.setenv("IMAGE_PROVIDER", "not-a-real-provider")
asyncio.run(check_llm_and_image_provider_api_or_model_availability())
def test_requires_image_provider_when_generation_enabled(monkeypatch):
_set_litellm_env(monkeypatch)
monkeypatch.delenv("DISABLE_IMAGE_GENERATION", raising=False)
monkeypatch.delenv("IMAGE_PROVIDER", raising=False)
with pytest.raises(Exception, match="IMAGE_PROVIDER must be provided"):
asyncio.run(check_llm_and_image_provider_api_or_model_availability())
def test_ollama_requires_selected_model_to_already_be_available(monkeypatch):
monkeypatch.setenv("CAN_CHANGE_KEYS", "false")
monkeypatch.setenv("LLM", "ollama")
monkeypatch.setenv("OLLAMA_MODEL", "llama3:8b")
monkeypatch.setenv("DISABLE_IMAGE_GENERATION", "true")
async def list_models():
return []
monkeypatch.setattr(model_availability, "list_available_ollama_models", list_models)
with pytest.raises(Exception, match="not available in Ollama"):
asyncio.run(check_llm_and_image_provider_api_or_model_availability())
def test_ollama_accepts_selected_available_model(monkeypatch):
monkeypatch.setenv("CAN_CHANGE_KEYS", "false")
monkeypatch.setenv("LLM", "ollama")
monkeypatch.setenv("OLLAMA_MODEL", "llama3:8b")
monkeypatch.setenv("DISABLE_IMAGE_GENERATION", "true")
async def list_models():
return [
OllamaModelStatus(
name="llama3:8b",
size=1,
downloaded=1,
status="pulled",
done=True,
)
]
monkeypatch.setattr(model_availability, "list_available_ollama_models", list_models)
asyncio.run(check_llm_and_image_provider_api_or_model_availability())
def test_ollama_accepts_selected_available_experimental_model(monkeypatch):
monkeypatch.setenv("CAN_CHANGE_KEYS", "false")
monkeypatch.setenv("LLM", "ollama")
monkeypatch.setenv("OLLAMA_MODEL", "custom-local-model:latest")
monkeypatch.setenv("DISABLE_IMAGE_GENERATION", "true")
async def list_models():
return [
OllamaModelStatus(
name="custom-local-model:latest",
size=1,
downloaded=1,
status="pulled",
done=True,
)
]
monkeypatch.setattr(model_availability, "list_available_ollama_models", list_models)
asyncio.run(check_llm_and_image_provider_api_or_model_availability())