Files
wehub-resource-sync e4dcfc49aa
Tests / Import Check (Python 3.13) (push) Has been cancelled
Tests / Import Check (Python 3.14) (push) Has been cancelled
Tests / Python Tests (Python 3.11) (push) Has been cancelled
Tests / Python Tests (Python 3.12) (push) Has been cancelled
Tests / Python Tests (Python 3.14) (push) Has been cancelled
Tests / Test Summary (push) Has been cancelled
Tests / Lint and Format (push) Has been cancelled
Tests / Web Node Tests (push) Has been cancelled
Tests / Import Check (Python 3.11) (push) Has been cancelled
Tests / Import Check (Python 3.12) (push) Has been cancelled
Tests / Python Tests (Python 3.13) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:00:43 +08:00

319 lines
10 KiB
Python

"""Tests for normalized embedding runtime resolution."""
from __future__ import annotations
import pytest
from deeptutor.services.config.provider_runtime import (
EMBEDDING_PROVIDERS,
resolve_embedding_runtime_config,
)
def _build_catalog(
*,
embedding_profile: dict | None = None,
embedding_model: dict | None = None,
) -> dict:
embedding_profile = embedding_profile or {
"id": "embedding-p",
"name": "Embedding",
"binding": "openai",
"base_url": "",
"api_key": "",
"api_version": "",
"extra_headers": {},
"models": [{"id": "embedding-m", "name": "m", "model": "text-embedding-3-large"}],
}
if embedding_model is not None:
# Replace whichever model lives at the active slot so the override is
# actually visible to ``resolve_embedding_runtime_config``.
embedding_profile["models"] = [embedding_model]
embedding_model = embedding_profile["models"][0]
return {
"version": 1,
"services": {
"llm": {"active_profile_id": None, "active_model_id": None, "profiles": []},
"embedding": {
"active_profile_id": embedding_profile["id"],
"active_model_id": embedding_model["id"],
"profiles": [embedding_profile],
},
"search": {"active_profile_id": None, "profiles": []},
},
}
def test_embedding_explicit_binding_and_headers() -> None:
catalog = _build_catalog(
embedding_profile={
"id": "embedding-p",
"name": "Embedding",
"binding": "jina",
"base_url": "",
"api_key": "jina-key",
"api_version": "",
"extra_headers": {"X-App": "demo"},
"models": [
{
"id": "embedding-m",
"name": "jina",
"model": "jina-embeddings-v3",
"dimension": "1024",
}
],
}
)
resolved = resolve_embedding_runtime_config(catalog=catalog)
assert resolved.provider_name == "jina"
assert resolved.provider_mode == "standard"
assert resolved.effective_url == "https://api.jina.ai/v1/embeddings"
assert resolved.extra_headers == {"X-App": "demo"}
assert resolved.dimension == 1024
def test_embedding_alias_canonicalization_google_to_gemini() -> None:
catalog = _build_catalog(
embedding_profile={
"id": "embedding-p",
"name": "Embedding",
"binding": "google",
"base_url": "",
"api_key": "k",
"api_version": "",
"extra_headers": {},
"models": [{"id": "embedding-m", "name": "m", "model": "text-embedding-3-small"}],
}
)
resolved = resolve_embedding_runtime_config(catalog=catalog)
assert resolved.provider_name == "gemini"
assert resolved.binding == "gemini"
def test_embedding_gemini_default_base_and_profile_key() -> None:
catalog = _build_catalog(
embedding_profile={
"id": "embedding-p",
"name": "Embedding",
"binding": "gemini",
"base_url": "",
"api_key": "gemini-test-key",
"api_version": "",
"extra_headers": {},
"models": [{"id": "embedding-m", "name": "m", "model": "gemini-embedding-001"}],
}
)
resolved = resolve_embedding_runtime_config(catalog=catalog)
assert resolved.provider_name == "gemini"
assert resolved.binding == "gemini"
assert resolved.api_key == "gemini-test-key"
assert (
resolved.effective_url
== "https://generativelanguage.googleapis.com/v1beta/openai/embeddings"
)
def test_embedding_local_fallback_from_base_url() -> None:
catalog = _build_catalog(
embedding_profile={
"id": "embedding-p",
"name": "Embedding",
"binding": "",
"base_url": "http://localhost:11434",
"api_key": "",
"api_version": "",
"extra_headers": {},
"models": [{"id": "embedding-m", "name": "m", "model": "nomic-embed-text"}],
}
)
resolved = resolve_embedding_runtime_config(catalog=catalog)
assert resolved.provider_name == "ollama"
assert resolved.provider_mode == "local"
assert resolved.api_key == ""
def test_embedding_local_vllm_uses_profile_key() -> None:
catalog = _build_catalog(
embedding_profile={
"id": "embedding-p",
"name": "Embedding",
"binding": "vllm",
"base_url": "http://localhost:1234/v1/embeddings",
"api_key": "local-secret",
"api_version": "",
"extra_headers": {},
"models": [{"id": "embedding-m", "name": "m", "model": "text-embedding-model"}],
}
)
resolved = resolve_embedding_runtime_config(catalog=catalog)
assert resolved.provider_name == "vllm"
assert resolved.provider_mode == "local"
assert resolved.api_key == "local-secret"
def test_embedding_openai_default_base_injected() -> None:
catalog = _build_catalog(
embedding_profile={
"id": "embedding-p",
"name": "Embedding",
"binding": "openai",
"base_url": "",
"api_key": "sk-test",
"api_version": "",
"extra_headers": {},
"models": [{"id": "embedding-m", "name": "m", "model": "text-embedding-3-large"}],
}
)
resolved = resolve_embedding_runtime_config(catalog=catalog)
assert resolved.provider_name == "openai"
# v1.3.0: provider defaults are full embedding endpoint URLs.
assert resolved.effective_url == "https://api.openai.com/v1/embeddings"
def test_embedding_send_dimensions_default_is_none() -> None:
"""Catalogs without the field should resolve to ``None`` (Auto behaviour)."""
catalog = _build_catalog() # default model has no `send_dimensions`
resolved = resolve_embedding_runtime_config(catalog=catalog)
assert resolved.send_dimensions is None
@pytest.mark.parametrize(
("catalog_value", "expected"),
[
(True, True),
(False, False),
("true", True),
("false", False),
("on", True),
("off", False),
("", None),
("garbage", None),
],
)
def test_embedding_send_dimensions_parsed_from_catalog(
catalog_value: object,
expected: bool | None,
) -> None:
catalog = _build_catalog(
embedding_model={
"id": "embedding-m",
"name": "m",
"model": "text-embedding-v4",
"dimension": "1024",
"send_dimensions": catalog_value,
}
)
resolved = resolve_embedding_runtime_config(catalog=catalog)
assert resolved.send_dimensions is expected
def test_embedding_send_dimensions_catalog_unset_stays_auto() -> None:
catalog = _build_catalog()
resolved = resolve_embedding_runtime_config(catalog=catalog)
assert resolved.send_dimensions is None
def test_embedding_send_dimensions_resolves_from_catalog() -> None:
catalog = _build_catalog(
embedding_model={
"id": "embedding-m",
"name": "m",
"model": "text-embedding-3-large",
"dimension": "3072",
"send_dimensions": True,
}
)
resolved = resolve_embedding_runtime_config(catalog=catalog)
assert resolved.send_dimensions is True
def test_embedding_custom_openai_sdk_uses_user_supplied_base_url() -> None:
"""Legacy `custom_openai_sdk` configs still resolve for backwards compatibility."""
catalog = _build_catalog(
embedding_profile={
"id": "embedding-p",
"name": "Embedding",
"binding": "custom_openai_sdk",
"base_url": "https://my-proxy.example.com/v1",
"api_key": "sk-custom",
"api_version": "",
"extra_headers": {},
"models": [
{
"id": "embedding-m",
"name": "m",
"model": "text-embedding-3-large",
"dimension": "3072",
}
],
}
)
resolved = resolve_embedding_runtime_config(catalog=catalog)
assert resolved.provider_name == "custom_openai_sdk"
assert resolved.binding == "custom_openai_sdk"
assert resolved.effective_url == "https://my-proxy.example.com/v1"
assert resolved.api_key == "sk-custom"
def test_embedding_openrouter_default_base_url_injected() -> None:
"""When no base URL is set, the OpenRouter spec's default fills in."""
catalog = _build_catalog(
embedding_profile={
"id": "embedding-p",
"name": "Embedding",
"binding": "openrouter",
"base_url": "",
"api_key": "sk-or-xxxxx",
"api_version": "",
"extra_headers": {},
"models": [
{
"id": "embedding-m",
"name": "m",
"model": "qwen/qwen3-embedding-8b",
}
],
}
)
resolved = resolve_embedding_runtime_config(catalog=catalog)
assert resolved.provider_name == "openrouter"
assert resolved.binding == "openrouter"
assert resolved.effective_url == "https://openrouter.ai/api/v1/embeddings"
assert EMBEDDING_PROVIDERS["openrouter"].adapter == "openai_compat"
def test_embedding_openrouter_profile_key() -> None:
catalog = _build_catalog(
embedding_profile={
"id": "embedding-p",
"name": "Embedding",
"binding": "openrouter",
"base_url": "",
"api_key": "sk-or-from-profile",
"api_version": "",
"extra_headers": {},
"models": [{"id": "embedding-m", "name": "m", "model": "qwen/qwen3-embedding-8b"}],
}
)
resolved = resolve_embedding_runtime_config(catalog=catalog)
assert resolved.provider_name == "openrouter"
assert resolved.api_key == "sk-or-from-profile"
def test_embedding_provider_profile_key() -> None:
catalog = _build_catalog(
embedding_profile={
"id": "embedding-p",
"name": "Embedding",
"binding": "cohere",
"base_url": "",
"api_key": "cohere-test-key",
"api_version": "",
"extra_headers": {},
"models": [{"id": "embedding-m", "name": "m", "model": "embed-v4.0"}],
}
)
resolved = resolve_embedding_runtime_config(catalog=catalog)
assert resolved.provider_name == "cohere"
assert resolved.api_key == "cohere-test-key"