feat: rag configuration with optional dependency support (#3394)
Some checks failed
Notify Downstream / notify-downstream (push) Has been cancelled
Mark stale issues and pull requests / stale (push) Has been cancelled

### RAG Config System

* Added ChromaDB client creation via config with sensible defaults
* Introduced optional imports and shared RAG config utilities/schema
* Enabled embedding function support with ChromaDB provider integration
* Refactored configs for immutability and stronger type safety
* Removed unused code and expanded test coverage
This commit is contained in:
Greyson LaLonde
2025-08-26 00:00:22 -04:00
committed by GitHub
parent 2e4bd3f49d
commit 7ac482c7c9
21 changed files with 459 additions and 33 deletions

View File

@@ -0,0 +1,34 @@
"""Tests for RAG config factory."""
from unittest.mock import Mock, patch
from crewai.rag.config.factory import create_client
def test_create_client_chromadb():
"""Test ChromaDB client creation."""
mock_config = Mock()
mock_config.provider = "chromadb"
with patch("crewai.rag.config.factory.require") as mock_require:
mock_module = Mock()
mock_client = Mock()
mock_module.create_client.return_value = mock_client
mock_require.return_value = mock_module
result = create_client(mock_config)
assert result == mock_client
mock_require.assert_called_once_with(
"crewai.rag.chromadb.factory", purpose="The 'chromadb' provider"
)
mock_module.create_client.assert_called_once_with(mock_config)
def test_create_client_unsupported_provider():
"""Test unsupported provider returns None for now."""
mock_config = Mock()
mock_config.provider = "unsupported"
result = create_client(mock_config)
assert result is None

View File

@@ -0,0 +1,22 @@
"""Tests for optional imports."""
import pytest
from crewai.rag.config.optional_imports.base import _MissingProvider
from crewai.rag.config.optional_imports.providers import MissingChromaDBConfig
def test_missing_provider_raises_runtime_error():
"""Test that _MissingProvider raises RuntimeError on instantiation."""
with pytest.raises(
RuntimeError, match="provider '__missing__' requested but not installed"
):
_MissingProvider()
def test_missing_chromadb_config_raises_runtime_error():
"""Test that MissingChromaDBConfig raises RuntimeError on instantiation."""
with pytest.raises(
RuntimeError, match="provider 'chromadb' requested but not installed"
):
MissingChromaDBConfig()