test_text_embedding.py 2.3 KB

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