Files
RAG/backend/tests/unit/test_provider_smoke.py
YoVinchen 99b7df64ea
Some checks failed
verify / verify (push) Has been cancelled
Ensure live provider checks reach the provider
Accept Docker Compose's exact string representation of the fixed 1024-dimensional embedding contract while rejecting every widened or ambiguous value. Entry-level smoke tests now exercise the same environment shape used by the container.

Constraint: The current local Bailian credential still returns 401 for all three capabilities and is not stored in Git.
Rejected: Change the field to an unconstrained integer | would allow a runtime dimension that disagrees with vector(1024).
Confidence: high
Scope-risk: narrow
Directive: Keep the database vector dimension and provider dimension locked together through an ADR-backed migration.
Tested: make verify; 75 backend tests; 14 frontend tests; rebuilt provider-smoke image; normal Compose smoke reached all three provider endpoints.
Not-tested: Successful live provider response remains blocked by external authentication.
2026-07-13 03:29:19 +08:00

76 lines
2.6 KiB
Python

import pytest
from app.core.config import Settings
from app.ports.model_providers import ModelProviderError, ProviderErrorKind
from app.tools import provider_smoke
from app.tools.provider_smoke import ProbeResult, failed_probe
def test_provider_smoke_settings_accept_compose_embedding_dimension(
monkeypatch: pytest.MonkeyPatch,
) -> None:
monkeypatch.setenv("EMBEDDING_DIMENSION", "1024")
settings = Settings(_env_file=None)
assert settings.embedding_dimension == 1024
async def test_provider_smoke_entrypoint_accepts_compose_embedding_dimension(
monkeypatch: pytest.MonkeyPatch,
) -> None:
workspace_host = "workspace-test.cn-beijing.maas.aliyuncs.com"
monkeypatch.setenv("EMBEDDING_DIMENSION", "1024")
monkeypatch.setenv(
"BAILIAN_OPENAI_BASE_URL",
f"https://{workspace_host}/compatible-mode/v1",
)
monkeypatch.setenv(
"BAILIAN_RERANK_BASE_URL",
f"https://{workspace_host}/compatible-api/v1",
)
observed_dimensions: list[int] = []
def fake_api_key(settings: Settings) -> str:
observed_dimensions.append(settings.embedding_dimension)
return "test-only-api-key"
async def successful_probe(settings: Settings, api_key: str) -> ProbeResult:
observed_dimensions.append(settings.embedding_dimension)
assert api_key == "test-only-api-key"
return ProbeResult(capability="test", status="ok")
monkeypatch.setattr(Settings, "bailian_api_key", fake_api_key)
monkeypatch.setattr(provider_smoke, "probe_embedding", successful_probe)
monkeypatch.setattr(provider_smoke, "probe_rerank", successful_probe)
monkeypatch.setattr(provider_smoke, "probe_chat", successful_probe)
exit_code = await provider_smoke.async_main()
assert exit_code == 0
assert observed_dimensions == [1024, 1024, 1024, 1024]
def test_failed_probe_only_exposes_sanitized_provider_fields() -> None:
error = ModelProviderError(
operation="embedding.create",
kind=ProviderErrorKind.AUTHENTICATION,
status_code=401,
provider_code="invalid_api_key",
request_id="req-safe-1",
)
result = failed_probe("embedding", error)
assert result.error_kind == "authentication"
assert result.status_code == 401
assert result.request_id == "req-safe-1"
assert "invalid_api_key" not in repr(result)
def test_unexpected_error_is_reduced_to_fixed_category() -> None:
result = failed_probe("chat", RuntimeError("sensitive content"))
assert result.error_kind == "internal_contract_error"
assert "sensitive content" not in repr(result)