Compare commits

...

3 Commits

Author SHA1 Message Date
Devin AI
355826a39d Fix import sorting with ruff
Co-Authored-By: Joe Moura <joao@crewai.com>
2025-03-20 09:01:03 +00:00
Devin AI
5e1f38251a Fix import sorting in test file
Co-Authored-By: Joe Moura <joao@crewai.com>
2025-03-20 08:59:56 +00:00
Devin AI
abdf7a7967 Fix issue #2421: Handle missing google.genai dependency gracefully
Co-Authored-By: Joe Moura <joao@crewai.com>
2025-03-20 08:57:49 +00:00
3 changed files with 100 additions and 19 deletions

View File

@@ -91,6 +91,7 @@ class CrewAgentExecutorMixin:
print(f"Missing attributes for long term memory: {e}")
pass
except Exception as e:
# Only log the error; don't let it affect task output
print(f"Failed to add to long term memory: {e}")
pass

View File

@@ -104,28 +104,40 @@ class EmbeddingConfigurator:
@staticmethod
def _configure_vertexai(config, model_name):
from chromadb.utils.embedding_functions.google_embedding_function import (
GoogleVertexEmbeddingFunction,
)
return GoogleVertexEmbeddingFunction(
model_name=model_name,
api_key=config.get("api_key"),
project_id=config.get("project_id"),
region=config.get("region"),
)
try:
from chromadb.utils.embedding_functions.google_embedding_function import (
GoogleVertexEmbeddingFunction,
)
return GoogleVertexEmbeddingFunction(
model_name=model_name,
api_key=config.get("api_key"),
project_id=config.get("project_id"),
region=config.get("region"),
)
except ImportError:
raise ImportError(
"Google Vertex AI dependencies are not installed. "
"Please install them using 'pip install google-cloud-aiplatform'."
)
@staticmethod
def _configure_google(config, model_name):
from chromadb.utils.embedding_functions.google_embedding_function import (
GoogleGenerativeAiEmbeddingFunction,
)
return GoogleGenerativeAiEmbeddingFunction(
model_name=model_name,
api_key=config.get("api_key"),
task_type=config.get("task_type"),
)
try:
from chromadb.utils.embedding_functions.google_embedding_function import (
GoogleGenerativeAiEmbeddingFunction,
)
return GoogleGenerativeAiEmbeddingFunction(
model_name=model_name,
api_key=config.get("api_key"),
task_type=config.get("task_type"),
)
except ImportError:
raise ImportError(
"Google Generative AI dependencies are not installed. "
"Please install them using 'pip install google-generativeai'."
)
@staticmethod
def _configure_cohere(config, model_name):

View File

@@ -0,0 +1,68 @@
from unittest.mock import MagicMock, patch
import pytest
from pydantic import BaseModel, Field
from crewai import Agent, Crew, Task
from crewai.utilities.converter import Converter
class ResponseFormat(BaseModel):
string: str = Field(description='string needs to be maintained')
def test_pydantic_model_conversion():
"""Test that pydantic model conversion works without causing import errors."""
# Test data
test_string = '{"string": "test value"}'
# Create a pydantic model directly
result = ResponseFormat.model_validate_json(test_string)
# Verify the conversion worked
assert result is not None
assert hasattr(result, "string")
assert isinstance(result.string, str)
assert result.string == "test value"
@patch('crewai.crew.Crew.kickoff')
def test_output_pydantic_with_mocked_crew(mock_kickoff):
"""Test that output_pydantic works properly without causing import errors."""
# Mock the crew kickoff to return a valid response
mock_result = ResponseFormat(string="mocked result")
mock_kickoff.return_value = mock_result
# Create a simple agent
agent = Agent(
role="Test Agent",
goal="Test pydantic model output",
backstory="Testing pydantic output functionality",
verbose=True
)
# Create a task with output_pydantic
task = Task(
description="Return a simple string",
expected_output="A simple string",
agent=agent,
output_pydantic=ResponseFormat
)
# Create a crew with the agent and task
crew = Crew(
agents=[agent],
tasks=[task],
verbose=True
)
# Execute the crew (this will use our mock)
result = crew.kickoff()
# Verify we got a result
assert result is not None
# Verify the result has a string attribute (as defined in ResponseFormat)
assert hasattr(result, "string")
assert isinstance(result.string, str)
assert result.string == "mocked result"