Kiy-K's picture
Restore full Space app with bucket model support
31c8075 verified
Raw
History Blame Contribute Delete
4.45 kB
import os
import pytest
from arena.agent import _load_dotenv, _normalize_openrouter_model, create_session
from arena.model_catalog import ModelProviderConfig
from arena.model_provider import create_chat_model
def test_create_session_returns_local_provider_with_env() -> None:
os.environ["DEEPAGENT_SANDBOX_PROVIDER"] = "local"
try:
session = create_session("test-session")
finally:
os.environ.pop("DEEPAGENT_SANDBOX_PROVIDER", None)
assert session.provider == "local"
assert session.thread_id == "test-session"
assert session.workspace_dir == "/workspace"
session.close()
def test_session_creates_composite_backend() -> None:
os.environ["DEEPAGENT_SANDBOX_PROVIDER"] = "local"
try:
session = create_session("test-composite")
finally:
os.environ.pop("DEEPAGENT_SANDBOX_PROVIDER", None)
from deepagents.backends import CompositeBackend
assert isinstance(session.backend, CompositeBackend)
assert session.workspace_dir == "/workspace"
assert session.agent is not None
session.close()
def test_disallowed_provider_raises() -> None:
os.environ["DEEPAGENT_SANDBOX_PROVIDER"] = "nonexistent"
try:
with pytest.raises(ValueError, match="Unsupported sandbox provider"):
create_session("test-bad")
finally:
os.environ.pop("DEEPAGENT_SANDBOX_PROVIDER", None)
def test_default_model_is_used_when_not_set() -> None:
os.environ["DEEPAGENT_SANDBOX_PROVIDER"] = "local"
os.environ.pop("DEEPAGENT_MODEL", None)
try:
session = create_session("test-default-model")
finally:
os.environ.pop("DEEPAGENT_SANDBOX_PROVIDER", None)
assert session.agent is not None
session.close()
@pytest.mark.parametrize(
("configured", "expected"),
[
("openrouter/qwen/qwen-2.5-7b-instruct", "qwen/qwen-2.5-7b-instruct"),
("openrouter:qwen/qwen-2.5-7b-instruct", "qwen/qwen-2.5-7b-instruct"),
("qwen/qwen-2.5-7b-instruct", "qwen/qwen-2.5-7b-instruct"),
],
)
def test_openrouter_model_normalizes_legacy_prefixes(configured: str, expected: str) -> None:
assert _normalize_openrouter_model(configured) == expected
def test_create_chat_model_uses_custom_openai_compatible_endpoint() -> None:
model = create_chat_model(
ModelProviderConfig(
provider="custom",
model="custom-model",
api_key="custom-key",
base_url="https://example.test/v1",
)
)
assert getattr(model, "model_name", getattr(model, "model", "")) == "custom-model"
assert str(model.model_dump()["openai_api_base"]).rstrip("/") == "https://example.test/v1"
def test_create_chat_model_uses_openrouter_deepagents_supported_provider() -> None:
model = create_chat_model(
ModelProviderConfig(
provider="openrouter",
model="qwen/qwen3.5-9b",
api_key="user-key",
)
)
assert type(model).__name__ == "ChatOpenRouter"
assert getattr(model, "model_name", getattr(model, "model", "")) == "qwen/qwen3.5-9b"
def test_create_chat_model_uses_cached_local_model_without_endpoint() -> None:
model = create_chat_model(
ModelProviderConfig(
provider="local",
model="unsloth/gemma-4-12B-it-qat-GGUF",
)
)
assert type(model).__name__ == "CachedLocalChatModel"
assert model.model_id == "unsloth/gemma-4-12B-it-qat-GGUF"
def test_create_chat_model_uses_openai_compatible_local_endpoint() -> None:
model = create_chat_model(
ModelProviderConfig(
provider="local",
model="local-model",
base_url="http://127.0.0.1:8000/v1",
)
)
assert type(model).__name__ == "ChatOpenAI"
assert str(model.model_dump()["openai_api_base"]).rstrip("/") == "http://127.0.0.1:8000/v1"
def test_per_run_openrouter_config_does_not_fall_back_to_server_key(monkeypatch) -> None:
monkeypatch.setenv("OPENROUTER_API_KEY", "server-secret")
with pytest.raises(Exception, match="OPENROUTER_API_KEY must be set"):
create_chat_model(
ModelProviderConfig(
provider="openrouter",
model="qwen/qwen3.5-9b",
)
)
def test_load_dotenv_does_not_override_existing_env() -> None:
os.environ["TEST_KEY"] = "from-env"
try:
_load_dotenv()
finally:
os.environ.pop("TEST_KEY", None)