oterm/tests/conftest.py

71 lines
1.7 KiB
Python

from collections.abc import AsyncGenerator
from io import BytesIO
from pathlib import Path
import ollama
import pytest
import pytest_asyncio
from mcp import StdioServerParameters
from PIL import Image
from oterm.tools.mcp.client import MCPClient
DEFAULT_MODEL = "llama3.2"
@pytest_asyncio.fixture(autouse=True)
async def load_test_models():
try:
ollama.show(DEFAULT_MODEL)
except ollama.ResponseError:
ollama.pull(DEFAULT_MODEL)
yield
@pytest.fixture(scope="session")
def default_model() -> str:
return DEFAULT_MODEL
@pytest.fixture(scope="session")
def llama_image() -> bytes:
buffered = BytesIO()
image = Image.open("tests/data/lama.jpg")
image.save(buffered, format="JPEG")
return buffered.getvalue()
@pytest.fixture(scope="session")
def mcp_server_config() -> dict:
mcp_server_executable = Path(__file__).parent / "tools" / "mcp_servers.py"
return {
"stdio": {
"command": "mcp",
"args": ["run", mcp_server_executable.absolute().as_posix()],
},
"streamable_http": {
"url": "http://localhost:8000/mcp",
},
"streamable_http_bearer": {
"url": "http://localhost:8081/mcp",
"auth": {
"type": "bearer",
"token": "test_token",
},
},
"ws": {
"url": "ws://localhost:8000/ws",
},
}
@pytest_asyncio.fixture(scope="function")
async def mcp_client(mcp_server_config) -> AsyncGenerator[MCPClient, None]:
client = MCPClient(
"test_server",
StdioServerParameters.model_validate(mcp_server_config["stdio"]),
)
await client.initialize()
yield client
await client.teardown()