| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- from __future__ import annotations
- import pytest
- from agency_swarm.integrations import openclaw as openclaw_mod
- from agency_swarm.integrations.openclaw import build_openclaw_responses_model
- from agency_swarm.utils.model_utils import get_default_settings_model_name, get_usage_tracking_model_name
- from tests.integration.fastapi._openclaw_test_support import reset_openclaw_current_app_defaults
- def test_build_openclaw_responses_model_uses_app_token_when_proxy_key_is_missing(
- monkeypatch: pytest.MonkeyPatch,
- ) -> None:
- monkeypatch.delenv("OPENCLAW_PROXY_API_KEY", raising=False)
- monkeypatch.setenv("APP_TOKEN", "app-token")
- model = build_openclaw_responses_model()
- assert model._client.api_key == "app-token"
- def test_build_openclaw_responses_model_prefers_app_token_over_proxy_key_for_current_app_proxy(
- monkeypatch: pytest.MonkeyPatch,
- ) -> None:
- monkeypatch.setenv("OPENCLAW_PROXY_API_KEY", "proxy-token")
- monkeypatch.setenv("APP_TOKEN", "app-token")
- model = build_openclaw_responses_model()
- assert model._client.api_key == "app-token"
- def test_build_openclaw_responses_model_prefers_openclaw_proxy_key_for_external_proxy_urls(
- monkeypatch: pytest.MonkeyPatch,
- ) -> None:
- monkeypatch.setenv("OPENCLAW_PROXY_API_KEY", "proxy-token")
- monkeypatch.setenv("APP_TOKEN", "app-token")
- model = build_openclaw_responses_model(base_url="https://example.com/openclaw/v1")
- assert model._client.api_key == "proxy-token"
- def test_build_openclaw_responses_model_uses_gateway_token_when_proxy_and_app_tokens_are_missing(
- monkeypatch: pytest.MonkeyPatch,
- ) -> None:
- monkeypatch.delenv("OPENCLAW_PROXY_API_KEY", raising=False)
- monkeypatch.delenv("APP_TOKEN", raising=False)
- monkeypatch.setenv("OPENCLAW_GATEWAY_TOKEN", "gateway-token")
- model = build_openclaw_responses_model()
- assert model._client.api_key == "gateway-token"
- def test_build_openclaw_responses_model_uses_gateway_token_before_app_token_for_direct_gateway_urls(
- monkeypatch: pytest.MonkeyPatch,
- ) -> None:
- monkeypatch.setenv("OPENCLAW_PROXY_API_KEY", "proxy-token")
- monkeypatch.setenv("APP_TOKEN", "app-token")
- monkeypatch.setenv("OPENCLAW_GATEWAY_TOKEN", "gateway-token")
- model = build_openclaw_responses_model(base_url="http://127.0.0.1:18789/v1")
- assert model._client.api_key == "gateway-token"
- def test_build_openclaw_responses_model_uses_openclaw_default_model_env_when_model_unspecified(
- monkeypatch: pytest.MonkeyPatch,
- ) -> None:
- monkeypatch.delenv("OPENCLAW_PROXY_BASE_URL", raising=False)
- monkeypatch.delenv("OPENCLAW_PROXY_HOST", raising=False)
- monkeypatch.delenv("OPENCLAW_PROXY_PORT", raising=False)
- monkeypatch.delenv("PORT", raising=False)
- monkeypatch.setenv("OPENCLAW_DEFAULT_MODEL", "openclaw:beta")
- reset_openclaw_current_app_defaults(monkeypatch)
- model = build_openclaw_responses_model()
- assert model.model == "openclaw:beta"
- def test_build_openclaw_responses_model_ignores_openclaw_alias_defaults_for_direct_gateway_urls(
- monkeypatch: pytest.MonkeyPatch,
- ) -> None:
- monkeypatch.setenv("OPENCLAW_DEFAULT_MODEL", "openclaw:main")
- monkeypatch.setenv("OPENCLAW_PROVIDER_MODEL", "anthropic/claude-sonnet-4-5")
- model = build_openclaw_responses_model(base_url="http://127.0.0.1:18789/v1", api_key="external-token")
- assert model.model == "anthropic/claude-sonnet-4-5"
- def test_build_openclaw_responses_model_defaults_external_v1_to_provider_model(
- monkeypatch: pytest.MonkeyPatch,
- ) -> None:
- monkeypatch.setenv("OPENCLAW_PROVIDER_MODEL", "anthropic/claude-sonnet-4-5")
- model = build_openclaw_responses_model(base_url="http://127.0.0.1:18789/v1", api_key="external-token")
- assert model.model == "anthropic/claude-sonnet-4-5"
- def test_build_openclaw_responses_model_preserves_openclaw_aliases_for_direct_gateway_urls() -> None:
- model = build_openclaw_responses_model(
- model="openclaw:custom",
- base_url="http://127.0.0.1:18789/v1",
- api_key="external-token",
- )
- assert model.model == "openclaw:custom"
- assert get_usage_tracking_model_name(model) == "openclaw:custom"
- assert get_default_settings_model_name(model) == "openclaw:custom"
- def test_build_openclaw_responses_model_preserves_explicit_nondefault_alias_metadata_for_current_app_proxy(
- monkeypatch: pytest.MonkeyPatch,
- ) -> None:
- reset_openclaw_current_app_defaults(monkeypatch)
- openclaw_mod.openclaw_model.register_current_app_openclaw_defaults(
- default_model="openclaw:main",
- provider_model="openai/gpt-5.4-mini",
- base_url="https://app.example/openclaw/v1",
- )
- model = build_openclaw_responses_model(
- model="openclaw:alt",
- base_url="https://app.example/openclaw/v1",
- api_key="app-token",
- )
- assert model.model == "openclaw:alt"
- assert get_usage_tracking_model_name(model) == "openclaw:alt"
- assert get_default_settings_model_name(model) == "openclaw:alt"
|