Import AITURK IDE 1.0.0-beta.1 from Hermes 63279301; preserve MIT license
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
"""A provider profile can supply its own client — the registration seam.
|
||||
|
||||
A provider whose wire protocol is not OpenAI-over-HTTP (the ACP subprocess
|
||||
shims) supplies its client via ``ProviderProfile.create_client()``, from inside
|
||||
or outside the tree. These tests pin the hook through the real entry point
|
||||
(``create_openai_client``), its failure isolation, and the capability flags
|
||||
that let such a client opt out of the auxiliary transport/async wrappers.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from types import SimpleNamespace
|
||||
|
||||
import pytest
|
||||
|
||||
import providers as _providers
|
||||
from providers.base import ProviderProfile
|
||||
|
||||
|
||||
class _FakeClient:
|
||||
HERMES_SKIP_TRANSPORT_WRAP = True
|
||||
HERMES_SKIP_ASYNC_WRAP = True
|
||||
api_key = "k"
|
||||
base_url = "acp://seam-test"
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
self.kwargs = kwargs
|
||||
|
||||
|
||||
class _SeamProfile(ProviderProfile):
|
||||
def create_client(self, **kwargs):
|
||||
return _FakeClient(**kwargs)
|
||||
|
||||
|
||||
class _ExplodingProfile(ProviderProfile):
|
||||
def create_client(self, **kwargs):
|
||||
raise RuntimeError("plugin is broken")
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def registered():
|
||||
"""Register profiles for one test and restore the registry afterwards."""
|
||||
_providers._discover_providers()
|
||||
snapshot = (dict(_providers._REGISTRY), dict(_providers._ALIASES), _providers._PROVIDER_LIST_CACHE)
|
||||
yield _providers.register_provider
|
||||
_providers._REGISTRY.clear()
|
||||
_providers._REGISTRY.update(snapshot[0])
|
||||
_providers._ALIASES.clear()
|
||||
_providers._ALIASES.update(snapshot[1])
|
||||
_providers._PROVIDER_LIST_CACHE = snapshot[2]
|
||||
|
||||
|
||||
def _agent(provider: str = ""):
|
||||
return SimpleNamespace(
|
||||
provider=provider,
|
||||
_client_log_context=lambda: "",
|
||||
_build_keepalive_http_client=lambda *a, **k: None,
|
||||
)
|
||||
|
||||
|
||||
def _build(provider, base_url):
|
||||
from agent.agent_runtime_helpers import create_openai_client
|
||||
|
||||
return create_openai_client(_agent(provider), {"api_key": "k", "base_url": base_url}, reason="t", shared=False)
|
||||
|
||||
|
||||
def test_an_out_of_tree_profile_supplies_the_client_through_create_openai_client(registered):
|
||||
from openai import OpenAI
|
||||
|
||||
registered(_SeamProfile(name="seam-test", aliases=("seam",), base_url="acp://seam-test"))
|
||||
# By name, by alias, and by base_url prefix when no provider name is set.
|
||||
assert isinstance(_build("seam-test", "acp://seam-test"), _FakeClient)
|
||||
assert isinstance(_build("seam", "acp://seam-test"), _FakeClient)
|
||||
assert isinstance(_build("", "acp://seam-test/x"), _FakeClient)
|
||||
# No hook → the standard client, untouched by the seam.
|
||||
assert isinstance(_build("openai-api", "https://api.example/v1"), OpenAI)
|
||||
|
||||
|
||||
def test_a_broken_plugin_falls_through_instead_of_taking_the_turn_down(registered):
|
||||
from agent.agent_runtime_helpers import _provider_supplied_client
|
||||
|
||||
registered(_ExplodingProfile(name="seam-boom", base_url="acp://seam-boom"))
|
||||
assert _provider_supplied_client(_agent("seam-boom"), {"api_key": "k"}) is None
|
||||
|
||||
|
||||
def test_copilot_acp_still_gets_its_acp_client_via_its_profile():
|
||||
from agent.copilot_acp_client import CopilotACPClient
|
||||
|
||||
assert isinstance(_build("copilot-acp", "acp://copilot"), CopilotACPClient)
|
||||
assert isinstance(_build("", "acp://copilot"), CopilotACPClient)
|
||||
|
||||
|
||||
def test_skip_flags_replace_the_isinstance_checks_for_in_and_out_of_tree_clients():
|
||||
from agent.auxiliary_client import _maybe_wrap_anthropic, _to_async_client
|
||||
from agent.copilot_acp_client import CopilotACPClient
|
||||
from agent.gemini_native_adapter import GeminiNativeClient
|
||||
|
||||
assert CopilotACPClient.HERMES_SKIP_TRANSPORT_WRAP and CopilotACPClient.HERMES_SKIP_ASYNC_WRAP
|
||||
assert GeminiNativeClient.HERMES_SKIP_TRANSPORT_WRAP
|
||||
assert not getattr(GeminiNativeClient, "HERMES_SKIP_ASYNC_WRAP", False)
|
||||
|
||||
client = _FakeClient() # never imported by auxiliary_client
|
||||
assert _maybe_wrap_anthropic(client, "m", "k", "acp://seam-test") is client
|
||||
assert _to_async_client(client, "m")[0] is client
|
||||
Reference in New Issue
Block a user