mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-07-23 15:55:11 +00:00
handle supporting both custom prompts (#6108)
* handle supporting both custom prompts * handle translations * handle deprecation warnings better
This commit is contained in:
@@ -46,6 +46,7 @@ from crewai.state.checkpoint_config import CheckpointConfig, _coerce_checkpoint
|
||||
from crewai.tools.base_tool import BaseTool, Tool
|
||||
from crewai.types.callback import SerializableCallable
|
||||
from crewai.utilities.config import process_config
|
||||
from crewai.utilities.i18n import I18N, get_i18n
|
||||
from crewai.utilities.logger import Logger
|
||||
from crewai.utilities.rpm_controller import RPMController
|
||||
from crewai.utilities.string_utils import interpolate_only
|
||||
@@ -186,6 +187,7 @@ class BaseAgent(BaseModel, ABC, metaclass=AgentMeta):
|
||||
tools (list[Any] | None): Tools at the agent's disposal.
|
||||
max_iter (int): Maximum iterations for an agent to execute a task.
|
||||
agent_executor: An instance of the CrewAgentExecutor class.
|
||||
i18n (I18N): Internationalization settings.
|
||||
llm (Any): Language model that will run the agent.
|
||||
crew (Any): Crew to which the agent belongs.
|
||||
|
||||
@@ -265,6 +267,14 @@ class BaseAgent(BaseModel, ABC, metaclass=AgentMeta):
|
||||
_serialize_executor_ref, return_type=dict | None, when_used="json"
|
||||
),
|
||||
] = Field(default=None, description="An instance of the CrewAgentExecutor class.")
|
||||
i18n: I18N = Field(
|
||||
default_factory=get_i18n,
|
||||
description="Internationalization settings.",
|
||||
deprecated=(
|
||||
"Agent.i18n is deprecated and will be removed in a future release. "
|
||||
"Use crewai.utilities.i18n.get_i18n() or Crew(prompt_file=...) instead."
|
||||
),
|
||||
)
|
||||
|
||||
llm: Annotated[
|
||||
str | BaseLLM | None,
|
||||
|
||||
@@ -4,6 +4,7 @@ import os
|
||||
import threading
|
||||
from unittest import mock
|
||||
from unittest.mock import MagicMock, patch
|
||||
import warnings
|
||||
|
||||
from crewai.agents.crew_agent_executor import AgentFinish, CrewAgentExecutor
|
||||
from crewai.constants import DEFAULT_LLM_MODEL
|
||||
@@ -77,6 +78,51 @@ def test_agent_creation():
|
||||
assert agent.backstory == "test backstory"
|
||||
|
||||
|
||||
def test_agent_exposes_i18n_for_backward_compatibility():
|
||||
from crewai.utilities.i18n import I18N_DEFAULT
|
||||
|
||||
agent = Agent(role="test role", goal="test goal", backstory="test backstory")
|
||||
|
||||
with pytest.warns(DeprecationWarning, match="Agent.i18n is deprecated"):
|
||||
i18n = agent.i18n
|
||||
|
||||
assert i18n is I18N_DEFAULT
|
||||
assert isinstance(i18n.slice("role_playing"), str)
|
||||
|
||||
|
||||
def test_agent_accepts_custom_i18n():
|
||||
from crewai.utilities.i18n import I18N
|
||||
|
||||
prompt_file = os.path.join(
|
||||
os.path.dirname(__file__), "..", "utilities", "prompts.json"
|
||||
)
|
||||
i18n = I18N(prompt_file=prompt_file)
|
||||
agent = Agent(
|
||||
role="test role",
|
||||
goal="test goal",
|
||||
backstory="test backstory",
|
||||
i18n=i18n,
|
||||
)
|
||||
|
||||
with pytest.warns(DeprecationWarning, match="Agent.i18n is deprecated"):
|
||||
agent_i18n = agent.i18n
|
||||
|
||||
assert agent_i18n is i18n
|
||||
assert agent_i18n.slice("role_playing") == "Lorem ipsum dolor sit amet"
|
||||
|
||||
|
||||
def test_agent_copy_does_not_emit_i18n_deprecation_warning():
|
||||
agent = Agent(role="test role", goal="test goal", backstory="test backstory")
|
||||
|
||||
with warnings.catch_warnings(record=True) as caught_warnings:
|
||||
warnings.simplefilter("always", DeprecationWarning)
|
||||
agent.copy()
|
||||
|
||||
assert not any(
|
||||
"Agent.i18n is deprecated" in str(w.message) for w in caught_warnings
|
||||
)
|
||||
|
||||
|
||||
def test_agent_with_only_system_template():
|
||||
"""Test that an agent with only system_template works without errors."""
|
||||
agent = Agent(
|
||||
|
||||
Reference in New Issue
Block a user