Compare commits

...

2 Commits

Author SHA1 Message Date
Devin AI
b3e1f28c2b fix: resolve lint issue in Watson embedding name test
- Change type comparison from == to 'is' to satisfy Ruff E721 rule
- All lint checks now pass locally

Co-Authored-By: João <joao@crewai.com>
2025-09-26 10:56:48 +00:00
Devin AI
9578b60734 fix: add missing name() method to WatsonEmbeddingFunction
Fixes #3597 - ChromaDB expects embedding functions to have a name() method
for validation. Added static method that returns 'watson' following the
same pattern as other embedding functions.

- Added comprehensive tests to verify the fix
- Ensures compatibility with ChromaDB validation requirements
- No regressions in existing Watson embedding functionality

Co-Authored-By: João <joao@crewai.com>
2025-09-26 10:52:54 +00:00
2 changed files with 82 additions and 0 deletions

View File

@@ -152,3 +152,8 @@ class WatsonEmbeddingFunction(EmbeddingFunction[Documents]):
except Exception as e:
print(f"Error during Watson embedding: {e}")
raise
@staticmethod
def name() -> str:
"""Return the name identifier for this embedding function."""
return "watson"

View File

@@ -0,0 +1,77 @@
"""Tests for Watson embedding function name method."""
import pytest
from crewai.rag.embeddings.providers.ibm.embedding_callable import (
WatsonEmbeddingFunction,
)
class TestWatsonEmbeddingName:
"""Test Watson embedding function name method."""
def test_watson_embedding_function_has_name_method(self):
"""Test that WatsonEmbeddingFunction has a name method."""
assert hasattr(WatsonEmbeddingFunction, 'name')
assert callable(WatsonEmbeddingFunction.name)
def test_watson_embedding_function_name_returns_watson(self):
"""Test that the name method returns 'watson'."""
assert WatsonEmbeddingFunction.name() == "watson"
def test_watson_embedding_function_name_is_static(self):
"""Test that the name method can be called without instantiation."""
name = WatsonEmbeddingFunction.name()
assert name == "watson"
assert isinstance(name, str)
def test_watson_embedding_function_name_with_chromadb_validation(self):
"""Test that the name method works in ChromaDB validation scenario."""
config = {
"model_id": "test-model",
"api_key": "test-key",
"url": "https://test.com"
}
watson_func = WatsonEmbeddingFunction(**config)
try:
name = watson_func.name()
assert name == "watson"
except AttributeError as e:
pytest.fail(f"ChromaDB validation failed with AttributeError: {e}")
def test_watson_embedding_function_name_method_signature(self):
"""Test that the name method has the correct signature."""
import inspect
name_method = WatsonEmbeddingFunction.name
assert isinstance(inspect.getattr_static(WatsonEmbeddingFunction, 'name'), staticmethod)
sig = inspect.signature(name_method)
if sig.return_annotation != inspect.Signature.empty:
assert sig.return_annotation is str
def test_watson_embedding_function_reproduces_original_issue(self):
"""Test that reproduces the original issue scenario from #3597."""
config = {
"model_id": "ibm/slate-125m-english-rtrvr",
"api_key": "test-key",
"url": "https://us-south.ml.cloud.ibm.com",
"project_id": "test-project"
}
watson_func = WatsonEmbeddingFunction(**config)
name = watson_func.name()
assert name == "watson"
assert isinstance(name, str)
class_name = WatsonEmbeddingFunction.name()
assert class_name == "watson"
assert class_name == name