Ctrl K
ComunidadGuías…

tests/test_providers.py

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import unittest
import json

from peach.providers import (
    OpenCodeGoClient, ProviderCapabilities, ProviderKind, ProviderRegistry,
    ProviderStatus, ProviderUnavailable, default_registry,
)


class ProviderRegistryTests(unittest.TestCase):
    def test_default_health_is_passive_and_deterministic(self):
        registry = default_registry(lambda name: f"C:/tools/{name}.exe" if name == "codex" else None)
        health = registry.health()
        by_id = {item["id"]: item for item in health["providers"]}

        self.assertEqual(set(by_id), {
            "opencode-go", "codex-local", "claude-code-local-personal",
        })
        self.assertTrue(by_id["opencode-go"]["available"])
        self.assertTrue(by_id["codex-local"]["available"])
        self.assertFalse(by_id["claude-code-local-personal"]["available"])
        self.assertTrue(by_id["claude-code-local-personal"]["experimental"])
        for item in health["providers"]:
            self.assertEqual(set(item), {
                "id", "kind", "provider", "auth_mode", "available", "configured",
                "experimental", "capabilities", "note",
            })
            self.assertNotIn("secret_ref", item)
            self.assertNotIn("executable", item)

    def test_duplicate_provider_id_is_rejected(self):
        registry = ProviderRegistry()
        status = ProviderStatus(
            id="one", kind=ProviderKind.INFERENCE, provider="test",
            auth_mode="none", available=True, configured=True, experimental=False,
            capabilities=ProviderCapabilities(),
        )
        registry.register(status)
        with self.assertRaisesRegex(ValueError, "duplicate provider id"):
            registry.register(status)

    def test_opencode_model_discovery_is_normalized_and_cached(self):
        calls = []

        def transport(request, timeout, max_bytes):
            calls.append((request.url, request.headers.get("Authorization"), timeout, max_bytes))
            from peach.http import HttpResponse
            return HttpResponse(200, {}, json.dumps({"object": "list", "data": [
                {"id": "kimi-k3", "object": "model", "owned_by": "opencode", "extra": "drop"},
                {"missing": "id"},
            ]}).encode())

        client = OpenCodeGoClient(
            "test-secret", transport=transport, cache_ttl=300, timeout=3,
        )
        first = client.list_models()
        second = client.list_models()

        self.assertTrue(client.configured)
        self.assertEqual(first, [{
            "id": "kimi-k3", "object": "model", "owned_by": "opencode",
        }])
        self.assertEqual(second, first)
        self.assertEqual(len(calls), 1)
        self.assertEqual(calls[0], (
            "https://opencode.ai/zen/go/v1/models", "Bearer test-secret", 3, 1024 * 1024,
        ))
        self.assertNotIn("test-secret", repr(first))

    def test_opencode_invalid_payload_is_provider_error(self):
        from peach.http import HttpResponse
        client = OpenCodeGoClient(
            transport=lambda *_: HttpResponse(200, {}, b'{"unexpected":true}')
        )
        with self.assertRaises(ProviderUnavailable):
            client.list_models()


if __name__ == "__main__":
    unittest.main()