feat: Update embedder_config validation to use Pydantic v2 style

Co-Authored-By: Joe Moura <joao@crewai.com>
This commit is contained in:
Devin AI
2025-02-19 15:31:46 +00:00
parent 566ea3ced8
commit 9cef78a30f

View File

@@ -3,9 +3,10 @@ import shutil
import subprocess import subprocess
from typing import Any, Dict, List, Literal, Optional, Sequence, Union from typing import Any, Dict, List, Literal, Optional, Sequence, Union
from pydantic import Field, InstanceOf, PrivateAttr, model_validator from pydantic import Field, InstanceOf, PrivateAttr, field_validator, model_validator
from crewai.agents import CacheHandler from crewai.agents import CacheHandler
from crewai.utilities import EmbeddingConfigurator
from crewai.agents.agent_builder.base_agent import BaseAgent from crewai.agents.agent_builder.base_agent import BaseAgent
from crewai.agents.crew_agent_executor import CrewAgentExecutor from crewai.agents.crew_agent_executor import CrewAgentExecutor
from crewai.knowledge.knowledge import Knowledge from crewai.knowledge.knowledge import Knowledge
@@ -120,12 +121,22 @@ class Agent(BaseAgent):
description="Embedder configuration for the agent. Must include 'provider' and relevant configuration parameters.", description="Embedder configuration for the agent. Must include 'provider' and relevant configuration parameters.",
) )
@validator("embedder_config") @field_validator("embedder_config")
def validate_embedder_config(cls, v): @classmethod
def validate_embedder_config(cls, v: Optional[Dict[str, Any]]) -> Optional[Dict[str, Any]]:
"""Validate embedder configuration. """Validate embedder configuration.
Args: Args:
v: The embedder configuration to validate. v: The embedder configuration to validate.
Must include 'provider' and 'config' keys.
Example:
{
'provider': 'openai',
'config': {
'api_key': 'your-key',
'model': 'text-embedding-3-small'
}
}
Returns: Returns:
The validated embedder configuration. The validated embedder configuration.
@@ -134,10 +145,17 @@ class Agent(BaseAgent):
ValueError: If the embedder configuration is invalid. ValueError: If the embedder configuration is invalid.
""" """
if v is not None: if v is not None:
if not isinstance(v, dict) or "provider" not in v: if not isinstance(v, dict):
raise ValueError("embedder_config must be a dictionary")
if "provider" not in v:
raise ValueError("embedder_config must contain 'provider' key") raise ValueError("embedder_config must contain 'provider' key")
if "config" not in v: if "config" not in v:
raise ValueError("embedder_config must contain 'config' key") raise ValueError("embedder_config must contain 'config' key")
if v["provider"] not in EmbeddingConfigurator().embedding_functions:
raise ValueError(
f"Unsupported embedding provider: {v['provider']}, "
f"supported providers: {list(EmbeddingConfigurator().embedding_functions.keys())}"
)
return v return v
@model_validator(mode="after") @model_validator(mode="after")