Home / File/ test_base.py — langchain Source File

test_base.py — langchain Source File

Architecture documentation for test_base.py, a python file in the langchain codebase. 2 imports, 0 dependents.

File python CoreAbstractions MessageSchema 2 imports 6 functions

Entity Profile

Dependency Diagram

graph LR
  eea9911f_0355_54d0_e97f_eafa2d3a9d5d["test_base.py"]
  120e2591_3e15_b895_72b6_cb26195e40a6["pytest"]
  eea9911f_0355_54d0_e97f_eafa2d3a9d5d --> 120e2591_3e15_b895_72b6_cb26195e40a6
  55c159ee_8be6_d32c_b9ae_f24c02b5a184["langchain_classic.embeddings.base"]
  eea9911f_0355_54d0_e97f_eafa2d3a9d5d --> 55c159ee_8be6_d32c_b9ae_f24c02b5a184
  style eea9911f_0355_54d0_e97f_eafa2d3a9d5d fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

"""Test embeddings base module."""

import pytest

from langchain_classic.embeddings.base import (
    _SUPPORTED_PROVIDERS,
    _infer_model_and_provider,
    _parse_model_string,
)


@pytest.mark.parametrize(
    ("model_string", "expected_provider", "expected_model"),
    [
        ("openai:text-embedding-3-small", "openai", "text-embedding-3-small"),
        ("bedrock:amazon.titan-embed-text-v1", "bedrock", "amazon.titan-embed-text-v1"),
        ("huggingface:BAAI/bge-base-en:v1.5", "huggingface", "BAAI/bge-base-en:v1.5"),
        ("google_genai:gemini-embedding-001", "google_genai", "gemini-embedding-001"),
    ],
)
def test_parse_model_string(
    model_string: str, expected_provider: str, expected_model: str
) -> None:
    """Test parsing model strings into provider and model components."""
    assert _parse_model_string(model_string) == (
        expected_provider,
        expected_model,
    )


def test_parse_model_string_errors() -> None:
    """Test error cases for model string parsing."""
    with pytest.raises(ValueError, match="Model name must be"):
        _parse_model_string("just-a-model-name")

    with pytest.raises(ValueError, match="Invalid model format "):
        _parse_model_string("")

    with pytest.raises(ValueError, match="is not supported"):
        _parse_model_string(":model-name")

    with pytest.raises(ValueError, match="Model name cannot be empty"):
        _parse_model_string("openai:")

    with pytest.raises(
        ValueError,
        match="Provider 'invalid-provider' is not supported",
    ):
        _parse_model_string("invalid-provider:model-name")

    for provider in _SUPPORTED_PROVIDERS:
        with pytest.raises(ValueError, match=f"{provider}"):
            _parse_model_string("invalid-provider:model-name")


def test_infer_model_and_provider() -> None:
    """Test model and provider inference from different input formats."""
    assert _infer_model_and_provider("openai:text-embedding-3-small") == (
        "openai",
        "text-embedding-3-small",
    )

    assert _infer_model_and_provider(
        model="text-embedding-3-small",
        provider="openai",
    ) == ("openai", "text-embedding-3-small")

    assert _infer_model_and_provider(
        model="ft:text-embedding-3-small",
        provider="openai",
    ) == ("openai", "ft:text-embedding-3-small")

    assert _infer_model_and_provider(model="openai:ft:text-embedding-3-small") == (
        "openai",
        "ft:text-embedding-3-small",
    )


def test_infer_model_and_provider_errors() -> None:
    """Test error cases for model and provider inference."""
    # Test missing provider
    with pytest.raises(ValueError, match="Must specify either"):
        _infer_model_and_provider("text-embedding-3-small")

    # Test empty model
    with pytest.raises(ValueError, match="Model name cannot be empty"):
        _infer_model_and_provider("")

    # Test empty provider with model
    with pytest.raises(ValueError, match="Must specify either"):
        _infer_model_and_provider("model", provider="")

    # Test invalid provider
    with pytest.raises(ValueError, match="Provider 'invalid' is not supported") as exc:
        _infer_model_and_provider("model", provider="invalid")
    # Test provider list is in error
    for provider in _SUPPORTED_PROVIDERS:
        assert provider in str(exc.value)


@pytest.mark.parametrize(
    "provider",
    sorted(_SUPPORTED_PROVIDERS.keys()),
)
def test_supported_providers_package_names(provider: str) -> None:
    """Test that all supported providers have valid package names."""
    package = _SUPPORTED_PROVIDERS[provider]
    assert "-" not in package
    assert package.startswith("langchain_")
    assert package.islower()


def test_is_sorted() -> None:
    assert list(_SUPPORTED_PROVIDERS) == sorted(_SUPPORTED_PROVIDERS.keys())

Subdomains

Dependencies

  • langchain_classic.embeddings.base
  • pytest

Frequently Asked Questions

What does test_base.py do?
test_base.py is a source file in the langchain codebase, written in python. It belongs to the CoreAbstractions domain, MessageSchema subdomain.
What functions are defined in test_base.py?
test_base.py defines 6 function(s): test_infer_model_and_provider, test_infer_model_and_provider_errors, test_is_sorted, test_parse_model_string, test_parse_model_string_errors, test_supported_providers_package_names.
What does test_base.py depend on?
test_base.py imports 2 module(s): langchain_classic.embeddings.base, pytest.
Where is test_base.py in the architecture?
test_base.py is located at libs/langchain/tests/unit_tests/embeddings/test_base.py (domain: CoreAbstractions, subdomain: MessageSchema, directory: libs/langchain/tests/unit_tests/embeddings).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free