test_text_embedding.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import os
  2. from unittest.mock import Mock, patch
  3. import pytest
  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.mixedbread.text_embedding.text_embedding import MixedBreadTextEmbeddingModel
  7. def test_validate_credentials():
  8. model = MixedBreadTextEmbeddingModel()
  9. with pytest.raises(CredentialsValidateFailedError):
  10. model.validate_credentials(model="mxbai-embed-large-v1", credentials={"api_key": "invalid_key"})
  11. with patch("requests.post") as mock_post:
  12. mock_response = Mock()
  13. mock_response.json.return_value = {
  14. "usage": {"prompt_tokens": 3, "total_tokens": 3},
  15. "model": "mixedbread-ai/mxbai-embed-large-v1",
  16. "data": [{"embedding": [0.23333 for _ in range(1024)], "index": 0, "object": "embedding"}],
  17. "object": "list",
  18. "normalized": "true",
  19. "encoding_format": "float",
  20. "dimensions": 1024,
  21. }
  22. mock_response.status_code = 200
  23. mock_post.return_value = mock_response
  24. model.validate_credentials(
  25. model="mxbai-embed-large-v1", credentials={"api_key": os.environ.get("MIXEDBREAD_API_KEY")}
  26. )
  27. def test_invoke_model():
  28. model = MixedBreadTextEmbeddingModel()
  29. with patch("requests.post") as mock_post:
  30. mock_response = Mock()
  31. mock_response.json.return_value = {
  32. "usage": {"prompt_tokens": 6, "total_tokens": 6},
  33. "model": "mixedbread-ai/mxbai-embed-large-v1",
  34. "data": [
  35. {"embedding": [0.23333 for _ in range(1024)], "index": 0, "object": "embedding"},
  36. {"embedding": [0.23333 for _ in range(1024)], "index": 1, "object": "embedding"},
  37. ],
  38. "object": "list",
  39. "normalized": "true",
  40. "encoding_format": "float",
  41. "dimensions": 1024,
  42. }
  43. mock_response.status_code = 200
  44. mock_post.return_value = mock_response
  45. result = model.invoke(
  46. model="mxbai-embed-large-v1",
  47. credentials={
  48. "api_key": os.environ.get("MIXEDBREAD_API_KEY"),
  49. },
  50. texts=["hello", "world"],
  51. user="abc-123",
  52. )
  53. assert isinstance(result, TextEmbeddingResult)
  54. assert len(result.embeddings) == 2
  55. assert result.usage.total_tokens == 6
  56. def test_get_num_tokens():
  57. model = MixedBreadTextEmbeddingModel()
  58. num_tokens = model.get_num_tokens(
  59. model="mxbai-embed-large-v1",
  60. credentials={
  61. "api_key": os.environ.get("MIXEDBREAD_API_KEY"),
  62. },
  63. texts=["ping"],
  64. )
  65. assert num_tokens == 1