test_embeddings.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import os
  2. import pytest
  3. from api.core.model_runtime.model_providers.huggingface_tei.text_embedding.text_embedding import TeiHelper
  4. from core.model_runtime.entities.text_embedding_entities import TextEmbeddingResult
  5. from core.model_runtime.errors.validate import CredentialsValidateFailedError
  6. from core.model_runtime.model_providers.huggingface_tei.text_embedding.text_embedding import (
  7. HuggingfaceTeiTextEmbeddingModel,
  8. )
  9. from tests.integration_tests.model_runtime.__mock.huggingface_tei import MockTEIClass
  10. MOCK = os.getenv('MOCK_SWITCH', 'false').lower() == 'true'
  11. @pytest.fixture
  12. def setup_tei_mock(request, monkeypatch: pytest.MonkeyPatch):
  13. if MOCK:
  14. monkeypatch.setattr(TeiHelper, 'get_tei_extra_parameter', MockTEIClass.get_tei_extra_parameter)
  15. monkeypatch.setattr(TeiHelper, 'invoke_tokenize', MockTEIClass.invoke_tokenize)
  16. monkeypatch.setattr(TeiHelper, 'invoke_embeddings', MockTEIClass.invoke_embeddings)
  17. monkeypatch.setattr(TeiHelper, 'invoke_rerank', MockTEIClass.invoke_rerank)
  18. yield
  19. if MOCK:
  20. monkeypatch.undo()
  21. @pytest.mark.parametrize('setup_tei_mock', [['none']], indirect=True)
  22. def test_validate_credentials(setup_tei_mock):
  23. model = HuggingfaceTeiTextEmbeddingModel()
  24. # model name is only used in mock
  25. model_name = 'embedding'
  26. if MOCK:
  27. # TEI Provider will check model type by API endpoint, at real server, the model type is correct.
  28. # So we dont need to check model type here. Only check in mock
  29. with pytest.raises(CredentialsValidateFailedError):
  30. model.validate_credentials(
  31. model='reranker',
  32. credentials={
  33. 'server_url': os.environ.get('TEI_EMBEDDING_SERVER_URL', ""),
  34. }
  35. )
  36. model.validate_credentials(
  37. model=model_name,
  38. credentials={
  39. 'server_url': os.environ.get('TEI_EMBEDDING_SERVER_URL', ""),
  40. }
  41. )
  42. @pytest.mark.parametrize('setup_tei_mock', [['none']], indirect=True)
  43. def test_invoke_model(setup_tei_mock):
  44. model = HuggingfaceTeiTextEmbeddingModel()
  45. model_name = 'embedding'
  46. result = model.invoke(
  47. model=model_name,
  48. credentials={
  49. 'server_url': os.environ.get('TEI_EMBEDDING_SERVER_URL', ""),
  50. },
  51. texts=[
  52. "hello",
  53. "world"
  54. ],
  55. user="abc-123"
  56. )
  57. assert isinstance(result, TextEmbeddingResult)
  58. assert len(result.embeddings) == 2
  59. assert result.usage.total_tokens > 0