mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-05-03 00:02:36 +00:00
chore: refactor llms to base models
This commit is contained in:
@@ -1212,7 +1212,7 @@ Learn how to get the most out of your LLM configuration:
|
|||||||
```python
|
```python
|
||||||
import httpx
|
import httpx
|
||||||
from crewai import LLM
|
from crewai import LLM
|
||||||
from crewai.llms.hooks import BaseInterceptor
|
from crewai.llm.hooks import BaseInterceptor
|
||||||
|
|
||||||
class CustomInterceptor(BaseInterceptor[httpx.Request, httpx.Response]):
|
class CustomInterceptor(BaseInterceptor[httpx.Request, httpx.Response]):
|
||||||
"""Custom interceptor to modify requests and responses."""
|
"""Custom interceptor to modify requests and responses."""
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from crewai.crews.crew_output import CrewOutput
|
|||||||
from crewai.flow.flow import Flow
|
from crewai.flow.flow import Flow
|
||||||
from crewai.knowledge.knowledge import Knowledge
|
from crewai.knowledge.knowledge import Knowledge
|
||||||
from crewai.llm import LLM
|
from crewai.llm import LLM
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
from crewai.process import Process
|
from crewai.process import Process
|
||||||
from crewai.task import Task
|
from crewai.task import Task
|
||||||
from crewai.tasks.llm_guardrail import LLMGuardrail
|
from crewai.tasks.llm_guardrail import LLMGuardrail
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ from crewai.knowledge.knowledge import Knowledge
|
|||||||
from crewai.knowledge.source.base_knowledge_source import BaseKnowledgeSource
|
from crewai.knowledge.source.base_knowledge_source import BaseKnowledgeSource
|
||||||
from crewai.knowledge.utils.knowledge_utils import extract_knowledge_context
|
from crewai.knowledge.utils.knowledge_utils import extract_knowledge_context
|
||||||
from crewai.lite_agent import LiteAgent
|
from crewai.lite_agent import LiteAgent
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
from crewai.mcp import (
|
from crewai.mcp import (
|
||||||
MCPClient,
|
MCPClient,
|
||||||
MCPServerConfig,
|
MCPServerConfig,
|
||||||
@@ -626,7 +626,7 @@ class Agent(BaseAgent):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self.agent_executor = CrewAgentExecutor(
|
self.agent_executor = CrewAgentExecutor(
|
||||||
llm=self.llm,
|
llm=self.llm, # type: ignore[arg-type]
|
||||||
task=task, # type: ignore[arg-type]
|
task=task, # type: ignore[arg-type]
|
||||||
agent=self,
|
agent=self,
|
||||||
crew=self.crew,
|
crew=self.crew,
|
||||||
@@ -803,6 +803,7 @@ class Agent(BaseAgent):
|
|||||||
from crewai.tools.base_tool import BaseTool
|
from crewai.tools.base_tool import BaseTool
|
||||||
from crewai.tools.mcp_native_tool import MCPNativeTool
|
from crewai.tools.mcp_native_tool import MCPNativeTool
|
||||||
|
|
||||||
|
transport: StdioTransport | HTTPTransport | SSETransport
|
||||||
if isinstance(mcp_config, MCPServerStdio):
|
if isinstance(mcp_config, MCPServerStdio):
|
||||||
transport = StdioTransport(
|
transport = StdioTransport(
|
||||||
command=mcp_config.command,
|
command=mcp_config.command,
|
||||||
@@ -896,10 +897,12 @@ class Agent(BaseAgent):
|
|||||||
server_name=server_name,
|
server_name=server_name,
|
||||||
run_context=None,
|
run_context=None,
|
||||||
)
|
)
|
||||||
if mcp_config.tool_filter(context, tool):
|
# Try new signature first
|
||||||
|
if mcp_config.tool_filter(context, tool): # type: ignore[arg-type,call-arg]
|
||||||
filtered_tools.append(tool)
|
filtered_tools.append(tool)
|
||||||
except (TypeError, AttributeError):
|
except (TypeError, AttributeError):
|
||||||
if mcp_config.tool_filter(tool):
|
# Fallback to old signature
|
||||||
|
if mcp_config.tool_filter(tool): # type: ignore[arg-type,call-arg]
|
||||||
filtered_tools.append(tool)
|
filtered_tools.append(tool)
|
||||||
else:
|
else:
|
||||||
# Not callable - include tool
|
# Not callable - include tool
|
||||||
@@ -974,7 +977,9 @@ class Agent(BaseAgent):
|
|||||||
path = parsed.path.replace("/", "_").strip("_")
|
path = parsed.path.replace("/", "_").strip("_")
|
||||||
return f"{domain}_{path}" if path else domain
|
return f"{domain}_{path}" if path else domain
|
||||||
|
|
||||||
def _get_mcp_tool_schemas(self, server_params: dict) -> dict[str, dict]:
|
def _get_mcp_tool_schemas(
|
||||||
|
self, server_params: dict[str, Any]
|
||||||
|
) -> dict[str, dict[str, Any]]:
|
||||||
"""Get tool schemas from MCP server for wrapper creation with caching."""
|
"""Get tool schemas from MCP server for wrapper creation with caching."""
|
||||||
server_url = server_params["url"]
|
server_url = server_params["url"]
|
||||||
|
|
||||||
@@ -988,7 +993,7 @@ class Agent(BaseAgent):
|
|||||||
self._logger.log(
|
self._logger.log(
|
||||||
"debug", f"Using cached MCP tool schemas for {server_url}"
|
"debug", f"Using cached MCP tool schemas for {server_url}"
|
||||||
)
|
)
|
||||||
return cached_data
|
return cast(dict[str, dict[str, Any]], cached_data)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
schemas = asyncio.run(self._get_mcp_tool_schemas_async(server_params))
|
schemas = asyncio.run(self._get_mcp_tool_schemas_async(server_params))
|
||||||
@@ -1006,7 +1011,7 @@ class Agent(BaseAgent):
|
|||||||
|
|
||||||
async def _get_mcp_tool_schemas_async(
|
async def _get_mcp_tool_schemas_async(
|
||||||
self, server_params: dict[str, Any]
|
self, server_params: dict[str, Any]
|
||||||
) -> dict[str, dict]:
|
) -> dict[str, dict[str, Any]]:
|
||||||
"""Async implementation of MCP tool schema retrieval with timeouts and retries."""
|
"""Async implementation of MCP tool schema retrieval with timeouts and retries."""
|
||||||
server_url = server_params["url"]
|
server_url = server_params["url"]
|
||||||
return await self._retry_mcp_discovery(
|
return await self._retry_mcp_discovery(
|
||||||
@@ -1014,7 +1019,7 @@ class Agent(BaseAgent):
|
|||||||
)
|
)
|
||||||
|
|
||||||
async def _retry_mcp_discovery(
|
async def _retry_mcp_discovery(
|
||||||
self, operation_func, server_url: str
|
self, operation_func: Any, server_url: str
|
||||||
) -> dict[str, dict[str, Any]]:
|
) -> dict[str, dict[str, Any]]:
|
||||||
"""Retry MCP discovery operation with exponential backoff, avoiding try-except in loop."""
|
"""Retry MCP discovery operation with exponential backoff, avoiding try-except in loop."""
|
||||||
last_error = None
|
last_error = None
|
||||||
@@ -1045,7 +1050,7 @@ class Agent(BaseAgent):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
async def _attempt_mcp_discovery(
|
async def _attempt_mcp_discovery(
|
||||||
operation_func, server_url: str
|
operation_func: Any, server_url: str
|
||||||
) -> tuple[dict[str, dict[str, Any]] | None, str, bool]:
|
) -> tuple[dict[str, dict[str, Any]] | None, str, bool]:
|
||||||
"""Attempt single MCP discovery operation and return (result, error_message, should_retry)."""
|
"""Attempt single MCP discovery operation and return (result, error_message, should_retry)."""
|
||||||
try:
|
try:
|
||||||
@@ -1149,13 +1154,13 @@ class Agent(BaseAgent):
|
|||||||
Field(..., description=field_description),
|
Field(..., description=field_description),
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
field_definitions[field_name] = (
|
field_definitions[field_name] = ( # type: ignore[assignment]
|
||||||
field_type | None,
|
field_type | None,
|
||||||
Field(default=None, description=field_description),
|
Field(default=None, description=field_description),
|
||||||
)
|
)
|
||||||
|
|
||||||
model_name = f"{tool_name.replace('-', '_').replace(' ', '_')}Schema"
|
model_name = f"{tool_name.replace('-', '_').replace(' ', '_')}Schema"
|
||||||
return create_model(model_name, **field_definitions)
|
return create_model(model_name, **field_definitions) # type: ignore[no-any-return,call-overload]
|
||||||
|
|
||||||
def _json_type_to_python(self, field_schema: dict[str, Any]) -> type:
|
def _json_type_to_python(self, field_schema: dict[str, Any]) -> type:
|
||||||
"""Convert JSON Schema type to Python type.
|
"""Convert JSON Schema type to Python type.
|
||||||
@@ -1175,16 +1180,16 @@ class Agent(BaseAgent):
|
|||||||
if "const" in option:
|
if "const" in option:
|
||||||
types.append(str)
|
types.append(str)
|
||||||
else:
|
else:
|
||||||
types.append(self._json_type_to_python(option))
|
types.append(self._json_type_to_python(option)) # type: ignore[arg-type]
|
||||||
unique_types = list(set(types))
|
unique_types = list(set(types))
|
||||||
if len(unique_types) > 1:
|
if len(unique_types) > 1:
|
||||||
result = unique_types[0]
|
result = unique_types[0]
|
||||||
for t in unique_types[1:]:
|
for t in unique_types[1:]:
|
||||||
result = result | t
|
result = result | t # type: ignore[assignment]
|
||||||
return result
|
return result
|
||||||
return unique_types[0]
|
return unique_types[0]
|
||||||
|
|
||||||
type_mapping = {
|
type_mapping: dict[str, type] = {
|
||||||
"string": str,
|
"string": str,
|
||||||
"number": float,
|
"number": float,
|
||||||
"integer": int,
|
"integer": int,
|
||||||
@@ -1193,10 +1198,10 @@ class Agent(BaseAgent):
|
|||||||
"object": dict,
|
"object": dict,
|
||||||
}
|
}
|
||||||
|
|
||||||
return type_mapping.get(json_type, Any)
|
return type_mapping.get(json_type or "", Any)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _fetch_amp_mcp_servers(mcp_name: str) -> list[dict]:
|
def _fetch_amp_mcp_servers(mcp_name: str) -> list[dict[str, Any]]:
|
||||||
"""Fetch MCP server configurations from CrewAI AMP API."""
|
"""Fetch MCP server configurations from CrewAI AMP API."""
|
||||||
# TODO: Implement AMP API call to "integrations/mcps" endpoint
|
# TODO: Implement AMP API call to "integrations/mcps" endpoint
|
||||||
# Should return list of server configs with URLs
|
# Should return list of server configs with URLs
|
||||||
|
|||||||
@@ -137,7 +137,7 @@ class BaseAgent(BaseModel, ABC, metaclass=AgentMeta):
|
|||||||
default=False,
|
default=False,
|
||||||
description="Enable agent to delegate and ask questions among each other.",
|
description="Enable agent to delegate and ask questions among each other.",
|
||||||
)
|
)
|
||||||
tools: list[BaseTool] | None = Field(
|
tools: list[BaseTool] = Field(
|
||||||
default_factory=list, description="Tools at agents' disposal"
|
default_factory=list, description="Tools at agents' disposal"
|
||||||
)
|
)
|
||||||
max_iter: int = Field(
|
max_iter: int = Field(
|
||||||
@@ -161,7 +161,7 @@ class BaseAgent(BaseModel, ABC, metaclass=AgentMeta):
|
|||||||
description="An instance of the ToolsHandler class.",
|
description="An instance of the ToolsHandler class.",
|
||||||
)
|
)
|
||||||
tools_results: list[dict[str, Any]] = Field(
|
tools_results: list[dict[str, Any]] = Field(
|
||||||
default=[], description="Results of the tools used by the agent."
|
default_factory=list, description="Results of the tools used by the agent."
|
||||||
)
|
)
|
||||||
max_tokens: int | None = Field(
|
max_tokens: int | None = Field(
|
||||||
default=None, description="Maximum number of tokens for the agent's execution."
|
default=None, description="Maximum number of tokens for the agent's execution."
|
||||||
@@ -265,7 +265,7 @@ class BaseAgent(BaseModel, ABC, metaclass=AgentMeta):
|
|||||||
if not mcps:
|
if not mcps:
|
||||||
return mcps
|
return mcps
|
||||||
|
|
||||||
validated_mcps = []
|
validated_mcps: list[str | MCPServerConfig] = []
|
||||||
for mcp in mcps:
|
for mcp in mcps:
|
||||||
if isinstance(mcp, str):
|
if isinstance(mcp, str):
|
||||||
if mcp.startswith(("https://", "crewai-amp:")):
|
if mcp.startswith(("https://", "crewai-amp:")):
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ if TYPE_CHECKING:
|
|||||||
from crewai.agent import Agent
|
from crewai.agent import Agent
|
||||||
from crewai.agents.tools_handler import ToolsHandler
|
from crewai.agents.tools_handler import ToolsHandler
|
||||||
from crewai.crew import Crew
|
from crewai.crew import Crew
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
from crewai.task import Task
|
from crewai.task import Task
|
||||||
from crewai.tools.base_tool import BaseTool
|
from crewai.tools.base_tool import BaseTool
|
||||||
from crewai.tools.structured_tool import CrewStructuredTool
|
from crewai.tools.structured_tool import CrewStructuredTool
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ from crewai.flow.flow_trackable import FlowTrackable
|
|||||||
from crewai.knowledge.knowledge import Knowledge
|
from crewai.knowledge.knowledge import Knowledge
|
||||||
from crewai.knowledge.source.base_knowledge_source import BaseKnowledgeSource
|
from crewai.knowledge.source.base_knowledge_source import BaseKnowledgeSource
|
||||||
from crewai.llm import LLM
|
from crewai.llm import LLM
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
from crewai.memory.entity.entity_memory import EntityMemory
|
from crewai.memory.entity.entity_memory import EntityMemory
|
||||||
from crewai.memory.external.external_memory import ExternalMemory
|
from crewai.memory.external.external_memory import ExternalMemory
|
||||||
from crewai.memory.long_term.long_term_memory import LongTermMemory
|
from crewai.memory.long_term.long_term_memory import LongTermMemory
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ from crewai.events.types.logging_events import AgentLogsExecutionEvent
|
|||||||
from crewai.flow.flow_trackable import FlowTrackable
|
from crewai.flow.flow_trackable import FlowTrackable
|
||||||
from crewai.lite_agent_output import LiteAgentOutput
|
from crewai.lite_agent_output import LiteAgentOutput
|
||||||
from crewai.llm import LLM
|
from crewai.llm import LLM
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
from crewai.tools.base_tool import BaseTool
|
from crewai.tools.base_tool import BaseTool
|
||||||
from crewai.tools.structured_tool import CrewStructuredTool
|
from crewai.tools.structured_tool import CrewStructuredTool
|
||||||
from crewai.utilities.agent_utils import (
|
from crewai.utilities.agent_utils import (
|
||||||
@@ -503,7 +503,7 @@ class LiteAgent(FlowTrackable, BaseModel):
|
|||||||
AgentFinish: The final result of the agent execution.
|
AgentFinish: The final result of the agent execution.
|
||||||
"""
|
"""
|
||||||
# Execute the agent loop
|
# Execute the agent loop
|
||||||
formatted_answer = None
|
formatted_answer: AgentAction | AgentFinish | None = None
|
||||||
while not isinstance(formatted_answer, AgentFinish):
|
while not isinstance(formatted_answer, AgentFinish):
|
||||||
try:
|
try:
|
||||||
if has_reached_max_iterations(self._iterations, self.max_iterations):
|
if has_reached_max_iterations(self._iterations, self.max_iterations):
|
||||||
@@ -551,6 +551,7 @@ class LiteAgent(FlowTrackable, BaseModel):
|
|||||||
show_logs=self._show_logs,
|
show_logs=self._show_logs,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if formatted_answer is not None:
|
||||||
self._append_message(formatted_answer.text, role="assistant")
|
self._append_message(formatted_answer.text, role="assistant")
|
||||||
except OutputParserError as e: # noqa: PERF203
|
except OutputParserError as e: # noqa: PERF203
|
||||||
self._printer.print(
|
self._printer.print(
|
||||||
|
|||||||
4
lib/crewai/src/crewai/llm/__init__.py
Normal file
4
lib/crewai/src/crewai/llm/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
from crewai.llm.core import LLM
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = ["LLM"]
|
||||||
@@ -11,9 +11,10 @@ from datetime import datetime
|
|||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import re
|
import re
|
||||||
from typing import TYPE_CHECKING, Any, Final
|
from typing import TYPE_CHECKING, Any, ClassVar, Final
|
||||||
|
|
||||||
from pydantic import BaseModel
|
import httpx
|
||||||
|
from pydantic import BaseModel, ConfigDict, Field, model_validator
|
||||||
|
|
||||||
from crewai.events.event_bus import crewai_event_bus
|
from crewai.events.event_bus import crewai_event_bus
|
||||||
from crewai.events.types.llm_events import (
|
from crewai.events.types.llm_events import (
|
||||||
@@ -28,6 +29,8 @@ from crewai.events.types.tool_usage_events import (
|
|||||||
ToolUsageFinishedEvent,
|
ToolUsageFinishedEvent,
|
||||||
ToolUsageStartedEvent,
|
ToolUsageStartedEvent,
|
||||||
)
|
)
|
||||||
|
from crewai.llm.hooks.base import BaseInterceptor
|
||||||
|
from crewai.llm.internal.meta import LLMMeta
|
||||||
from crewai.types.usage_metrics import UsageMetrics
|
from crewai.types.usage_metrics import UsageMetrics
|
||||||
|
|
||||||
|
|
||||||
@@ -43,7 +46,7 @@ DEFAULT_SUPPORTS_STOP_WORDS: Final[bool] = True
|
|||||||
_JSON_EXTRACTION_PATTERN: Final[re.Pattern[str]] = re.compile(r"\{.*}", re.DOTALL)
|
_JSON_EXTRACTION_PATTERN: Final[re.Pattern[str]] = re.compile(r"\{.*}", re.DOTALL)
|
||||||
|
|
||||||
|
|
||||||
class BaseLLM(ABC):
|
class BaseLLM(BaseModel, ABC, metaclass=LLMMeta):
|
||||||
"""Abstract base class for LLM implementations.
|
"""Abstract base class for LLM implementations.
|
||||||
|
|
||||||
This class defines the interface that all LLM implementations must follow.
|
This class defines the interface that all LLM implementations must follow.
|
||||||
@@ -62,47 +65,32 @@ class BaseLLM(ABC):
|
|||||||
additional_params: Additional provider-specific parameters.
|
additional_params: Additional provider-specific parameters.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
is_litellm: bool = False
|
model_config: ClassVar[ConfigDict] = ConfigDict(
|
||||||
|
arbitrary_types_allowed=True, extra="allow", validate_assignment=True
|
||||||
|
)
|
||||||
|
|
||||||
def __init__(
|
# Core fields
|
||||||
self,
|
model: str = Field(..., description="The model identifier/name")
|
||||||
model: str,
|
temperature: float | None = Field(
|
||||||
temperature: float | None = None,
|
None, description="Temperature setting for response generation"
|
||||||
api_key: str | None = None,
|
)
|
||||||
base_url: str | None = None,
|
api_key: str | None = Field(None, description="API key for authentication")
|
||||||
provider: str | None = None,
|
base_url: str | None = Field(None, description="Base URL for API requests")
|
||||||
**kwargs: Any,
|
provider: str = Field(
|
||||||
) -> None:
|
default="openai", description="Provider name (openai, anthropic, etc.)"
|
||||||
"""Initialize the BaseLLM with default attributes.
|
)
|
||||||
|
stop: list[str] = Field(
|
||||||
|
default_factory=list, description="Stop sequences for generation"
|
||||||
|
)
|
||||||
|
|
||||||
Args:
|
# Internal fields
|
||||||
model: The model identifier/name.
|
is_litellm: bool = Field(
|
||||||
temperature: Optional temperature setting for response generation.
|
default=False, description="Whether this instance uses LiteLLM"
|
||||||
stop: Optional list of stop sequences for generation.
|
)
|
||||||
**kwargs: Additional provider-specific parameters.
|
interceptor: BaseInterceptor[httpx.Request, httpx.Response] | None = Field(
|
||||||
"""
|
None, description="HTTP request/response interceptor"
|
||||||
if not model:
|
)
|
||||||
raise ValueError("Model name is required and cannot be empty")
|
_token_usage: dict[str, int] = {
|
||||||
|
|
||||||
self.model = model
|
|
||||||
self.temperature = temperature
|
|
||||||
self.api_key = api_key
|
|
||||||
self.base_url = base_url
|
|
||||||
# Store additional parameters for provider-specific use
|
|
||||||
self.additional_params = kwargs
|
|
||||||
self._provider = provider or "openai"
|
|
||||||
|
|
||||||
stop = kwargs.pop("stop", None)
|
|
||||||
if stop is None:
|
|
||||||
self.stop: list[str] = []
|
|
||||||
elif isinstance(stop, str):
|
|
||||||
self.stop = [stop]
|
|
||||||
elif isinstance(stop, list):
|
|
||||||
self.stop = stop
|
|
||||||
else:
|
|
||||||
self.stop = []
|
|
||||||
|
|
||||||
self._token_usage = {
|
|
||||||
"total_tokens": 0,
|
"total_tokens": 0,
|
||||||
"prompt_tokens": 0,
|
"prompt_tokens": 0,
|
||||||
"completion_tokens": 0,
|
"completion_tokens": 0,
|
||||||
@@ -110,15 +98,70 @@ class BaseLLM(ABC):
|
|||||||
"cached_prompt_tokens": 0,
|
"cached_prompt_tokens": 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
@property
|
@model_validator(mode="before")
|
||||||
def provider(self) -> str:
|
@classmethod
|
||||||
"""Get the provider of the LLM."""
|
def _extract_stop_and_validate(cls, values: dict[str, Any]) -> dict[str, Any]:
|
||||||
return self._provider
|
"""Extract and normalize stop sequences before model initialization.
|
||||||
|
|
||||||
@provider.setter
|
Args:
|
||||||
def provider(self, value: str) -> None:
|
values: Input values dictionary
|
||||||
"""Set the provider of the LLM."""
|
|
||||||
self._provider = value
|
Returns:
|
||||||
|
Processed values dictionary
|
||||||
|
"""
|
||||||
|
if not values.get("model"):
|
||||||
|
raise ValueError("Model name is required and cannot be empty")
|
||||||
|
|
||||||
|
# Handle stop sequences
|
||||||
|
stop = values.get("stop")
|
||||||
|
if stop is None:
|
||||||
|
values["stop"] = []
|
||||||
|
elif isinstance(stop, str):
|
||||||
|
values["stop"] = [stop]
|
||||||
|
elif not isinstance(stop, list):
|
||||||
|
values["stop"] = []
|
||||||
|
|
||||||
|
# Set default provider if not specified
|
||||||
|
if "provider" not in values or values["provider"] is None:
|
||||||
|
values["provider"] = "openai"
|
||||||
|
|
||||||
|
return values
|
||||||
|
|
||||||
|
@property
|
||||||
|
def additional_params(self) -> dict[str, Any]:
|
||||||
|
"""Get additional parameters stored as extra fields.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Dictionary of additional parameters
|
||||||
|
"""
|
||||||
|
return self.__pydantic_extra__ or {}
|
||||||
|
|
||||||
|
@additional_params.setter
|
||||||
|
def additional_params(self, value: dict[str, Any]) -> None:
|
||||||
|
"""Set additional parameters as extra fields.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
value: Dictionary of additional parameters to set
|
||||||
|
"""
|
||||||
|
if not isinstance(value, dict):
|
||||||
|
raise ValueError("additional_params must be a dictionary")
|
||||||
|
if self.__pydantic_extra__ is None:
|
||||||
|
self.__pydantic_extra__ = {}
|
||||||
|
self.__pydantic_extra__.update(value)
|
||||||
|
|
||||||
|
def model_post_init(self, __context: Any) -> None:
|
||||||
|
"""Initialize token usage tracking after model initialization.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
__context: Pydantic context (unused)
|
||||||
|
"""
|
||||||
|
self._token_usage = {
|
||||||
|
"total_tokens": 0,
|
||||||
|
"prompt_tokens": 0,
|
||||||
|
"completion_tokens": 0,
|
||||||
|
"successful_requests": 0,
|
||||||
|
"cached_prompt_tokens": 0,
|
||||||
|
}
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def call(
|
def call(
|
||||||
@@ -20,9 +20,7 @@ from typing import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
import httpx
|
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
from typing_extensions import Self
|
|
||||||
|
|
||||||
from crewai.events.event_bus import crewai_event_bus
|
from crewai.events.event_bus import crewai_event_bus
|
||||||
from crewai.events.types.llm_events import (
|
from crewai.events.types.llm_events import (
|
||||||
@@ -37,14 +35,7 @@ from crewai.events.types.tool_usage_events import (
|
|||||||
ToolUsageFinishedEvent,
|
ToolUsageFinishedEvent,
|
||||||
ToolUsageStartedEvent,
|
ToolUsageStartedEvent,
|
||||||
)
|
)
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
from crewai.llms.constants import (
|
|
||||||
ANTHROPIC_MODELS,
|
|
||||||
AZURE_MODELS,
|
|
||||||
BEDROCK_MODELS,
|
|
||||||
GEMINI_MODELS,
|
|
||||||
OPENAI_MODELS,
|
|
||||||
)
|
|
||||||
from crewai.utilities import InternalInstructor
|
from crewai.utilities import InternalInstructor
|
||||||
from crewai.utilities.exceptions.context_window_exceeding_exception import (
|
from crewai.utilities.exceptions.context_window_exceeding_exception import (
|
||||||
LLMContextLengthExceededError,
|
LLMContextLengthExceededError,
|
||||||
@@ -61,7 +52,6 @@ if TYPE_CHECKING:
|
|||||||
from litellm.utils import supports_response_schema
|
from litellm.utils import supports_response_schema
|
||||||
|
|
||||||
from crewai.agent.core import Agent
|
from crewai.agent.core import Agent
|
||||||
from crewai.llms.hooks.base import BaseInterceptor
|
|
||||||
from crewai.task import Task
|
from crewai.task import Task
|
||||||
from crewai.tools.base_tool import BaseTool
|
from crewai.tools.base_tool import BaseTool
|
||||||
from crewai.utilities.types import LLMMessage
|
from crewai.utilities.types import LLMMessage
|
||||||
@@ -327,249 +317,57 @@ class AccumulatedToolArgs(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class LLM(BaseLLM):
|
class LLM(BaseLLM):
|
||||||
completion_cost: float | None = None
|
"""LiteLLM-based LLM implementation for CrewAI.
|
||||||
|
|
||||||
def __new__(cls, model: str, is_litellm: bool = False, **kwargs: Any) -> LLM:
|
This class provides LiteLLM integration for models not covered by native providers.
|
||||||
"""Factory method that routes to native SDK or falls back to LiteLLM.
|
The metaclass (LLMMeta) automatically routes to native providers when appropriate.
|
||||||
|
|
||||||
Routing priority:
|
|
||||||
1. If 'provider' kwarg is present, use that provider with constants
|
|
||||||
2. If only 'model' kwarg, use constants to infer provider
|
|
||||||
3. If "/" in model name:
|
|
||||||
- Check if prefix is a native provider (openai/anthropic/azure/bedrock/gemini)
|
|
||||||
- If yes, validate model against constants
|
|
||||||
- If valid, route to native SDK; otherwise route to LiteLLM
|
|
||||||
"""
|
"""
|
||||||
if not model or not isinstance(model, str):
|
|
||||||
raise ValueError("Model must be a non-empty string")
|
|
||||||
|
|
||||||
explicit_provider = kwargs.get("provider")
|
# LiteLLM-specific fields
|
||||||
|
completion_cost: float | None = Field(None, description="Cost of completion")
|
||||||
if explicit_provider:
|
timeout: float | int | None = Field(None, description="Request timeout")
|
||||||
provider = explicit_provider
|
top_p: float | None = Field(None, description="Top-p sampling parameter")
|
||||||
use_native = True
|
n: int | None = Field(None, description="Number of completions to generate")
|
||||||
model_string = model
|
max_completion_tokens: int | None = Field(
|
||||||
elif "/" in model:
|
None, description="Maximum completion tokens"
|
||||||
prefix, _, model_part = model.partition("/")
|
|
||||||
|
|
||||||
provider_mapping = {
|
|
||||||
"openai": "openai",
|
|
||||||
"anthropic": "anthropic",
|
|
||||||
"claude": "anthropic",
|
|
||||||
"azure": "azure",
|
|
||||||
"azure_openai": "azure",
|
|
||||||
"google": "gemini",
|
|
||||||
"gemini": "gemini",
|
|
||||||
"bedrock": "bedrock",
|
|
||||||
"aws": "bedrock",
|
|
||||||
}
|
|
||||||
|
|
||||||
canonical_provider = provider_mapping.get(prefix.lower())
|
|
||||||
|
|
||||||
if canonical_provider and cls._validate_model_in_constants(
|
|
||||||
model_part, canonical_provider
|
|
||||||
):
|
|
||||||
provider = canonical_provider
|
|
||||||
use_native = True
|
|
||||||
model_string = model_part
|
|
||||||
else:
|
|
||||||
provider = prefix
|
|
||||||
use_native = False
|
|
||||||
model_string = model_part
|
|
||||||
else:
|
|
||||||
provider = cls._infer_provider_from_model(model)
|
|
||||||
use_native = True
|
|
||||||
model_string = model
|
|
||||||
|
|
||||||
native_class = cls._get_native_provider(provider) if use_native else None
|
|
||||||
if native_class and not is_litellm and provider in SUPPORTED_NATIVE_PROVIDERS:
|
|
||||||
try:
|
|
||||||
# Remove 'provider' from kwargs if it exists to avoid duplicate keyword argument
|
|
||||||
kwargs_copy = {k: v for k, v in kwargs.items() if k != 'provider'}
|
|
||||||
return cast(
|
|
||||||
Self, native_class(model=model_string, provider=provider, **kwargs_copy)
|
|
||||||
)
|
)
|
||||||
except NotImplementedError:
|
max_tokens: int | float | None = Field(None, description="Maximum total tokens")
|
||||||
raise
|
presence_penalty: float | None = Field(None, description="Presence penalty")
|
||||||
except Exception as e:
|
frequency_penalty: float | None = Field(None, description="Frequency penalty")
|
||||||
raise ImportError(f"Error importing native provider: {e}") from e
|
logit_bias: dict[int, float] | None = Field(None, description="Logit bias")
|
||||||
|
response_format: type[BaseModel] | None = Field(
|
||||||
|
None, description="Response format model"
|
||||||
|
)
|
||||||
|
seed: int | None = Field(None, description="Random seed for reproducibility")
|
||||||
|
logprobs: int | None = Field(None, description="Log probabilities to return")
|
||||||
|
top_logprobs: int | None = Field(None, description="Top log probabilities")
|
||||||
|
api_base: str | None = Field(None, description="API base URL (alias for base_url)")
|
||||||
|
api_version: str | None = Field(None, description="API version")
|
||||||
|
callbacks: list[Any] | None = Field(None, description="Callback functions")
|
||||||
|
context_window_size: int = Field(0, description="Context window size in tokens")
|
||||||
|
reasoning_effort: Literal["none", "low", "medium", "high"] | None = Field(
|
||||||
|
None, description="Reasoning effort level"
|
||||||
|
)
|
||||||
|
is_anthropic: bool = Field(False, description="Whether model is from Anthropic")
|
||||||
|
stream: bool = Field(False, description="Whether to stream responses")
|
||||||
|
|
||||||
# FALLBACK to LiteLLM
|
def model_post_init(self, __context: Any) -> None:
|
||||||
if not LITELLM_AVAILABLE:
|
"""Initialize LiteLLM-specific settings after model initialization.
|
||||||
logger.error("LiteLLM is not available, falling back to LiteLLM")
|
|
||||||
raise ImportError("Fallback to LiteLLM is not available") from None
|
|
||||||
|
|
||||||
instance = object.__new__(cls)
|
|
||||||
super(LLM, instance).__init__(model=model, is_litellm=True, **kwargs)
|
|
||||||
instance.is_litellm = True
|
|
||||||
return instance
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def _validate_model_in_constants(cls, model: str, provider: str) -> bool:
|
|
||||||
"""Validate if a model name exists in the provider's constants.
|
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
model: The model name to validate
|
__context: Pydantic context
|
||||||
provider: The provider to check against (canonical name)
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
True if the model exists in the provider's constants, False otherwise
|
|
||||||
"""
|
"""
|
||||||
if provider == "openai":
|
super().model_post_init(__context)
|
||||||
return model in OPENAI_MODELS
|
|
||||||
|
|
||||||
if provider == "anthropic" or provider == "claude":
|
|
||||||
return model in ANTHROPIC_MODELS
|
|
||||||
|
|
||||||
if provider == "gemini":
|
|
||||||
return model in GEMINI_MODELS
|
|
||||||
|
|
||||||
if provider == "bedrock":
|
|
||||||
return model in BEDROCK_MODELS
|
|
||||||
|
|
||||||
if provider == "azure":
|
|
||||||
# azure does not provide a list of available models, determine a better way to handle this
|
|
||||||
return True
|
|
||||||
|
|
||||||
return False
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def _infer_provider_from_model(cls, model: str) -> str:
|
|
||||||
"""Infer the provider from the model name.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
model: The model name without provider prefix
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
The inferred provider name, defaults to "openai"
|
|
||||||
"""
|
|
||||||
|
|
||||||
if model in OPENAI_MODELS:
|
|
||||||
return "openai"
|
|
||||||
|
|
||||||
if model in ANTHROPIC_MODELS:
|
|
||||||
return "anthropic"
|
|
||||||
|
|
||||||
if model in GEMINI_MODELS:
|
|
||||||
return "gemini"
|
|
||||||
|
|
||||||
if model in BEDROCK_MODELS:
|
|
||||||
return "bedrock"
|
|
||||||
|
|
||||||
if model in AZURE_MODELS:
|
|
||||||
return "azure"
|
|
||||||
|
|
||||||
return "openai"
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def _get_native_provider(cls, provider: str) -> type | None:
|
|
||||||
"""Get native provider class if available."""
|
|
||||||
if provider == "openai":
|
|
||||||
from crewai.llms.providers.openai.completion import OpenAICompletion
|
|
||||||
|
|
||||||
return OpenAICompletion
|
|
||||||
|
|
||||||
if provider == "anthropic" or provider == "claude":
|
|
||||||
from crewai.llms.providers.anthropic.completion import (
|
|
||||||
AnthropicCompletion,
|
|
||||||
)
|
|
||||||
|
|
||||||
return AnthropicCompletion
|
|
||||||
|
|
||||||
if provider == "azure" or provider == "azure_openai":
|
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
|
||||||
|
|
||||||
return AzureCompletion
|
|
||||||
|
|
||||||
if provider == "google" or provider == "gemini":
|
|
||||||
from crewai.llms.providers.gemini.completion import GeminiCompletion
|
|
||||||
|
|
||||||
return GeminiCompletion
|
|
||||||
|
|
||||||
if provider == "bedrock":
|
|
||||||
from crewai.llms.providers.bedrock.completion import BedrockCompletion
|
|
||||||
|
|
||||||
return BedrockCompletion
|
|
||||||
|
|
||||||
return None
|
|
||||||
|
|
||||||
def __init__(
|
|
||||||
self,
|
|
||||||
model: str,
|
|
||||||
timeout: float | int | None = None,
|
|
||||||
temperature: float | None = None,
|
|
||||||
top_p: float | None = None,
|
|
||||||
n: int | None = None,
|
|
||||||
stop: str | list[str] | None = None,
|
|
||||||
max_completion_tokens: int | None = None,
|
|
||||||
max_tokens: int | float | None = None,
|
|
||||||
presence_penalty: float | None = None,
|
|
||||||
frequency_penalty: float | None = None,
|
|
||||||
logit_bias: dict[int, float] | None = None,
|
|
||||||
response_format: type[BaseModel] | None = None,
|
|
||||||
seed: int | None = None,
|
|
||||||
logprobs: int | None = None,
|
|
||||||
top_logprobs: int | None = None,
|
|
||||||
base_url: str | None = None,
|
|
||||||
api_base: str | None = None,
|
|
||||||
api_version: str | None = None,
|
|
||||||
api_key: str | None = None,
|
|
||||||
callbacks: list[Any] | None = None,
|
|
||||||
reasoning_effort: Literal["none", "low", "medium", "high"] | None = None,
|
|
||||||
stream: bool = False,
|
|
||||||
interceptor: BaseInterceptor[httpx.Request, httpx.Response] | None = None,
|
|
||||||
**kwargs: Any,
|
|
||||||
) -> None:
|
|
||||||
"""Initialize LLM instance.
|
|
||||||
|
|
||||||
Note: This __init__ method is only called for fallback instances.
|
|
||||||
Native provider instances handle their own initialization in their respective classes.
|
|
||||||
"""
|
|
||||||
super().__init__(
|
|
||||||
model=model,
|
|
||||||
temperature=temperature,
|
|
||||||
api_key=api_key,
|
|
||||||
base_url=base_url,
|
|
||||||
timeout=timeout,
|
|
||||||
**kwargs,
|
|
||||||
)
|
|
||||||
self.model = model
|
|
||||||
self.timeout = timeout
|
|
||||||
self.temperature = temperature
|
|
||||||
self.top_p = top_p
|
|
||||||
self.n = n
|
|
||||||
self.max_completion_tokens = max_completion_tokens
|
|
||||||
self.max_tokens = max_tokens
|
|
||||||
self.presence_penalty = presence_penalty
|
|
||||||
self.frequency_penalty = frequency_penalty
|
|
||||||
self.logit_bias = logit_bias
|
|
||||||
self.response_format = response_format
|
|
||||||
self.seed = seed
|
|
||||||
self.logprobs = logprobs
|
|
||||||
self.top_logprobs = top_logprobs
|
|
||||||
self.base_url = base_url
|
|
||||||
self.api_base = api_base
|
|
||||||
self.api_version = api_version
|
|
||||||
self.api_key = api_key
|
|
||||||
self.callbacks = callbacks
|
|
||||||
self.context_window_size = 0
|
|
||||||
self.reasoning_effort = reasoning_effort
|
|
||||||
self.additional_params = kwargs
|
|
||||||
self.is_anthropic = self._is_anthropic_model(model)
|
|
||||||
self.stream = stream
|
|
||||||
self.interceptor = interceptor
|
|
||||||
|
|
||||||
|
# Configure LiteLLM
|
||||||
|
if LITELLM_AVAILABLE:
|
||||||
litellm.drop_params = True
|
litellm.drop_params = True
|
||||||
|
|
||||||
# Normalize self.stop to always be a list[str]
|
# Determine if this is an Anthropic model
|
||||||
if stop is None:
|
self.is_anthropic = self._is_anthropic_model(self.model)
|
||||||
self.stop: list[str] = []
|
|
||||||
elif isinstance(stop, str):
|
|
||||||
self.stop = [stop]
|
|
||||||
else:
|
|
||||||
self.stop = stop
|
|
||||||
|
|
||||||
self.set_callbacks(callbacks or [])
|
# Set up callbacks
|
||||||
|
self.set_callbacks(self.callbacks or [])
|
||||||
self.set_env_callbacks()
|
self.set_env_callbacks()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@@ -1649,7 +1447,7 @@ class LLM(BaseLLM):
|
|||||||
**filtered_params,
|
**filtered_params,
|
||||||
)
|
)
|
||||||
|
|
||||||
def __deepcopy__(self, memo: dict[int, Any] | None) -> LLM:
|
def __deepcopy__(self, memo: dict[int, Any] | None) -> LLM: # type: ignore[override]
|
||||||
"""Create a deep copy of the LLM instance."""
|
"""Create a deep copy of the LLM instance."""
|
||||||
import copy
|
import copy
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
"""Interceptor contracts for crewai"""
|
"""Interceptor contracts for crewai"""
|
||||||
|
|
||||||
from crewai.llms.hooks.base import BaseInterceptor
|
from crewai.llm.hooks.base import BaseInterceptor
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["BaseInterceptor"]
|
__all__ = ["BaseInterceptor"]
|
||||||
@@ -22,7 +22,7 @@ if TYPE_CHECKING:
|
|||||||
from httpx import Limits, Request, Response
|
from httpx import Limits, Request, Response
|
||||||
from httpx._types import CertTypes, ProxyTypes
|
from httpx._types import CertTypes, ProxyTypes
|
||||||
|
|
||||||
from crewai.llms.hooks.base import BaseInterceptor
|
from crewai.llm.hooks.base import BaseInterceptor
|
||||||
|
|
||||||
|
|
||||||
class HTTPTransportKwargs(TypedDict, total=False):
|
class HTTPTransportKwargs(TypedDict, total=False):
|
||||||
232
lib/crewai/src/crewai/llm/internal/meta.py
Normal file
232
lib/crewai/src/crewai/llm/internal/meta.py
Normal file
@@ -0,0 +1,232 @@
|
|||||||
|
"""Metaclass for LLM provider routing.
|
||||||
|
|
||||||
|
This metaclass enables automatic routing to native provider implementations
|
||||||
|
based on the model parameter at instantiation time.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import logging
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
from pydantic._internal._model_construction import ModelMetaclass
|
||||||
|
|
||||||
|
|
||||||
|
# Provider constants imported from crewai.llm.constants
|
||||||
|
SUPPORTED_NATIVE_PROVIDERS: list[str] = [
|
||||||
|
"openai",
|
||||||
|
"anthropic",
|
||||||
|
"claude",
|
||||||
|
"azure",
|
||||||
|
"azure_openai",
|
||||||
|
"google",
|
||||||
|
"gemini",
|
||||||
|
"bedrock",
|
||||||
|
"aws",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class LLMMeta(ModelMetaclass):
|
||||||
|
"""Metaclass for LLM that handles provider routing.
|
||||||
|
|
||||||
|
This metaclass intercepts LLM instantiation and routes to the appropriate
|
||||||
|
native provider implementation based on the model parameter.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __call__(cls, model: str, is_litellm: bool = False, **kwargs: Any) -> Any: # noqa: N805
|
||||||
|
"""Route to appropriate provider implementation at instantiation time.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
model: The model identifier (e.g., "gpt-4", "claude-3-opus")
|
||||||
|
is_litellm: Force use of LiteLLM instead of native provider
|
||||||
|
**kwargs: Additional parameters for the LLM
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Instance of the appropriate provider class or LLM class
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
ValueError: If model is not a valid string
|
||||||
|
"""
|
||||||
|
if not model or not isinstance(model, str):
|
||||||
|
raise ValueError("Model must be a non-empty string")
|
||||||
|
|
||||||
|
# Only perform routing if called on the base LLM class
|
||||||
|
# Subclasses (OpenAICompletion, etc.) should create normally
|
||||||
|
from crewai.llm import LLM
|
||||||
|
|
||||||
|
if cls is not LLM:
|
||||||
|
# Direct instantiation of provider class, skip routing
|
||||||
|
return super().__call__(model=model, **kwargs)
|
||||||
|
|
||||||
|
# Extract provider information
|
||||||
|
explicit_provider = kwargs.get("provider")
|
||||||
|
|
||||||
|
if explicit_provider:
|
||||||
|
provider = explicit_provider
|
||||||
|
use_native = True
|
||||||
|
model_string = model
|
||||||
|
elif "/" in model:
|
||||||
|
prefix, _, model_part = model.partition("/")
|
||||||
|
|
||||||
|
provider_mapping = {
|
||||||
|
"openai": "openai",
|
||||||
|
"anthropic": "anthropic",
|
||||||
|
"claude": "anthropic",
|
||||||
|
"azure": "azure",
|
||||||
|
"azure_openai": "azure",
|
||||||
|
"google": "gemini",
|
||||||
|
"gemini": "gemini",
|
||||||
|
"bedrock": "bedrock",
|
||||||
|
"aws": "bedrock",
|
||||||
|
}
|
||||||
|
|
||||||
|
canonical_provider = provider_mapping.get(prefix.lower())
|
||||||
|
|
||||||
|
if canonical_provider and cls._validate_model_in_constants(
|
||||||
|
model_part, canonical_provider
|
||||||
|
):
|
||||||
|
provider = canonical_provider
|
||||||
|
use_native = True
|
||||||
|
model_string = model_part
|
||||||
|
else:
|
||||||
|
provider = prefix
|
||||||
|
use_native = False
|
||||||
|
model_string = model_part
|
||||||
|
else:
|
||||||
|
provider = cls._infer_provider_from_model(model)
|
||||||
|
use_native = True
|
||||||
|
model_string = model
|
||||||
|
|
||||||
|
# Route to native provider if available
|
||||||
|
native_class = cls._get_native_provider(provider) if use_native else None
|
||||||
|
if native_class and not is_litellm and provider in SUPPORTED_NATIVE_PROVIDERS:
|
||||||
|
try:
|
||||||
|
# Remove 'provider' from kwargs to avoid duplicate keyword argument
|
||||||
|
kwargs_copy = {k: v for k, v in kwargs.items() if k != "provider"}
|
||||||
|
return native_class(
|
||||||
|
model=model_string, provider=provider, **kwargs_copy
|
||||||
|
)
|
||||||
|
except NotImplementedError:
|
||||||
|
raise
|
||||||
|
except Exception as e:
|
||||||
|
raise ImportError(f"Error importing native provider: {e}") from e
|
||||||
|
|
||||||
|
# Fallback to LiteLLM
|
||||||
|
try:
|
||||||
|
import litellm # noqa: F401
|
||||||
|
except ImportError:
|
||||||
|
logging.error("LiteLLM is not available, falling back to LiteLLM")
|
||||||
|
raise ImportError("Fallback to LiteLLM is not available") from None
|
||||||
|
|
||||||
|
# Create actual LLM instance with is_litellm=True
|
||||||
|
return super().__call__(model=model, is_litellm=True, **kwargs)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _validate_model_in_constants(model: str, provider: str) -> bool:
|
||||||
|
"""Validate if a model name exists in the provider's constants.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
model: The model name to validate
|
||||||
|
provider: The provider to check against (canonical name)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
True if the model exists in the provider's constants, False otherwise
|
||||||
|
"""
|
||||||
|
from crewai.llm.constants import (
|
||||||
|
ANTHROPIC_MODELS,
|
||||||
|
BEDROCK_MODELS,
|
||||||
|
GEMINI_MODELS,
|
||||||
|
OPENAI_MODELS,
|
||||||
|
)
|
||||||
|
|
||||||
|
if provider == "openai":
|
||||||
|
return model in OPENAI_MODELS
|
||||||
|
|
||||||
|
if provider == "anthropic" or provider == "claude":
|
||||||
|
return model in ANTHROPIC_MODELS
|
||||||
|
|
||||||
|
if provider == "gemini":
|
||||||
|
return model in GEMINI_MODELS
|
||||||
|
|
||||||
|
if provider == "bedrock":
|
||||||
|
return model in BEDROCK_MODELS
|
||||||
|
|
||||||
|
if provider == "azure":
|
||||||
|
# azure does not provide a list of available models
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _infer_provider_from_model(model: str) -> str:
|
||||||
|
"""Infer the provider from the model name.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
model: The model name without provider prefix
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The inferred provider name, defaults to "openai"
|
||||||
|
"""
|
||||||
|
from crewai.llm.constants import (
|
||||||
|
ANTHROPIC_MODELS,
|
||||||
|
AZURE_MODELS,
|
||||||
|
BEDROCK_MODELS,
|
||||||
|
GEMINI_MODELS,
|
||||||
|
OPENAI_MODELS,
|
||||||
|
)
|
||||||
|
|
||||||
|
if model in OPENAI_MODELS:
|
||||||
|
return "openai"
|
||||||
|
|
||||||
|
if model in ANTHROPIC_MODELS:
|
||||||
|
return "anthropic"
|
||||||
|
|
||||||
|
if model in GEMINI_MODELS:
|
||||||
|
return "gemini"
|
||||||
|
|
||||||
|
if model in BEDROCK_MODELS:
|
||||||
|
return "bedrock"
|
||||||
|
|
||||||
|
if model in AZURE_MODELS:
|
||||||
|
return "azure"
|
||||||
|
|
||||||
|
return "openai"
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _get_native_provider(provider: str) -> type | None:
|
||||||
|
"""Get native provider class if available.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
provider: The provider name
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The provider class or None if not available
|
||||||
|
"""
|
||||||
|
if provider == "openai":
|
||||||
|
from crewai.llm.providers.openai.completion import OpenAICompletion
|
||||||
|
|
||||||
|
return OpenAICompletion
|
||||||
|
|
||||||
|
if provider == "anthropic" or provider == "claude":
|
||||||
|
from crewai.llm.providers.anthropic.completion import (
|
||||||
|
AnthropicCompletion,
|
||||||
|
)
|
||||||
|
|
||||||
|
return AnthropicCompletion
|
||||||
|
|
||||||
|
if provider == "azure" or provider == "azure_openai":
|
||||||
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
|
|
||||||
|
return AzureCompletion
|
||||||
|
|
||||||
|
if provider == "google" or provider == "gemini":
|
||||||
|
from crewai.llm.providers.gemini.completion import GeminiCompletion
|
||||||
|
|
||||||
|
return GeminiCompletion
|
||||||
|
|
||||||
|
if provider == "bedrock":
|
||||||
|
from crewai.llm.providers.bedrock.completion import BedrockCompletion
|
||||||
|
|
||||||
|
return BedrockCompletion
|
||||||
|
|
||||||
|
return None
|
||||||
@@ -3,13 +3,15 @@ from __future__ import annotations
|
|||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
from typing import TYPE_CHECKING, Any, cast
|
from typing import TYPE_CHECKING, Any, ClassVar, cast
|
||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel, ConfigDict
|
||||||
|
|
||||||
from crewai.events.types.llm_events import LLMCallType
|
from crewai.events.types.llm_events import LLMCallType
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
from crewai.llms.hooks.transport import HTTPTransport
|
from crewai.llm.core import CONTEXT_WINDOW_USAGE_RATIO
|
||||||
|
from crewai.llm.hooks.transport import HTTPTransport
|
||||||
|
from crewai.llm.providers.utils.common import safe_tool_conversion
|
||||||
from crewai.utilities.agent_utils import is_context_length_exceeded
|
from crewai.utilities.agent_utils import is_context_length_exceeded
|
||||||
from crewai.utilities.exceptions.context_window_exceeding_exception import (
|
from crewai.utilities.exceptions.context_window_exceeding_exception import (
|
||||||
LLMContextLengthExceededError,
|
LLMContextLengthExceededError,
|
||||||
@@ -18,7 +20,7 @@ from crewai.utilities.types import LLMMessage
|
|||||||
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from crewai.llms.hooks.base import BaseInterceptor
|
from crewai.llm.hooks.base import BaseInterceptor
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from anthropic import Anthropic
|
from anthropic import Anthropic
|
||||||
@@ -38,6 +40,8 @@ class AnthropicCompletion(BaseLLM):
|
|||||||
offering native tool use, streaming support, and proper message formatting.
|
offering native tool use, streaming support, and proper message formatting.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
model_config: ClassVar[ConfigDict] = ConfigDict(ignored_types=(property,))
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
model: str = "claude-3-5-sonnet-20241022",
|
model: str = "claude-3-5-sonnet-20241022",
|
||||||
@@ -94,29 +98,30 @@ class AnthropicCompletion(BaseLLM):
|
|||||||
self.is_claude_3 = "claude-3" in model.lower()
|
self.is_claude_3 = "claude-3" in model.lower()
|
||||||
self.supports_tools = self.is_claude_3 # Claude 3+ supports tool use
|
self.supports_tools = self.is_claude_3 # Claude 3+ supports tool use
|
||||||
|
|
||||||
@property
|
#
|
||||||
def stop(self) -> list[str]:
|
# @property
|
||||||
"""Get stop sequences sent to the API."""
|
# def stop(self) -> list[str]: # type: ignore[misc]
|
||||||
return self.stop_sequences
|
# """Get stop sequences sent to the API."""
|
||||||
|
# return self.stop_sequences
|
||||||
|
|
||||||
@stop.setter
|
# @stop.setter
|
||||||
def stop(self, value: list[str] | str | None) -> None:
|
# def stop(self, value: list[str] | str | None) -> None:
|
||||||
"""Set stop sequences.
|
# """Set stop sequences.
|
||||||
|
#
|
||||||
Synchronizes stop_sequences to ensure values set by CrewAgentExecutor
|
# Synchronizes stop_sequences to ensure values set by CrewAgentExecutor
|
||||||
are properly sent to the Anthropic API.
|
# are properly sent to the Anthropic API.
|
||||||
|
#
|
||||||
Args:
|
# Args:
|
||||||
value: Stop sequences as a list, single string, or None
|
# value: Stop sequences as a list, single string, or None
|
||||||
"""
|
# """
|
||||||
if value is None:
|
# if value is None:
|
||||||
self.stop_sequences = []
|
# self.stop_sequences = []
|
||||||
elif isinstance(value, str):
|
# elif isinstance(value, str):
|
||||||
self.stop_sequences = [value]
|
# self.stop_sequences = [value]
|
||||||
elif isinstance(value, list):
|
# elif isinstance(value, list):
|
||||||
self.stop_sequences = value
|
# self.stop_sequences = value
|
||||||
else:
|
# else:
|
||||||
self.stop_sequences = []
|
# self.stop_sequences = []
|
||||||
|
|
||||||
def _get_client_params(self) -> dict[str, Any]:
|
def _get_client_params(self) -> dict[str, Any]:
|
||||||
"""Get client parameters."""
|
"""Get client parameters."""
|
||||||
@@ -266,8 +271,6 @@ class AnthropicCompletion(BaseLLM):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from crewai.llms.providers.utils.common import safe_tool_conversion
|
|
||||||
|
|
||||||
name, description, parameters = safe_tool_conversion(tool, "Anthropic")
|
name, description, parameters = safe_tool_conversion(tool, "Anthropic")
|
||||||
except (ImportError, KeyError, ValueError) as e:
|
except (ImportError, KeyError, ValueError) as e:
|
||||||
logging.error(f"Error converting tool to Anthropic format: {e}")
|
logging.error(f"Error converting tool to Anthropic format: {e}")
|
||||||
@@ -636,7 +639,6 @@ class AnthropicCompletion(BaseLLM):
|
|||||||
|
|
||||||
def get_context_window_size(self) -> int:
|
def get_context_window_size(self) -> int:
|
||||||
"""Get the context window size for the model."""
|
"""Get the context window size for the model."""
|
||||||
from crewai.llm import CONTEXT_WINDOW_USAGE_RATIO
|
|
||||||
|
|
||||||
# Context window sizes for Anthropic models
|
# Context window sizes for Anthropic models
|
||||||
context_windows = {
|
context_windows = {
|
||||||
@@ -7,6 +7,8 @@ from typing import TYPE_CHECKING, Any
|
|||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
from crewai.llm.core import CONTEXT_WINDOW_USAGE_RATIO, LLM_CONTEXT_WINDOW_SIZES
|
||||||
|
from crewai.llm.providers.utils.common import safe_tool_conversion
|
||||||
from crewai.utilities.agent_utils import is_context_length_exceeded
|
from crewai.utilities.agent_utils import is_context_length_exceeded
|
||||||
from crewai.utilities.exceptions.context_window_exceeding_exception import (
|
from crewai.utilities.exceptions.context_window_exceeding_exception import (
|
||||||
LLMContextLengthExceededError,
|
LLMContextLengthExceededError,
|
||||||
@@ -15,7 +17,7 @@ from crewai.utilities.types import LLMMessage
|
|||||||
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from crewai.llms.hooks.base import BaseInterceptor
|
from crewai.llm.hooks.base import BaseInterceptor
|
||||||
from crewai.tools.base_tool import BaseTool
|
from crewai.tools.base_tool import BaseTool
|
||||||
|
|
||||||
|
|
||||||
@@ -36,7 +38,7 @@ try:
|
|||||||
)
|
)
|
||||||
|
|
||||||
from crewai.events.types.llm_events import LLMCallType
|
from crewai.events.types.llm_events import LLMCallType
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
|
|
||||||
except ImportError:
|
except ImportError:
|
||||||
raise ImportError(
|
raise ImportError(
|
||||||
@@ -317,8 +319,6 @@ class AzureCompletion(BaseLLM):
|
|||||||
) -> list[dict[str, Any]]:
|
) -> list[dict[str, Any]]:
|
||||||
"""Convert CrewAI tool format to Azure OpenAI function calling format."""
|
"""Convert CrewAI tool format to Azure OpenAI function calling format."""
|
||||||
|
|
||||||
from crewai.llms.providers.utils.common import safe_tool_conversion
|
|
||||||
|
|
||||||
azure_tools = []
|
azure_tools = []
|
||||||
|
|
||||||
for tool in tools:
|
for tool in tools:
|
||||||
@@ -554,7 +554,6 @@ class AzureCompletion(BaseLLM):
|
|||||||
|
|
||||||
def get_context_window_size(self) -> int:
|
def get_context_window_size(self) -> int:
|
||||||
"""Get the context window size for the model."""
|
"""Get the context window size for the model."""
|
||||||
from crewai.llm import CONTEXT_WINDOW_USAGE_RATIO, LLM_CONTEXT_WINDOW_SIZES
|
|
||||||
|
|
||||||
min_context = 1024
|
min_context = 1024
|
||||||
max_context = 2097152
|
max_context = 2097152
|
||||||
@@ -3,13 +3,15 @@ from __future__ import annotations
|
|||||||
from collections.abc import Mapping, Sequence
|
from collections.abc import Mapping, Sequence
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
from typing import TYPE_CHECKING, Any, TypedDict, cast
|
from typing import TYPE_CHECKING, Any, ClassVar, TypedDict, cast
|
||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel, ConfigDict
|
||||||
from typing_extensions import Required
|
from typing_extensions import Required
|
||||||
|
|
||||||
from crewai.events.types.llm_events import LLMCallType
|
from crewai.events.types.llm_events import LLMCallType
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
|
from crewai.llm.core import CONTEXT_WINDOW_USAGE_RATIO
|
||||||
|
from crewai.llm.providers.utils.common import safe_tool_conversion
|
||||||
from crewai.utilities.agent_utils import is_context_length_exceeded
|
from crewai.utilities.agent_utils import is_context_length_exceeded
|
||||||
from crewai.utilities.exceptions.context_window_exceeding_exception import (
|
from crewai.utilities.exceptions.context_window_exceeding_exception import (
|
||||||
LLMContextLengthExceededError,
|
LLMContextLengthExceededError,
|
||||||
@@ -30,7 +32,7 @@ if TYPE_CHECKING:
|
|||||||
ToolTypeDef,
|
ToolTypeDef,
|
||||||
)
|
)
|
||||||
|
|
||||||
from crewai.llms.hooks.base import BaseInterceptor
|
from crewai.llm.hooks.base import BaseInterceptor
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -143,6 +145,8 @@ class BedrockCompletion(BaseLLM):
|
|||||||
- Model-specific conversation format handling (e.g., Cohere requirements)
|
- Model-specific conversation format handling (e.g., Cohere requirements)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
model_config: ClassVar[ConfigDict] = ConfigDict(ignored_types=(property,))
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
model: str = "anthropic.claude-3-5-sonnet-20241022-v2:0",
|
model: str = "anthropic.claude-3-5-sonnet-20241022-v2:0",
|
||||||
@@ -243,29 +247,29 @@ class BedrockCompletion(BaseLLM):
|
|||||||
# Handle inference profiles for newer models
|
# Handle inference profiles for newer models
|
||||||
self.model_id = model
|
self.model_id = model
|
||||||
|
|
||||||
@property
|
# @property
|
||||||
def stop(self) -> list[str]:
|
# def stop(self) -> list[str]: # type: ignore[misc]
|
||||||
"""Get stop sequences sent to the API."""
|
# """Get stop sequences sent to the API."""
|
||||||
return list(self.stop_sequences)
|
# return list(self.stop_sequences)
|
||||||
|
|
||||||
@stop.setter
|
# @stop.setter
|
||||||
def stop(self, value: Sequence[str] | str | None) -> None:
|
# def stop(self, value: Sequence[str] | str | None) -> None:
|
||||||
"""Set stop sequences.
|
# """Set stop sequences.
|
||||||
|
#
|
||||||
Synchronizes stop_sequences to ensure values set by CrewAgentExecutor
|
# Synchronizes stop_sequences to ensure values set by CrewAgentExecutor
|
||||||
are properly sent to the Bedrock API.
|
# are properly sent to the Bedrock API.
|
||||||
|
#
|
||||||
Args:
|
# Args:
|
||||||
value: Stop sequences as a Sequence, single string, or None
|
# value: Stop sequences as a Sequence, single string, or None
|
||||||
"""
|
# """
|
||||||
if value is None:
|
# if value is None:
|
||||||
self.stop_sequences = []
|
# self.stop_sequences = []
|
||||||
elif isinstance(value, str):
|
# elif isinstance(value, str):
|
||||||
self.stop_sequences = [value]
|
# self.stop_sequences = [value]
|
||||||
elif isinstance(value, Sequence):
|
# elif isinstance(value, Sequence):
|
||||||
self.stop_sequences = list(value)
|
# self.stop_sequences = list(value)
|
||||||
else:
|
# else:
|
||||||
self.stop_sequences = []
|
# self.stop_sequences = []
|
||||||
|
|
||||||
def call(
|
def call(
|
||||||
self,
|
self,
|
||||||
@@ -778,7 +782,6 @@ class BedrockCompletion(BaseLLM):
|
|||||||
tools: list[dict[str, Any]],
|
tools: list[dict[str, Any]],
|
||||||
) -> list[ConverseToolTypeDef]:
|
) -> list[ConverseToolTypeDef]:
|
||||||
"""Convert CrewAI tools to Converse API format following AWS specification."""
|
"""Convert CrewAI tools to Converse API format following AWS specification."""
|
||||||
from crewai.llms.providers.utils.common import safe_tool_conversion
|
|
||||||
|
|
||||||
converse_tools: list[ConverseToolTypeDef] = []
|
converse_tools: list[ConverseToolTypeDef] = []
|
||||||
|
|
||||||
@@ -871,7 +874,6 @@ class BedrockCompletion(BaseLLM):
|
|||||||
|
|
||||||
def get_context_window_size(self) -> int:
|
def get_context_window_size(self) -> int:
|
||||||
"""Get the context window size for the model."""
|
"""Get the context window size for the model."""
|
||||||
from crewai.llm import CONTEXT_WINDOW_USAGE_RATIO
|
|
||||||
|
|
||||||
# Context window sizes for common Bedrock models
|
# Context window sizes for common Bedrock models
|
||||||
context_windows = {
|
context_windows = {
|
||||||
@@ -1,12 +1,14 @@
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
from typing import Any, cast
|
from typing import Any, ClassVar, cast
|
||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel, ConfigDict
|
||||||
|
|
||||||
from crewai.events.types.llm_events import LLMCallType
|
from crewai.events.types.llm_events import LLMCallType
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
from crewai.llms.hooks.base import BaseInterceptor
|
from crewai.llm.core import CONTEXT_WINDOW_USAGE_RATIO, LLM_CONTEXT_WINDOW_SIZES
|
||||||
|
from crewai.llm.hooks.base import BaseInterceptor
|
||||||
|
from crewai.llm.providers.utils.common import safe_tool_conversion
|
||||||
from crewai.utilities.agent_utils import is_context_length_exceeded
|
from crewai.utilities.agent_utils import is_context_length_exceeded
|
||||||
from crewai.utilities.exceptions.context_window_exceeding_exception import (
|
from crewai.utilities.exceptions.context_window_exceeding_exception import (
|
||||||
LLMContextLengthExceededError,
|
LLMContextLengthExceededError,
|
||||||
@@ -31,6 +33,8 @@ class GeminiCompletion(BaseLLM):
|
|||||||
offering native function calling, streaming support, and proper Gemini formatting.
|
offering native function calling, streaming support, and proper Gemini formatting.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
model_config: ClassVar[ConfigDict] = ConfigDict(ignored_types=(property,))
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
model: str = "gemini-2.0-flash-001",
|
model: str = "gemini-2.0-flash-001",
|
||||||
@@ -104,29 +108,29 @@ class GeminiCompletion(BaseLLM):
|
|||||||
self.is_gemini_1_5 = "gemini-1.5" in model.lower()
|
self.is_gemini_1_5 = "gemini-1.5" in model.lower()
|
||||||
self.supports_tools = self.is_gemini_1_5 or self.is_gemini_2
|
self.supports_tools = self.is_gemini_1_5 or self.is_gemini_2
|
||||||
|
|
||||||
@property
|
# @property
|
||||||
def stop(self) -> list[str]:
|
# def stop(self) -> list[str]: # type: ignore[misc]
|
||||||
"""Get stop sequences sent to the API."""
|
# """Get stop sequences sent to the API."""
|
||||||
return self.stop_sequences
|
# return self.stop_sequences
|
||||||
|
|
||||||
@stop.setter
|
# @stop.setter
|
||||||
def stop(self, value: list[str] | str | None) -> None:
|
# def stop(self, value: list[str] | str | None) -> None:
|
||||||
"""Set stop sequences.
|
# """Set stop sequences.
|
||||||
|
#
|
||||||
Synchronizes stop_sequences to ensure values set by CrewAgentExecutor
|
# Synchronizes stop_sequences to ensure values set by CrewAgentExecutor
|
||||||
are properly sent to the Gemini API.
|
# are properly sent to the Gemini API.
|
||||||
|
#
|
||||||
Args:
|
# Args:
|
||||||
value: Stop sequences as a list, single string, or None
|
# value: Stop sequences as a list, single string, or None
|
||||||
"""
|
# """
|
||||||
if value is None:
|
# if value is None:
|
||||||
self.stop_sequences = []
|
# self.stop_sequences = []
|
||||||
elif isinstance(value, str):
|
# elif isinstance(value, str):
|
||||||
self.stop_sequences = [value]
|
# self.stop_sequences = [value]
|
||||||
elif isinstance(value, list):
|
# elif isinstance(value, list):
|
||||||
self.stop_sequences = value
|
# self.stop_sequences = value
|
||||||
else:
|
# else:
|
||||||
self.stop_sequences = []
|
# self.stop_sequences = []
|
||||||
|
|
||||||
def _initialize_client(self, use_vertexai: bool = False) -> genai.Client: # type: ignore[no-any-unimported]
|
def _initialize_client(self, use_vertexai: bool = False) -> genai.Client: # type: ignore[no-any-unimported]
|
||||||
"""Initialize the Google Gen AI client with proper parameter handling.
|
"""Initialize the Google Gen AI client with proper parameter handling.
|
||||||
@@ -335,8 +339,6 @@ class GeminiCompletion(BaseLLM):
|
|||||||
"""Convert CrewAI tool format to Gemini function declaration format."""
|
"""Convert CrewAI tool format to Gemini function declaration format."""
|
||||||
gemini_tools = []
|
gemini_tools = []
|
||||||
|
|
||||||
from crewai.llms.providers.utils.common import safe_tool_conversion
|
|
||||||
|
|
||||||
for tool in tools:
|
for tool in tools:
|
||||||
name, description, parameters = safe_tool_conversion(tool, "Gemini")
|
name, description, parameters = safe_tool_conversion(tool, "Gemini")
|
||||||
|
|
||||||
@@ -547,7 +549,6 @@ class GeminiCompletion(BaseLLM):
|
|||||||
|
|
||||||
def get_context_window_size(self) -> int:
|
def get_context_window_size(self) -> int:
|
||||||
"""Get the context window size for the model."""
|
"""Get the context window size for the model."""
|
||||||
from crewai.llm import CONTEXT_WINDOW_USAGE_RATIO, LLM_CONTEXT_WINDOW_SIZES
|
|
||||||
|
|
||||||
min_context = 1024
|
min_context = 1024
|
||||||
max_context = 2097152
|
max_context = 2097152
|
||||||
@@ -11,11 +11,13 @@ from openai import APIConnectionError, NotFoundError, OpenAI
|
|||||||
from openai.types.chat import ChatCompletion, ChatCompletionChunk
|
from openai.types.chat import ChatCompletion, ChatCompletionChunk
|
||||||
from openai.types.chat.chat_completion import Choice
|
from openai.types.chat.chat_completion import Choice
|
||||||
from openai.types.chat.chat_completion_chunk import ChoiceDelta
|
from openai.types.chat.chat_completion_chunk import ChoiceDelta
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel, Field
|
||||||
|
|
||||||
from crewai.events.types.llm_events import LLMCallType
|
from crewai.events.types.llm_events import LLMCallType
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
from crewai.llms.hooks.transport import HTTPTransport
|
from crewai.llm.core import CONTEXT_WINDOW_USAGE_RATIO, LLM_CONTEXT_WINDOW_SIZES
|
||||||
|
from crewai.llm.hooks.transport import HTTPTransport
|
||||||
|
from crewai.llm.providers.utils.common import safe_tool_conversion
|
||||||
from crewai.utilities.agent_utils import is_context_length_exceeded
|
from crewai.utilities.agent_utils import is_context_length_exceeded
|
||||||
from crewai.utilities.exceptions.context_window_exceeding_exception import (
|
from crewai.utilities.exceptions.context_window_exceeding_exception import (
|
||||||
LLMContextLengthExceededError,
|
LLMContextLengthExceededError,
|
||||||
@@ -25,7 +27,6 @@ from crewai.utilities.types import LLMMessage
|
|||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from crewai.agent.core import Agent
|
from crewai.agent.core import Agent
|
||||||
from crewai.llms.hooks.base import BaseInterceptor
|
|
||||||
from crewai.task import Task
|
from crewai.task import Task
|
||||||
from crewai.tools.base_tool import BaseTool
|
from crewai.tools.base_tool import BaseTool
|
||||||
|
|
||||||
@@ -37,61 +38,61 @@ class OpenAICompletion(BaseLLM):
|
|||||||
offering native structured outputs, function calling, and streaming support.
|
offering native structured outputs, function calling, and streaming support.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(
|
# Client configuration fields
|
||||||
self,
|
organization: str | None = Field(None, description="OpenAI organization ID")
|
||||||
model: str = "gpt-4o",
|
project: str | None = Field(None, description="OpenAI project ID")
|
||||||
api_key: str | None = None,
|
max_retries: int = Field(2, description="Maximum number of retries")
|
||||||
base_url: str | None = None,
|
default_headers: dict[str, str] | None = Field(
|
||||||
organization: str | None = None,
|
None, description="Default headers for requests"
|
||||||
project: str | None = None,
|
|
||||||
timeout: float | None = None,
|
|
||||||
max_retries: int = 2,
|
|
||||||
default_headers: dict[str, str] | None = None,
|
|
||||||
default_query: dict[str, Any] | None = None,
|
|
||||||
client_params: dict[str, Any] | None = None,
|
|
||||||
temperature: float | None = None,
|
|
||||||
top_p: float | None = None,
|
|
||||||
frequency_penalty: float | None = None,
|
|
||||||
presence_penalty: float | None = None,
|
|
||||||
max_tokens: int | None = None,
|
|
||||||
max_completion_tokens: int | None = None,
|
|
||||||
seed: int | None = None,
|
|
||||||
stream: bool = False,
|
|
||||||
response_format: dict[str, Any] | type[BaseModel] | None = None,
|
|
||||||
logprobs: bool | None = None,
|
|
||||||
top_logprobs: int | None = None,
|
|
||||||
reasoning_effort: str | None = None,
|
|
||||||
provider: str | None = None,
|
|
||||||
interceptor: BaseInterceptor[httpx.Request, httpx.Response] | None = None,
|
|
||||||
**kwargs: Any,
|
|
||||||
) -> None:
|
|
||||||
"""Initialize OpenAI chat completion client."""
|
|
||||||
|
|
||||||
if provider is None:
|
|
||||||
provider = kwargs.pop("provider", "openai")
|
|
||||||
|
|
||||||
self.interceptor = interceptor
|
|
||||||
# Client configuration attributes
|
|
||||||
self.organization = organization
|
|
||||||
self.project = project
|
|
||||||
self.max_retries = max_retries
|
|
||||||
self.default_headers = default_headers
|
|
||||||
self.default_query = default_query
|
|
||||||
self.client_params = client_params
|
|
||||||
self.timeout = timeout
|
|
||||||
self.base_url = base_url
|
|
||||||
self.api_base = kwargs.pop("api_base", None)
|
|
||||||
|
|
||||||
super().__init__(
|
|
||||||
model=model,
|
|
||||||
temperature=temperature,
|
|
||||||
api_key=api_key or os.getenv("OPENAI_API_KEY"),
|
|
||||||
base_url=base_url,
|
|
||||||
timeout=timeout,
|
|
||||||
provider=provider,
|
|
||||||
**kwargs,
|
|
||||||
)
|
)
|
||||||
|
default_query: dict[str, Any] | None = Field(
|
||||||
|
None, description="Default query parameters"
|
||||||
|
)
|
||||||
|
client_params: dict[str, Any] | None = Field(
|
||||||
|
None, description="Additional client parameters"
|
||||||
|
)
|
||||||
|
timeout: float | None = Field(None, description="Request timeout")
|
||||||
|
api_base: str | None = Field(None, description="API base URL (deprecated)")
|
||||||
|
|
||||||
|
# Completion parameters
|
||||||
|
top_p: float | None = Field(None, description="Top-p sampling parameter")
|
||||||
|
frequency_penalty: float | None = Field(None, description="Frequency penalty")
|
||||||
|
presence_penalty: float | None = Field(None, description="Presence penalty")
|
||||||
|
max_tokens: int | None = Field(None, description="Maximum tokens")
|
||||||
|
max_completion_tokens: int | None = Field(
|
||||||
|
None, description="Maximum completion tokens"
|
||||||
|
)
|
||||||
|
seed: int | None = Field(None, description="Random seed")
|
||||||
|
stream: bool = Field(False, description="Enable streaming")
|
||||||
|
response_format: dict[str, Any] | type[BaseModel] | None = Field(
|
||||||
|
None, description="Response format"
|
||||||
|
)
|
||||||
|
logprobs: bool | None = Field(None, description="Return log probabilities")
|
||||||
|
top_logprobs: int | None = Field(
|
||||||
|
None, description="Number of top log probabilities"
|
||||||
|
)
|
||||||
|
reasoning_effort: str | None = Field(None, description="Reasoning effort level")
|
||||||
|
|
||||||
|
# Internal state
|
||||||
|
client: OpenAI = Field(
|
||||||
|
default_factory=OpenAI, exclude=True, description="OpenAI client instance"
|
||||||
|
)
|
||||||
|
is_o1_model: bool = Field(False, description="Whether this is an O1 model")
|
||||||
|
is_gpt4_model: bool = Field(False, description="Whether this is a GPT-4 model")
|
||||||
|
|
||||||
|
def model_post_init(self, __context: Any) -> None:
|
||||||
|
"""Initialize OpenAI client after model initialization.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
__context: Pydantic context
|
||||||
|
"""
|
||||||
|
super().model_post_init(__context)
|
||||||
|
|
||||||
|
# Set API key from environment if not provided
|
||||||
|
if self.api_key is None:
|
||||||
|
self.api_key = os.getenv("OPENAI_API_KEY")
|
||||||
|
|
||||||
|
# Initialize client
|
||||||
client_config = self._get_client_params()
|
client_config = self._get_client_params()
|
||||||
if self.interceptor:
|
if self.interceptor:
|
||||||
transport = HTTPTransport(interceptor=self.interceptor)
|
transport = HTTPTransport(interceptor=self.interceptor)
|
||||||
@@ -100,20 +101,9 @@ class OpenAICompletion(BaseLLM):
|
|||||||
|
|
||||||
self.client = OpenAI(**client_config)
|
self.client = OpenAI(**client_config)
|
||||||
|
|
||||||
# Completion parameters
|
# Set model flags
|
||||||
self.top_p = top_p
|
self.is_o1_model = "o1" in self.model.lower()
|
||||||
self.frequency_penalty = frequency_penalty
|
self.is_gpt4_model = "gpt-4" in self.model.lower()
|
||||||
self.presence_penalty = presence_penalty
|
|
||||||
self.max_tokens = max_tokens
|
|
||||||
self.max_completion_tokens = max_completion_tokens
|
|
||||||
self.seed = seed
|
|
||||||
self.stream = stream
|
|
||||||
self.response_format = response_format
|
|
||||||
self.logprobs = logprobs
|
|
||||||
self.top_logprobs = top_logprobs
|
|
||||||
self.reasoning_effort = reasoning_effort
|
|
||||||
self.is_o1_model = "o1" in model.lower()
|
|
||||||
self.is_gpt4_model = "gpt-4" in model.lower()
|
|
||||||
|
|
||||||
def _get_client_params(self) -> dict[str, Any]:
|
def _get_client_params(self) -> dict[str, Any]:
|
||||||
"""Get OpenAI client parameters."""
|
"""Get OpenAI client parameters."""
|
||||||
@@ -268,7 +258,6 @@ class OpenAICompletion(BaseLLM):
|
|||||||
self, tools: list[dict[str, BaseTool]]
|
self, tools: list[dict[str, BaseTool]]
|
||||||
) -> list[dict[str, Any]]:
|
) -> list[dict[str, Any]]:
|
||||||
"""Convert CrewAI tool format to OpenAI function calling format."""
|
"""Convert CrewAI tool format to OpenAI function calling format."""
|
||||||
from crewai.llms.providers.utils.common import safe_tool_conversion
|
|
||||||
|
|
||||||
openai_tools = []
|
openai_tools = []
|
||||||
|
|
||||||
@@ -560,7 +549,6 @@ class OpenAICompletion(BaseLLM):
|
|||||||
|
|
||||||
def get_context_window_size(self) -> int:
|
def get_context_window_size(self) -> int:
|
||||||
"""Get the context window size for the model."""
|
"""Get the context window size for the model."""
|
||||||
from crewai.llm import CONTEXT_WINDOW_USAGE_RATIO, LLM_CONTEXT_WINDOW_SIZES
|
|
||||||
|
|
||||||
min_context = 1024
|
min_context = 1024
|
||||||
max_context = 2097152
|
max_context = 2097152
|
||||||
@@ -1 +0,0 @@
|
|||||||
"""Third-party LLM implementations for crewAI."""
|
|
||||||
@@ -4,7 +4,7 @@ from pydantic import BaseModel, Field
|
|||||||
|
|
||||||
from crewai.agent import Agent
|
from crewai.agent import Agent
|
||||||
from crewai.lite_agent_output import LiteAgentOutput
|
from crewai.lite_agent_output import LiteAgentOutput
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
from crewai.tasks.task_output import TaskOutput
|
from crewai.tasks.task_output import TaskOutput
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ from crewai.agents.parser import (
|
|||||||
parse,
|
parse,
|
||||||
)
|
)
|
||||||
from crewai.cli.config import Settings
|
from crewai.cli.config import Settings
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
from crewai.tools import BaseTool as CrewAITool
|
from crewai.tools import BaseTool as CrewAITool
|
||||||
from crewai.tools.base_tool import BaseTool
|
from crewai.tools.base_tool import BaseTool
|
||||||
from crewai.tools.structured_tool import CrewStructuredTool
|
from crewai.tools.structured_tool import CrewStructuredTool
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ if TYPE_CHECKING:
|
|||||||
from crewai.agent import Agent
|
from crewai.agent import Agent
|
||||||
from crewai.agents.agent_builder.base_agent import BaseAgent
|
from crewai.agents.agent_builder.base_agent import BaseAgent
|
||||||
from crewai.llm import LLM
|
from crewai.llm import LLM
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
|
|
||||||
_JSON_PATTERN: Final[re.Pattern[str]] = re.compile(r"({.*})", re.DOTALL)
|
_JSON_PATTERN: Final[re.Pattern[str]] = re.compile(r"({.*})", re.DOTALL)
|
||||||
_I18N = get_i18n()
|
_I18N = get_i18n()
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ from rich.table import Table
|
|||||||
from crewai.agent import Agent
|
from crewai.agent import Agent
|
||||||
from crewai.events.event_bus import crewai_event_bus
|
from crewai.events.event_bus import crewai_event_bus
|
||||||
from crewai.events.types.crew_events import CrewTestResultEvent
|
from crewai.events.types.crew_events import CrewTestResultEvent
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
from crewai.task import Task
|
from crewai.task import Task
|
||||||
from crewai.tasks.task_output import TaskOutput
|
from crewai.tasks.task_output import TaskOutput
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from crewai.utilities.logger_utils import suppress_warnings
|
|||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from crewai.agent import Agent
|
from crewai.agent import Agent
|
||||||
from crewai.llm import LLM
|
from crewai.llm import LLM
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
from crewai.utilities.types import LLMMessage
|
from crewai.utilities.types import LLMMessage
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from typing import Any, Final
|
|||||||
|
|
||||||
from crewai.cli.constants import DEFAULT_LLM_MODEL, ENV_VARS, LITELLM_PARAMS
|
from crewai.cli.constants import DEFAULT_LLM_MODEL, ENV_VARS, LITELLM_PARAMS
|
||||||
from crewai.llm import LLM
|
from crewai.llm import LLM
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import logging
|
|||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
|
|
||||||
from crewai.agent import Agent
|
from crewai.agent import Agent
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
from crewai.task import Task
|
from crewai.task import Task
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ if TYPE_CHECKING:
|
|||||||
from crewai.agent import Agent
|
from crewai.agent import Agent
|
||||||
from crewai.agents.agent_builder.base_agent import BaseAgent
|
from crewai.agents.agent_builder.base_agent import BaseAgent
|
||||||
from crewai.llm import LLM
|
from crewai.llm import LLM
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
from crewai.task import Task
|
from crewai.task import Task
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ from crewai.knowledge.knowledge_config import KnowledgeConfig
|
|||||||
from crewai.knowledge.source.base_knowledge_source import BaseKnowledgeSource
|
from crewai.knowledge.source.base_knowledge_source import BaseKnowledgeSource
|
||||||
from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
|
from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
|
||||||
from crewai.llm import LLM
|
from crewai.llm import LLM
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
from crewai.process import Process
|
from crewai.process import Process
|
||||||
from crewai.tools.tool_calling import InstructorToolCalling
|
from crewai.tools.tool_calling import InstructorToolCalling
|
||||||
from crewai.tools.tool_usage import ToolUsage
|
from crewai.tools.tool_usage import ToolUsage
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from crewai.events.types.agent_events import LiteAgentExecutionStartedEvent
|
|||||||
from crewai.events.types.tool_usage_events import ToolUsageStartedEvent
|
from crewai.events.types.tool_usage_events import ToolUsageStartedEvent
|
||||||
from crewai.lite_agent import LiteAgent
|
from crewai.lite_agent import LiteAgent
|
||||||
from crewai.lite_agent_output import LiteAgentOutput
|
from crewai.lite_agent_output import LiteAgentOutput
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
|||||||
@@ -590,7 +590,7 @@ interactions:
|
|||||||
"<function BaseTool.<lambda> at 0x107389260>", "result_as_answer": "False",
|
"<function BaseTool.<lambda> at 0x107389260>", "result_as_answer": "False",
|
||||||
"max_usage_count": "None", "current_usage_count": "0"}], "max_iter": 2, "agent_executor":
|
"max_usage_count": "None", "current_usage_count": "0"}], "max_iter": 2, "agent_executor":
|
||||||
"<crewai.agents.crew_agent_executor.CrewAgentExecutor object at 0x130de6540>",
|
"<crewai.agents.crew_agent_executor.CrewAgentExecutor object at 0x130de6540>",
|
||||||
"llm": "<crewai.llms.providers.openai.completion.OpenAICompletion object at
|
"llm": "<crewai.llm.providers.openai.completion.OpenAICompletion object at
|
||||||
0x130db6de0>", "crew": {"parent_flow": null, "name": "crew", "cache": true,
|
0x130db6de0>", "crew": {"parent_flow": null, "name": "crew", "cache": true,
|
||||||
"tasks": ["{''used_tools'': 0, ''tools_errors'': 0, ''delegations'': 0, ''i18n'':
|
"tasks": ["{''used_tools'': 0, ''tools_errors'': 0, ''delegations'': 0, ''i18n'':
|
||||||
{''prompt_file'': None}, ''name'': None, ''prompt_context'': '''', ''description'':
|
{''prompt_file'': None}, ''name'': None, ''prompt_context'': '''', ''description'':
|
||||||
@@ -605,7 +605,7 @@ interactions:
|
|||||||
''description_updated'': False, ''cache_function'': <function BaseTool.<lambda>
|
''description_updated'': False, ''cache_function'': <function BaseTool.<lambda>
|
||||||
at 0x107389260>, ''result_as_answer'': False, ''max_usage_count'': None, ''current_usage_count'':
|
at 0x107389260>, ''result_as_answer'': False, ''max_usage_count'': None, ''current_usage_count'':
|
||||||
0}], ''max_iter'': 2, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
0}], ''max_iter'': 2, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x130de6540>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x130de6540>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x130db6de0>, ''crew'': Crew(id=991ac83f-9a29-411f-b0a0-0a335c7a2d0e,
|
object at 0x130db6de0>, ''crew'': Crew(id=991ac83f-9a29-411f-b0a0-0a335c7a2d0e,
|
||||||
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -634,7 +634,7 @@ interactions:
|
|||||||
''abc.Learn_About_Ai''>, ''description_updated'': False, ''cache_function'':
|
''abc.Learn_About_Ai''>, ''description_updated'': False, ''cache_function'':
|
||||||
<function BaseTool.<lambda> at 0x107389260>, ''result_as_answer'': False, ''max_usage_count'':
|
<function BaseTool.<lambda> at 0x107389260>, ''result_as_answer'': False, ''max_usage_count'':
|
||||||
None, ''current_usage_count'': 0}], ''max_iter'': 2, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
None, ''current_usage_count'': 0}], ''max_iter'': 2, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x130de6540>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x130de6540>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x130db6de0>, ''crew'': Crew(id=991ac83f-9a29-411f-b0a0-0a335c7a2d0e,
|
object at 0x130db6de0>, ''crew'': Crew(id=991ac83f-9a29-411f-b0a0-0a335c7a2d0e,
|
||||||
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -657,7 +657,7 @@ interactions:
|
|||||||
{"fingerprint": {"metadata": "{}"}}, "callbacks": [], "adapted_agent": false,
|
{"fingerprint": {"metadata": "{}"}}, "callbacks": [], "adapted_agent": false,
|
||||||
"knowledge_config": null, "max_execution_time": null, "agent_ops_agent_name":
|
"knowledge_config": null, "max_execution_time": null, "agent_ops_agent_name":
|
||||||
"test role", "agent_ops_agent_id": null, "step_callback": null, "use_system_prompt":
|
"test role", "agent_ops_agent_id": null, "step_callback": null, "use_system_prompt":
|
||||||
true, "function_calling_llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
|
true, "function_calling_llm": "<crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x130db7020>", "system_template": null, "prompt_template": null, "response_template":
|
object at 0x130db7020>", "system_template": null, "prompt_template": null, "response_template":
|
||||||
null, "allow_code_execution": false, "respect_context_window": true, "max_retry_limit":
|
null, "allow_code_execution": false, "respect_context_window": true, "max_retry_limit":
|
||||||
2, "multimodal": false, "inject_date": false, "date_format": "%Y-%m-%d", "code_execution_mode":
|
2, "multimodal": false, "inject_date": false, "date_format": "%Y-%m-%d", "code_execution_mode":
|
||||||
@@ -1068,7 +1068,7 @@ interactions:
|
|||||||
"<function BaseTool.<lambda> at 0x107e394e0>", "result_as_answer": "False",
|
"<function BaseTool.<lambda> at 0x107e394e0>", "result_as_answer": "False",
|
||||||
"max_usage_count": "None", "current_usage_count": "0"}], "max_iter": 2, "agent_executor":
|
"max_usage_count": "None", "current_usage_count": "0"}], "max_iter": 2, "agent_executor":
|
||||||
"<crewai.agents.crew_agent_executor.CrewAgentExecutor object at 0x13b37c980>",
|
"<crewai.agents.crew_agent_executor.CrewAgentExecutor object at 0x13b37c980>",
|
||||||
"llm": "<crewai.llms.providers.openai.completion.OpenAICompletion object at
|
"llm": "<crewai.llm.providers.openai.completion.OpenAICompletion object at
|
||||||
0x13b7563c0>", "crew": {"parent_flow": null, "name": "crew", "cache": true,
|
0x13b7563c0>", "crew": {"parent_flow": null, "name": "crew", "cache": true,
|
||||||
"tasks": ["{''used_tools'': 0, ''tools_errors'': 0, ''delegations'': 0, ''i18n'':
|
"tasks": ["{''used_tools'': 0, ''tools_errors'': 0, ''delegations'': 0, ''i18n'':
|
||||||
{''prompt_file'': None}, ''name'': None, ''prompt_context'': '''', ''description'':
|
{''prompt_file'': None}, ''name'': None, ''prompt_context'': '''', ''description'':
|
||||||
@@ -1083,7 +1083,7 @@ interactions:
|
|||||||
''description_updated'': False, ''cache_function'': <function BaseTool.<lambda>
|
''description_updated'': False, ''cache_function'': <function BaseTool.<lambda>
|
||||||
at 0x107e394e0>, ''result_as_answer'': False, ''max_usage_count'': None, ''current_usage_count'':
|
at 0x107e394e0>, ''result_as_answer'': False, ''max_usage_count'': None, ''current_usage_count'':
|
||||||
0}], ''max_iter'': 2, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
0}], ''max_iter'': 2, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x13b37c980>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x13b37c980>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x13b7563c0>, ''crew'': Crew(id=f38365e9-3206-45b6-8754-950cb03fe57e,
|
object at 0x13b7563c0>, ''crew'': Crew(id=f38365e9-3206-45b6-8754-950cb03fe57e,
|
||||||
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -1112,7 +1112,7 @@ interactions:
|
|||||||
''abc.Learn_About_Ai''>, ''description_updated'': False, ''cache_function'':
|
''abc.Learn_About_Ai''>, ''description_updated'': False, ''cache_function'':
|
||||||
<function BaseTool.<lambda> at 0x107e394e0>, ''result_as_answer'': False, ''max_usage_count'':
|
<function BaseTool.<lambda> at 0x107e394e0>, ''result_as_answer'': False, ''max_usage_count'':
|
||||||
None, ''current_usage_count'': 0}], ''max_iter'': 2, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
None, ''current_usage_count'': 0}], ''max_iter'': 2, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x13b37c980>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x13b37c980>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x13b7563c0>, ''crew'': Crew(id=f38365e9-3206-45b6-8754-950cb03fe57e,
|
object at 0x13b7563c0>, ''crew'': Crew(id=f38365e9-3206-45b6-8754-950cb03fe57e,
|
||||||
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -1135,7 +1135,7 @@ interactions:
|
|||||||
{"fingerprint": {"metadata": "{}"}}, "callbacks": [], "adapted_agent": false,
|
{"fingerprint": {"metadata": "{}"}}, "callbacks": [], "adapted_agent": false,
|
||||||
"knowledge_config": null, "max_execution_time": null, "agent_ops_agent_name":
|
"knowledge_config": null, "max_execution_time": null, "agent_ops_agent_name":
|
||||||
"test role", "agent_ops_agent_id": null, "step_callback": null, "use_system_prompt":
|
"test role", "agent_ops_agent_id": null, "step_callback": null, "use_system_prompt":
|
||||||
true, "function_calling_llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
|
true, "function_calling_llm": "<crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x13b756690>", "system_template": null, "prompt_template": null, "response_template":
|
object at 0x13b756690>", "system_template": null, "prompt_template": null, "response_template":
|
||||||
null, "allow_code_execution": false, "respect_context_window": true, "max_retry_limit":
|
null, "allow_code_execution": false, "respect_context_window": true, "max_retry_limit":
|
||||||
2, "multimodal": false, "inject_date": false, "date_format": "%Y-%m-%d", "code_execution_mode":
|
2, "multimodal": false, "inject_date": false, "date_format": "%Y-%m-%d", "code_execution_mode":
|
||||||
|
|||||||
@@ -1274,7 +1274,7 @@ interactions:
|
|||||||
"b6cf723e-04c8-40c5-a927-e2078cfbae59", "role": "test role", "goal": "test goal",
|
"b6cf723e-04c8-40c5-a927-e2078cfbae59", "role": "test role", "goal": "test goal",
|
||||||
"backstory": "test backstory", "cache": true, "verbose": true, "max_rpm": null,
|
"backstory": "test backstory", "cache": true, "verbose": true, "max_rpm": null,
|
||||||
"allow_delegation": false, "tools": [], "max_iter": 6, "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
"allow_delegation": false, "tools": [], "max_iter": 6, "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x13ab0abd0>", "llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x13ab0abd0>", "llm": "<crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x13ab0b050>", "crew": {"parent_flow": null, "name": "crew", "cache":
|
object at 0x13ab0b050>", "crew": {"parent_flow": null, "name": "crew", "cache":
|
||||||
true, "tasks": ["{''used_tools'': 0, ''tools_errors'': 0, ''delegations'': 0,
|
true, "tasks": ["{''used_tools'': 0, ''tools_errors'': 0, ''delegations'': 0,
|
||||||
''i18n'': {''prompt_file'': None}, ''name'': None, ''prompt_context'': '''',
|
''i18n'': {''prompt_file'': None}, ''name'': None, ''prompt_context'': '''',
|
||||||
@@ -1285,7 +1285,7 @@ interactions:
|
|||||||
''test role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
''test role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
||||||
True, ''verbose'': True, ''max_rpm'': None, ''allow_delegation'': False, ''tools'':
|
True, ''verbose'': True, ''max_rpm'': None, ''allow_delegation'': False, ''tools'':
|
||||||
[], ''max_iter'': 6, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
[], ''max_iter'': 6, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x13ab0abd0>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x13ab0abd0>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x13ab0b050>, ''crew'': Crew(id=004dd8a0-dd87-43fa-bdc8-07f449808028,
|
object at 0x13ab0b050>, ''crew'': Crew(id=004dd8a0-dd87-43fa-bdc8-07f449808028,
|
||||||
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -1309,7 +1309,7 @@ interactions:
|
|||||||
role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
||||||
True, ''verbose'': True, ''max_rpm'': None, ''allow_delegation'': False, ''tools'':
|
True, ''verbose'': True, ''max_rpm'': None, ''allow_delegation'': False, ''tools'':
|
||||||
[], ''max_iter'': 6, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
[], ''max_iter'': 6, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x13ab0abd0>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x13ab0abd0>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x13ab0b050>, ''crew'': Crew(id=004dd8a0-dd87-43fa-bdc8-07f449808028,
|
object at 0x13ab0b050>, ''crew'': Crew(id=004dd8a0-dd87-43fa-bdc8-07f449808028,
|
||||||
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -1491,7 +1491,7 @@ interactions:
|
|||||||
"goal": "test goal", "backstory": "test backstory", "cache": true, "verbose":
|
"goal": "test goal", "backstory": "test backstory", "cache": true, "verbose":
|
||||||
true, "max_rpm": null, "allow_delegation": false, "tools": [], "max_iter": 6,
|
true, "max_rpm": null, "allow_delegation": false, "tools": [], "max_iter": 6,
|
||||||
"agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor object
|
"agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor object
|
||||||
at 0x13ab0abd0>", "llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
|
at 0x13ab0abd0>", "llm": "<crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x13ab0b050>", "crew": {"parent_flow": null, "name": "crew", "cache":
|
object at 0x13ab0b050>", "crew": {"parent_flow": null, "name": "crew", "cache":
|
||||||
true, "tasks": ["{''used_tools'': 2, ''tools_errors'': 0, ''delegations'': 0,
|
true, "tasks": ["{''used_tools'': 2, ''tools_errors'': 0, ''delegations'': 0,
|
||||||
''i18n'': {''prompt_file'': None}, ''name'': None, ''prompt_context'': '''',
|
''i18n'': {''prompt_file'': None}, ''name'': None, ''prompt_context'': '''',
|
||||||
@@ -1502,7 +1502,7 @@ interactions:
|
|||||||
''test role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
''test role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
||||||
True, ''verbose'': True, ''max_rpm'': None, ''allow_delegation'': False, ''tools'':
|
True, ''verbose'': True, ''max_rpm'': None, ''allow_delegation'': False, ''tools'':
|
||||||
[], ''max_iter'': 6, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
[], ''max_iter'': 6, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x13ab0abd0>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x13ab0abd0>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x13ab0b050>, ''crew'': Crew(id=004dd8a0-dd87-43fa-bdc8-07f449808028,
|
object at 0x13ab0b050>, ''crew'': Crew(id=004dd8a0-dd87-43fa-bdc8-07f449808028,
|
||||||
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -1528,7 +1528,7 @@ interactions:
|
|||||||
role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
||||||
True, ''verbose'': True, ''max_rpm'': None, ''allow_delegation'': False, ''tools'':
|
True, ''verbose'': True, ''max_rpm'': None, ''allow_delegation'': False, ''tools'':
|
||||||
[], ''max_iter'': 6, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
[], ''max_iter'': 6, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x13ab0abd0>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x13ab0abd0>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x13ab0b050>, ''crew'': Crew(id=004dd8a0-dd87-43fa-bdc8-07f449808028,
|
object at 0x13ab0b050>, ''crew'': Crew(id=004dd8a0-dd87-43fa-bdc8-07f449808028,
|
||||||
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -1660,7 +1660,7 @@ interactions:
|
|||||||
role", "goal": "test goal", "backstory": "test backstory", "cache": true, "verbose":
|
role", "goal": "test goal", "backstory": "test backstory", "cache": true, "verbose":
|
||||||
true, "max_rpm": null, "allow_delegation": false, "tools": [], "max_iter": 6,
|
true, "max_rpm": null, "allow_delegation": false, "tools": [], "max_iter": 6,
|
||||||
"agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor object
|
"agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor object
|
||||||
at 0x13ab0abd0>", "llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
|
at 0x13ab0abd0>", "llm": "<crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x13ab0b050>", "crew": {"parent_flow": null, "name": "crew", "cache":
|
object at 0x13ab0b050>", "crew": {"parent_flow": null, "name": "crew", "cache":
|
||||||
true, "tasks": ["{''used_tools'': 3, ''tools_errors'': 0, ''delegations'': 0,
|
true, "tasks": ["{''used_tools'': 3, ''tools_errors'': 0, ''delegations'': 0,
|
||||||
''i18n'': {''prompt_file'': None}, ''name'': None, ''prompt_context'': '''',
|
''i18n'': {''prompt_file'': None}, ''name'': None, ''prompt_context'': '''',
|
||||||
@@ -1671,7 +1671,7 @@ interactions:
|
|||||||
''test role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
''test role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
||||||
True, ''verbose'': True, ''max_rpm'': None, ''allow_delegation'': False, ''tools'':
|
True, ''verbose'': True, ''max_rpm'': None, ''allow_delegation'': False, ''tools'':
|
||||||
[], ''max_iter'': 6, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
[], ''max_iter'': 6, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x13ab0abd0>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x13ab0abd0>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x13ab0b050>, ''crew'': Crew(id=004dd8a0-dd87-43fa-bdc8-07f449808028,
|
object at 0x13ab0b050>, ''crew'': Crew(id=004dd8a0-dd87-43fa-bdc8-07f449808028,
|
||||||
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -1698,7 +1698,7 @@ interactions:
|
|||||||
role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
||||||
True, ''verbose'': True, ''max_rpm'': None, ''allow_delegation'': False, ''tools'':
|
True, ''verbose'': True, ''max_rpm'': None, ''allow_delegation'': False, ''tools'':
|
||||||
[], ''max_iter'': 6, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
[], ''max_iter'': 6, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x13ab0abd0>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x13ab0abd0>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x13ab0b050>, ''crew'': Crew(id=004dd8a0-dd87-43fa-bdc8-07f449808028,
|
object at 0x13ab0b050>, ''crew'': Crew(id=004dd8a0-dd87-43fa-bdc8-07f449808028,
|
||||||
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -1839,7 +1839,7 @@ interactions:
|
|||||||
"goal": "test goal", "backstory": "test backstory", "cache": true, "verbose":
|
"goal": "test goal", "backstory": "test backstory", "cache": true, "verbose":
|
||||||
true, "max_rpm": null, "allow_delegation": false, "tools": [], "max_iter": 6,
|
true, "max_rpm": null, "allow_delegation": false, "tools": [], "max_iter": 6,
|
||||||
"agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor object
|
"agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor object
|
||||||
at 0x13ab0abd0>", "llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
|
at 0x13ab0abd0>", "llm": "<crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x13ab0b050>", "crew": {"parent_flow": null, "name": "crew", "cache":
|
object at 0x13ab0b050>", "crew": {"parent_flow": null, "name": "crew", "cache":
|
||||||
true, "tasks": ["{''used_tools'': 4, ''tools_errors'': 0, ''delegations'': 0,
|
true, "tasks": ["{''used_tools'': 4, ''tools_errors'': 0, ''delegations'': 0,
|
||||||
''i18n'': {''prompt_file'': None}, ''name'': None, ''prompt_context'': '''',
|
''i18n'': {''prompt_file'': None}, ''name'': None, ''prompt_context'': '''',
|
||||||
@@ -1850,7 +1850,7 @@ interactions:
|
|||||||
''test role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
''test role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
||||||
True, ''verbose'': True, ''max_rpm'': None, ''allow_delegation'': False, ''tools'':
|
True, ''verbose'': True, ''max_rpm'': None, ''allow_delegation'': False, ''tools'':
|
||||||
[], ''max_iter'': 6, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
[], ''max_iter'': 6, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x13ab0abd0>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x13ab0abd0>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x13ab0b050>, ''crew'': Crew(id=004dd8a0-dd87-43fa-bdc8-07f449808028,
|
object at 0x13ab0b050>, ''crew'': Crew(id=004dd8a0-dd87-43fa-bdc8-07f449808028,
|
||||||
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -1879,7 +1879,7 @@ interactions:
|
|||||||
role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
||||||
True, ''verbose'': True, ''max_rpm'': None, ''allow_delegation'': False, ''tools'':
|
True, ''verbose'': True, ''max_rpm'': None, ''allow_delegation'': False, ''tools'':
|
||||||
[], ''max_iter'': 6, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
[], ''max_iter'': 6, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x13ab0abd0>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x13ab0abd0>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x13ab0b050>, ''crew'': Crew(id=004dd8a0-dd87-43fa-bdc8-07f449808028,
|
object at 0x13ab0b050>, ''crew'': Crew(id=004dd8a0-dd87-43fa-bdc8-07f449808028,
|
||||||
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -2029,7 +2029,7 @@ interactions:
|
|||||||
"goal": "test goal", "backstory": "test backstory", "cache": true, "verbose":
|
"goal": "test goal", "backstory": "test backstory", "cache": true, "verbose":
|
||||||
true, "max_rpm": null, "allow_delegation": false, "tools": [], "max_iter": 6,
|
true, "max_rpm": null, "allow_delegation": false, "tools": [], "max_iter": 6,
|
||||||
"agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor object
|
"agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor object
|
||||||
at 0x13ab0abd0>", "llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
|
at 0x13ab0abd0>", "llm": "<crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x13ab0b050>", "crew": {"parent_flow": null, "name": "crew", "cache":
|
object at 0x13ab0b050>", "crew": {"parent_flow": null, "name": "crew", "cache":
|
||||||
true, "tasks": ["{''used_tools'': 5, ''tools_errors'': 0, ''delegations'': 0,
|
true, "tasks": ["{''used_tools'': 5, ''tools_errors'': 0, ''delegations'': 0,
|
||||||
''i18n'': {''prompt_file'': None}, ''name'': None, ''prompt_context'': '''',
|
''i18n'': {''prompt_file'': None}, ''name'': None, ''prompt_context'': '''',
|
||||||
@@ -2040,7 +2040,7 @@ interactions:
|
|||||||
''test role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
''test role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
||||||
True, ''verbose'': True, ''max_rpm'': None, ''allow_delegation'': False, ''tools'':
|
True, ''verbose'': True, ''max_rpm'': None, ''allow_delegation'': False, ''tools'':
|
||||||
[], ''max_iter'': 6, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
[], ''max_iter'': 6, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x13ab0abd0>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x13ab0abd0>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x13ab0b050>, ''crew'': Crew(id=004dd8a0-dd87-43fa-bdc8-07f449808028,
|
object at 0x13ab0b050>, ''crew'': Crew(id=004dd8a0-dd87-43fa-bdc8-07f449808028,
|
||||||
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -2070,7 +2070,7 @@ interactions:
|
|||||||
role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
||||||
True, ''verbose'': True, ''max_rpm'': None, ''allow_delegation'': False, ''tools'':
|
True, ''verbose'': True, ''max_rpm'': None, ''allow_delegation'': False, ''tools'':
|
||||||
[], ''max_iter'': 6, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
[], ''max_iter'': 6, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x13ab0abd0>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x13ab0abd0>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x13ab0b050>, ''crew'': Crew(id=004dd8a0-dd87-43fa-bdc8-07f449808028,
|
object at 0x13ab0b050>, ''crew'': Crew(id=004dd8a0-dd87-43fa-bdc8-07f449808028,
|
||||||
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
|
|||||||
@@ -1082,7 +1082,7 @@ interactions:
|
|||||||
"role": "test role", "goal": "test goal", "backstory": "test backstory", "cache":
|
"role": "test role", "goal": "test goal", "backstory": "test backstory", "cache":
|
||||||
true, "verbose": true, "max_rpm": 10, "allow_delegation": false, "tools": [],
|
true, "verbose": true, "max_rpm": 10, "allow_delegation": false, "tools": [],
|
||||||
"max_iter": 4, "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
"max_iter": 4, "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x133d41100>", "llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x133d41100>", "llm": "<crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x133d40500>", "crew": {"parent_flow": null, "name": "crew", "cache":
|
object at 0x133d40500>", "crew": {"parent_flow": null, "name": "crew", "cache":
|
||||||
true, "tasks": ["{''used_tools'': 0, ''tools_errors'': 0, ''delegations'': 0,
|
true, "tasks": ["{''used_tools'': 0, ''tools_errors'': 0, ''delegations'': 0,
|
||||||
''i18n'': {''prompt_file'': None}, ''name'': None, ''prompt_context'': '''',
|
''i18n'': {''prompt_file'': None}, ''name'': None, ''prompt_context'': '''',
|
||||||
@@ -1093,7 +1093,7 @@ interactions:
|
|||||||
''test role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
''test role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
||||||
True, ''verbose'': True, ''max_rpm'': 10, ''allow_delegation'': False, ''tools'':
|
True, ''verbose'': True, ''max_rpm'': 10, ''allow_delegation'': False, ''tools'':
|
||||||
[], ''max_iter'': 4, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
[], ''max_iter'': 4, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x133d41100>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x133d41100>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x133d40500>, ''crew'': Crew(id=4c6d502e-f6ec-446a-8f76-644563c4aa94,
|
object at 0x133d40500>, ''crew'': Crew(id=4c6d502e-f6ec-446a-8f76-644563c4aa94,
|
||||||
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -1117,7 +1117,7 @@ interactions:
|
|||||||
''test role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
''test role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
||||||
True, ''verbose'': True, ''max_rpm'': 10, ''allow_delegation'': False, ''tools'':
|
True, ''verbose'': True, ''max_rpm'': 10, ''allow_delegation'': False, ''tools'':
|
||||||
[], ''max_iter'': 4, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
[], ''max_iter'': 4, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x133d41100>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x133d41100>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x133d40500>, ''crew'': Crew(id=4c6d502e-f6ec-446a-8f76-644563c4aa94,
|
object at 0x133d40500>, ''crew'': Crew(id=4c6d502e-f6ec-446a-8f76-644563c4aa94,
|
||||||
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -1910,7 +1910,7 @@ interactions:
|
|||||||
"role": "test role", "goal": "test goal", "backstory": "test backstory", "cache":
|
"role": "test role", "goal": "test goal", "backstory": "test backstory", "cache":
|
||||||
true, "verbose": true, "max_rpm": 10, "allow_delegation": false, "tools": [],
|
true, "verbose": true, "max_rpm": 10, "allow_delegation": false, "tools": [],
|
||||||
"max_iter": 4, "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
"max_iter": 4, "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x10308d610>", "llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x10308d610>", "llm": "<crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x129201640>", "crew": {"parent_flow": null, "name": "crew", "cache":
|
object at 0x129201640>", "crew": {"parent_flow": null, "name": "crew", "cache":
|
||||||
true, "tasks": ["{''used_tools'': 0, ''tools_errors'': 0, ''delegations'': 0,
|
true, "tasks": ["{''used_tools'': 0, ''tools_errors'': 0, ''delegations'': 0,
|
||||||
''i18n'': {''prompt_file'': None}, ''name'': None, ''prompt_context'': '''',
|
''i18n'': {''prompt_file'': None}, ''name'': None, ''prompt_context'': '''',
|
||||||
@@ -1921,7 +1921,7 @@ interactions:
|
|||||||
''test role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
''test role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
||||||
True, ''verbose'': True, ''max_rpm'': 10, ''allow_delegation'': False, ''tools'':
|
True, ''verbose'': True, ''max_rpm'': 10, ''allow_delegation'': False, ''tools'':
|
||||||
[], ''max_iter'': 4, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
[], ''max_iter'': 4, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x10308d610>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x10308d610>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x129201640>, ''crew'': Crew(id=1a07d718-fed5-49fa-bee2-de2db91c9f33,
|
object at 0x129201640>, ''crew'': Crew(id=1a07d718-fed5-49fa-bee2-de2db91c9f33,
|
||||||
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -1945,7 +1945,7 @@ interactions:
|
|||||||
''test role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
''test role'', ''goal'': ''test goal'', ''backstory'': ''test backstory'', ''cache'':
|
||||||
True, ''verbose'': True, ''max_rpm'': 10, ''allow_delegation'': False, ''tools'':
|
True, ''verbose'': True, ''max_rpm'': 10, ''allow_delegation'': False, ''tools'':
|
||||||
[], ''max_iter'': 4, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
[], ''max_iter'': 4, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x10308d610>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x10308d610>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x129201640>, ''crew'': Crew(id=1a07d718-fed5-49fa-bee2-de2db91c9f33,
|
object at 0x129201640>, ''crew'': Crew(id=1a07d718-fed5-49fa-bee2-de2db91c9f33,
|
||||||
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
|
|||||||
@@ -937,7 +937,7 @@ interactions:
|
|||||||
"description_updated": "False", "cache_function": "<function BaseTool.<lambda>
|
"description_updated": "False", "cache_function": "<function BaseTool.<lambda>
|
||||||
at 0x10614d3a0>", "result_as_answer": "False", "max_usage_count": "None", "current_usage_count":
|
at 0x10614d3a0>", "result_as_answer": "False", "max_usage_count": "None", "current_usage_count":
|
||||||
"0"}], "max_iter": 25, "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
"0"}], "max_iter": 25, "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x10f6c3bc0>", "llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x10f6c3bc0>", "llm": "<crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x10f6c27e0>", "crew": {"parent_flow": null, "name": "crew", "cache":
|
object at 0x10f6c27e0>", "crew": {"parent_flow": null, "name": "crew", "cache":
|
||||||
true, "tasks": ["{''used_tools'': 0, ''tools_errors'': 0, ''delegations'': 0,
|
true, "tasks": ["{''used_tools'': 0, ''tools_errors'': 0, ''delegations'': 0,
|
||||||
''i18n'': {''prompt_file'': None}, ''name'': None, ''prompt_context'': '''',
|
''i18n'': {''prompt_file'': None}, ''name'': None, ''prompt_context'': '''',
|
||||||
@@ -977,7 +977,7 @@ interactions:
|
|||||||
''description_updated'': False, ''cache_function'': <function BaseTool.<lambda>
|
''description_updated'': False, ''cache_function'': <function BaseTool.<lambda>
|
||||||
at 0x10614d3a0>, ''result_as_answer'': False, ''max_usage_count'': None, ''current_usage_count'':
|
at 0x10614d3a0>, ''result_as_answer'': False, ''max_usage_count'': None, ''current_usage_count'':
|
||||||
0}], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
0}], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x10f6c3bc0>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x10f6c3bc0>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x10f6c27e0>, ''crew'': Crew(id=49cbb747-f055-4636-bbca-9e8a450c05f6,
|
object at 0x10f6c27e0>, ''crew'': Crew(id=49cbb747-f055-4636-bbca-9e8a450c05f6,
|
||||||
process=Process.hierarchical, number_of_agents=2, number_of_tasks=1), ''i18n'':
|
process=Process.hierarchical, number_of_agents=2, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -996,7 +996,7 @@ interactions:
|
|||||||
''First Agent'', ''goal'': ''First goal'', ''backstory'': ''First backstory'',
|
''First Agent'', ''goal'': ''First goal'', ''backstory'': ''First backstory'',
|
||||||
''cache'': True, ''verbose'': False, ''max_rpm'': None, ''allow_delegation'':
|
''cache'': True, ''verbose'': False, ''max_rpm'': None, ''allow_delegation'':
|
||||||
False, ''tools'': [], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
False, ''tools'': [], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x11059ca10>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x11059ca10>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x10f6e6ae0>, ''crew'': Crew(id=49cbb747-f055-4636-bbca-9e8a450c05f6,
|
object at 0x10f6e6ae0>, ''crew'': Crew(id=49cbb747-f055-4636-bbca-9e8a450c05f6,
|
||||||
process=Process.hierarchical, number_of_agents=2, number_of_tasks=1), ''i18n'':
|
process=Process.hierarchical, number_of_agents=2, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -1007,7 +1007,7 @@ interactions:
|
|||||||
''role'': ''Second Agent'', ''goal'': ''Second goal'', ''backstory'': ''Second
|
''role'': ''Second Agent'', ''goal'': ''Second goal'', ''backstory'': ''Second
|
||||||
backstory'', ''cache'': True, ''verbose'': False, ''max_rpm'': None, ''allow_delegation'':
|
backstory'', ''cache'': True, ''verbose'': False, ''max_rpm'': None, ''allow_delegation'':
|
||||||
False, ''tools'': [], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
False, ''tools'': [], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x10f6c3500>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x10f6c3500>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x10f6d2000>, ''crew'': Crew(id=49cbb747-f055-4636-bbca-9e8a450c05f6,
|
object at 0x10f6d2000>, ''crew'': Crew(id=49cbb747-f055-4636-bbca-9e8a450c05f6,
|
||||||
process=Process.hierarchical, number_of_agents=2, number_of_tasks=1), ''i18n'':
|
process=Process.hierarchical, number_of_agents=2, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -1017,7 +1017,7 @@ interactions:
|
|||||||
False, ''knowledge_config'': None}"], "process": "hierarchical", "verbose":
|
False, ''knowledge_config'': None}"], "process": "hierarchical", "verbose":
|
||||||
false, "memory": false, "short_term_memory": null, "long_term_memory": null,
|
false, "memory": false, "short_term_memory": null, "long_term_memory": null,
|
||||||
"entity_memory": null, "external_memory": null, "embedder": null, "usage_metrics":
|
"entity_memory": null, "external_memory": null, "embedder": null, "usage_metrics":
|
||||||
null, "manager_llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
|
null, "manager_llm": "<crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x10f6c27e0>", "manager_agent": {"id": "UUID(''b0898472-5e3b-45bb-bd90-05bad0b5a8ce'')",
|
object at 0x10f6c27e0>", "manager_agent": {"id": "UUID(''b0898472-5e3b-45bb-bd90-05bad0b5a8ce'')",
|
||||||
"role": "''Crew Manager''", "goal": "''Manage the team to complete the task
|
"role": "''Crew Manager''", "goal": "''Manage the team to complete the task
|
||||||
in the best way possible.''", "backstory": "\"You are a seasoned manager with
|
in the best way possible.''", "backstory": "\"You are a seasoned manager with
|
||||||
@@ -1053,7 +1053,7 @@ interactions:
|
|||||||
''description_updated'': False, ''cache_function'': <function BaseTool.<lambda>
|
''description_updated'': False, ''cache_function'': <function BaseTool.<lambda>
|
||||||
at 0x10614d3a0>, ''result_as_answer'': False, ''max_usage_count'': None, ''current_usage_count'':
|
at 0x10614d3a0>, ''result_as_answer'': False, ''max_usage_count'': None, ''current_usage_count'':
|
||||||
0}]", "max_iter": "25", "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
0}]", "max_iter": "25", "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x10f6c3bc0>", "llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x10f6c3bc0>", "llm": "<crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x10f6c27e0>", "crew": "Crew(id=49cbb747-f055-4636-bbca-9e8a450c05f6,
|
object at 0x10f6c27e0>", "crew": "Crew(id=49cbb747-f055-4636-bbca-9e8a450c05f6,
|
||||||
process=Process.hierarchical, number_of_agents=2, number_of_tasks=1)", "i18n":
|
process=Process.hierarchical, number_of_agents=2, number_of_tasks=1)", "i18n":
|
||||||
"{''prompt_file'': None}", "cache_handler": "{}", "tools_handler": "<crewai.agents.tools_handler.ToolsHandler
|
"{''prompt_file'': None}", "cache_handler": "{}", "tools_handler": "<crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -1805,7 +1805,7 @@ interactions:
|
|||||||
"description_updated": "False", "cache_function": "<function BaseTool.<lambda>
|
"description_updated": "False", "cache_function": "<function BaseTool.<lambda>
|
||||||
at 0x107e394e0>", "result_as_answer": "False", "max_usage_count": "None", "current_usage_count":
|
at 0x107e394e0>", "result_as_answer": "False", "max_usage_count": "None", "current_usage_count":
|
||||||
"0"}], "max_iter": 25, "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
"0"}], "max_iter": 25, "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x1388bedb0>", "llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x1388bedb0>", "llm": "<crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x1388bf710>", "crew": {"parent_flow": null, "name": "crew", "cache":
|
object at 0x1388bf710>", "crew": {"parent_flow": null, "name": "crew", "cache":
|
||||||
true, "tasks": ["{''used_tools'': 0, ''tools_errors'': 0, ''delegations'': 0,
|
true, "tasks": ["{''used_tools'': 0, ''tools_errors'': 0, ''delegations'': 0,
|
||||||
''i18n'': {''prompt_file'': None}, ''name'': None, ''prompt_context'': '''',
|
''i18n'': {''prompt_file'': None}, ''name'': None, ''prompt_context'': '''',
|
||||||
@@ -1845,7 +1845,7 @@ interactions:
|
|||||||
''description_updated'': False, ''cache_function'': <function BaseTool.<lambda>
|
''description_updated'': False, ''cache_function'': <function BaseTool.<lambda>
|
||||||
at 0x107e394e0>, ''result_as_answer'': False, ''max_usage_count'': None, ''current_usage_count'':
|
at 0x107e394e0>, ''result_as_answer'': False, ''max_usage_count'': None, ''current_usage_count'':
|
||||||
0}], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
0}], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x1388bedb0>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x1388bedb0>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x1388bf710>, ''crew'': Crew(id=4d744f3e-0589-4d1d-b1c1-6aa8b52478ac,
|
object at 0x1388bf710>, ''crew'': Crew(id=4d744f3e-0589-4d1d-b1c1-6aa8b52478ac,
|
||||||
process=Process.hierarchical, number_of_agents=2, number_of_tasks=1), ''i18n'':
|
process=Process.hierarchical, number_of_agents=2, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -1864,7 +1864,7 @@ interactions:
|
|||||||
''First Agent'', ''goal'': ''First goal'', ''backstory'': ''First backstory'',
|
''First Agent'', ''goal'': ''First goal'', ''backstory'': ''First backstory'',
|
||||||
''cache'': True, ''verbose'': False, ''max_rpm'': None, ''allow_delegation'':
|
''cache'': True, ''verbose'': False, ''max_rpm'': None, ''allow_delegation'':
|
||||||
False, ''tools'': [], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
False, ''tools'': [], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x1388d5c70>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x1388d5c70>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x1388bde80>, ''crew'': Crew(id=4d744f3e-0589-4d1d-b1c1-6aa8b52478ac,
|
object at 0x1388bde80>, ''crew'': Crew(id=4d744f3e-0589-4d1d-b1c1-6aa8b52478ac,
|
||||||
process=Process.hierarchical, number_of_agents=2, number_of_tasks=1), ''i18n'':
|
process=Process.hierarchical, number_of_agents=2, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -1875,7 +1875,7 @@ interactions:
|
|||||||
''role'': ''Second Agent'', ''goal'': ''Second goal'', ''backstory'': ''Second
|
''role'': ''Second Agent'', ''goal'': ''Second goal'', ''backstory'': ''Second
|
||||||
backstory'', ''cache'': True, ''verbose'': False, ''max_rpm'': None, ''allow_delegation'':
|
backstory'', ''cache'': True, ''verbose'': False, ''max_rpm'': None, ''allow_delegation'':
|
||||||
False, ''tools'': [], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
False, ''tools'': [], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x1388bf7d0>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x1388bf7d0>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x1388bfb90>, ''crew'': Crew(id=4d744f3e-0589-4d1d-b1c1-6aa8b52478ac,
|
object at 0x1388bfb90>, ''crew'': Crew(id=4d744f3e-0589-4d1d-b1c1-6aa8b52478ac,
|
||||||
process=Process.hierarchical, number_of_agents=2, number_of_tasks=1), ''i18n'':
|
process=Process.hierarchical, number_of_agents=2, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -1885,7 +1885,7 @@ interactions:
|
|||||||
False, ''knowledge_config'': None}"], "process": "hierarchical", "verbose":
|
False, ''knowledge_config'': None}"], "process": "hierarchical", "verbose":
|
||||||
false, "memory": false, "short_term_memory": null, "long_term_memory": null,
|
false, "memory": false, "short_term_memory": null, "long_term_memory": null,
|
||||||
"entity_memory": null, "external_memory": null, "embedder": null, "usage_metrics":
|
"entity_memory": null, "external_memory": null, "embedder": null, "usage_metrics":
|
||||||
null, "manager_llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
|
null, "manager_llm": "<crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x1388bf710>", "manager_agent": {"id": "UUID(''09794b42-447f-4b7a-b634-3a861f457357'')",
|
object at 0x1388bf710>", "manager_agent": {"id": "UUID(''09794b42-447f-4b7a-b634-3a861f457357'')",
|
||||||
"role": "''Crew Manager''", "goal": "''Manage the team to complete the task
|
"role": "''Crew Manager''", "goal": "''Manage the team to complete the task
|
||||||
in the best way possible.''", "backstory": "\"You are a seasoned manager with
|
in the best way possible.''", "backstory": "\"You are a seasoned manager with
|
||||||
@@ -1921,7 +1921,7 @@ interactions:
|
|||||||
''description_updated'': False, ''cache_function'': <function BaseTool.<lambda>
|
''description_updated'': False, ''cache_function'': <function BaseTool.<lambda>
|
||||||
at 0x107e394e0>, ''result_as_answer'': False, ''max_usage_count'': None, ''current_usage_count'':
|
at 0x107e394e0>, ''result_as_answer'': False, ''max_usage_count'': None, ''current_usage_count'':
|
||||||
0}]", "max_iter": "25", "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
0}]", "max_iter": "25", "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x1388bedb0>", "llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x1388bedb0>", "llm": "<crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x1388bf710>", "crew": "Crew(id=4d744f3e-0589-4d1d-b1c1-6aa8b52478ac,
|
object at 0x1388bf710>", "crew": "Crew(id=4d744f3e-0589-4d1d-b1c1-6aa8b52478ac,
|
||||||
process=Process.hierarchical, number_of_agents=2, number_of_tasks=1)", "i18n":
|
process=Process.hierarchical, number_of_agents=2, number_of_tasks=1)", "i18n":
|
||||||
"{''prompt_file'': None}", "cache_handler": "{}", "tools_handler": "<crewai.agents.tools_handler.ToolsHandler
|
"{''prompt_file'': None}", "cache_handler": "{}", "tools_handler": "<crewai.agents.tools_handler.ToolsHandler
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ interactions:
|
|||||||
a freelancer and is now working on doing research and analysis for a new customer.\",
|
a freelancer and is now working on doing research and analysis for a new customer.\",
|
||||||
''cache'': True, ''verbose'': False, ''max_rpm'': None, ''allow_delegation'':
|
''cache'': True, ''verbose'': False, ''max_rpm'': None, ''allow_delegation'':
|
||||||
False, ''tools'': [], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
False, ''tools'': [], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x12b973fe0>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x12b973fe0>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x12b910290>, ''crew'': None, ''i18n'': {''prompt_file'': None}, ''cache_handler'':
|
object at 0x12b910290>, ''crew'': None, ''i18n'': {''prompt_file'': None}, ''cache_handler'':
|
||||||
{}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler object at 0x12b9934d0>,
|
{}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler object at 0x12b9934d0>,
|
||||||
''tools_results'': [], ''max_tokens'': None, ''knowledge'': None, ''knowledge_sources'':
|
''tools_results'': [], ''max_tokens'': None, ''knowledge'': None, ''knowledge_sources'':
|
||||||
@@ -149,7 +149,7 @@ interactions:
|
|||||||
writing content for a new customer.\", ''cache'': True, ''verbose'': False,
|
writing content for a new customer.\", ''cache'': True, ''verbose'': False,
|
||||||
''max_rpm'': None, ''allow_delegation'': False, ''tools'': [], ''max_iter'':
|
''max_rpm'': None, ''allow_delegation'': False, ''tools'': [], ''max_iter'':
|
||||||
25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x12b7bbbf0>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x12b7bbbf0>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x12b9903b0>, ''crew'': None, ''i18n'': {''prompt_file'': None}, ''cache_handler'':
|
object at 0x12b9903b0>, ''crew'': None, ''i18n'': {''prompt_file'': None}, ''cache_handler'':
|
||||||
{}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler object at 0x12b631bb0>,
|
{}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler object at 0x12b631bb0>,
|
||||||
''tools_results'': [], ''max_tokens'': None, ''knowledge'': None, ''knowledge_sources'':
|
''tools_results'': [], ''max_tokens'': None, ''knowledge'': None, ''knowledge_sources'':
|
||||||
@@ -169,7 +169,7 @@ interactions:
|
|||||||
a freelancer and is now working on doing research and analysis for a new customer.\"",
|
a freelancer and is now working on doing research and analysis for a new customer.\"",
|
||||||
"cache": "True", "verbose": "False", "max_rpm": "None", "allow_delegation":
|
"cache": "True", "verbose": "False", "max_rpm": "None", "allow_delegation":
|
||||||
"False", "tools": "[]", "max_iter": "25", "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
"False", "tools": "[]", "max_iter": "25", "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x12b973fe0>", "llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x12b973fe0>", "llm": "<crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x12b910290>", "crew": "None", "i18n": "{''prompt_file'': None}",
|
object at 0x12b910290>", "crew": "None", "i18n": "{''prompt_file'': None}",
|
||||||
"cache_handler": "{}", "tools_handler": "<crewai.agents.tools_handler.ToolsHandler
|
"cache_handler": "{}", "tools_handler": "<crewai.agents.tools_handler.ToolsHandler
|
||||||
object at 0x12b9934d0>", "tools_results": "[]", "max_tokens": "None", "knowledge":
|
object at 0x12b9934d0>", "tools_results": "[]", "max_tokens": "None", "knowledge":
|
||||||
@@ -182,7 +182,7 @@ interactions:
|
|||||||
You work as a freelancer and are now working on writing content for a new customer.\"",
|
You work as a freelancer and are now working on writing content for a new customer.\"",
|
||||||
"cache": "True", "verbose": "False", "max_rpm": "None", "allow_delegation":
|
"cache": "True", "verbose": "False", "max_rpm": "None", "allow_delegation":
|
||||||
"False", "tools": "[]", "max_iter": "25", "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
"False", "tools": "[]", "max_iter": "25", "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x12b7bbbf0>", "llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x12b7bbbf0>", "llm": "<crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x12b9903b0>", "crew": "None", "i18n": "{''prompt_file'': None}",
|
object at 0x12b9903b0>", "crew": "None", "i18n": "{''prompt_file'': None}",
|
||||||
"cache_handler": "{}", "tools_handler": "<crewai.agents.tools_handler.ToolsHandler
|
"cache_handler": "{}", "tools_handler": "<crewai.agents.tools_handler.ToolsHandler
|
||||||
object at 0x12b631bb0>", "tools_results": "[]", "max_tokens": "None", "knowledge":
|
object at 0x12b631bb0>", "tools_results": "[]", "max_tokens": "None", "knowledge":
|
||||||
@@ -214,7 +214,7 @@ interactions:
|
|||||||
a freelancer and is now working on doing research and analysis for a new customer.\",
|
a freelancer and is now working on doing research and analysis for a new customer.\",
|
||||||
''cache'': True, ''verbose'': False, ''max_rpm'': None, ''allow_delegation'':
|
''cache'': True, ''verbose'': False, ''max_rpm'': None, ''allow_delegation'':
|
||||||
False, ''tools'': [], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
False, ''tools'': [], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x12b973fe0>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x12b973fe0>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x12b910290>, ''crew'': None, ''i18n'': {''prompt_file'': None}, ''cache_handler'':
|
object at 0x12b910290>, ''crew'': None, ''i18n'': {''prompt_file'': None}, ''cache_handler'':
|
||||||
{}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler object at 0x12b9934d0>,
|
{}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler object at 0x12b9934d0>,
|
||||||
''tools_results'': [], ''max_tokens'': None, ''knowledge'': None, ''knowledge_sources'':
|
''tools_results'': [], ''max_tokens'': None, ''knowledge'': None, ''knowledge_sources'':
|
||||||
@@ -237,7 +237,7 @@ interactions:
|
|||||||
writing content for a new customer.\", ''cache'': True, ''verbose'': False,
|
writing content for a new customer.\", ''cache'': True, ''verbose'': False,
|
||||||
''max_rpm'': None, ''allow_delegation'': False, ''tools'': [], ''max_iter'':
|
''max_rpm'': None, ''allow_delegation'': False, ''tools'': [], ''max_iter'':
|
||||||
25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x12b7bbbf0>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x12b7bbbf0>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x12b9903b0>, ''crew'': None, ''i18n'': {''prompt_file'': None}, ''cache_handler'':
|
object at 0x12b9903b0>, ''crew'': None, ''i18n'': {''prompt_file'': None}, ''cache_handler'':
|
||||||
{}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler object at 0x12b631bb0>,
|
{}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler object at 0x12b631bb0>,
|
||||||
''tools_results'': [], ''max_tokens'': None, ''knowledge'': None, ''knowledge_sources'':
|
''tools_results'': [], ''max_tokens'': None, ''knowledge'': None, ''knowledge_sources'':
|
||||||
@@ -257,7 +257,7 @@ interactions:
|
|||||||
a freelancer and is now working on doing research and analysis for a new customer.\"",
|
a freelancer and is now working on doing research and analysis for a new customer.\"",
|
||||||
"cache": "True", "verbose": "False", "max_rpm": "None", "allow_delegation":
|
"cache": "True", "verbose": "False", "max_rpm": "None", "allow_delegation":
|
||||||
"False", "tools": "[]", "max_iter": "25", "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
"False", "tools": "[]", "max_iter": "25", "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x12b973fe0>", "llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x12b973fe0>", "llm": "<crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x12b910290>", "crew": "None", "i18n": "{''prompt_file'': None}",
|
object at 0x12b910290>", "crew": "None", "i18n": "{''prompt_file'': None}",
|
||||||
"cache_handler": "{}", "tools_handler": "<crewai.agents.tools_handler.ToolsHandler
|
"cache_handler": "{}", "tools_handler": "<crewai.agents.tools_handler.ToolsHandler
|
||||||
object at 0x12b9934d0>", "tools_results": "[]", "max_tokens": "None", "knowledge":
|
object at 0x12b9934d0>", "tools_results": "[]", "max_tokens": "None", "knowledge":
|
||||||
@@ -270,7 +270,7 @@ interactions:
|
|||||||
You work as a freelancer and are now working on writing content for a new customer.\"",
|
You work as a freelancer and are now working on writing content for a new customer.\"",
|
||||||
"cache": "True", "verbose": "False", "max_rpm": "None", "allow_delegation":
|
"cache": "True", "verbose": "False", "max_rpm": "None", "allow_delegation":
|
||||||
"False", "tools": "[]", "max_iter": "25", "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
"False", "tools": "[]", "max_iter": "25", "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x12b7bbbf0>", "llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x12b7bbbf0>", "llm": "<crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x12b9903b0>", "crew": "None", "i18n": "{''prompt_file'': None}",
|
object at 0x12b9903b0>", "crew": "None", "i18n": "{''prompt_file'': None}",
|
||||||
"cache_handler": "{}", "tools_handler": "<crewai.agents.tools_handler.ToolsHandler
|
"cache_handler": "{}", "tools_handler": "<crewai.agents.tools_handler.ToolsHandler
|
||||||
object at 0x12b631bb0>", "tools_results": "[]", "max_tokens": "None", "knowledge":
|
object at 0x12b631bb0>", "tools_results": "[]", "max_tokens": "None", "knowledge":
|
||||||
|
|||||||
@@ -468,7 +468,7 @@ interactions:
|
|||||||
"description_updated": "False", "cache_function": "<function BaseTool.<lambda>
|
"description_updated": "False", "cache_function": "<function BaseTool.<lambda>
|
||||||
at 0x107ff9440>", "result_as_answer": "True", "max_usage_count": "None", "current_usage_count":
|
at 0x107ff9440>", "result_as_answer": "True", "max_usage_count": "None", "current_usage_count":
|
||||||
"0"}], "max_iter": 25, "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
"0"}], "max_iter": 25, "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x13ab2e030>", "llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x13ab2e030>", "llm": "<crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x13ab2e5d0>", "crew": {"parent_flow": null, "name": "crew", "cache":
|
object at 0x13ab2e5d0>", "crew": {"parent_flow": null, "name": "crew", "cache":
|
||||||
true, "tasks": ["{''used_tools'': 0, ''tools_errors'': 0, ''delegations'': 0,
|
true, "tasks": ["{''used_tools'': 0, ''tools_errors'': 0, ''delegations'': 0,
|
||||||
''i18n'': {''prompt_file'': None}, ''name'': None, ''prompt_context'': '''',
|
''i18n'': {''prompt_file'': None}, ''name'': None, ''prompt_context'': '''',
|
||||||
@@ -484,7 +484,7 @@ interactions:
|
|||||||
<class ''abc.MyCustomToolSchema''>, ''description_updated'': False, ''cache_function'':
|
<class ''abc.MyCustomToolSchema''>, ''description_updated'': False, ''cache_function'':
|
||||||
<function BaseTool.<lambda> at 0x107ff9440>, ''result_as_answer'': True, ''max_usage_count'':
|
<function BaseTool.<lambda> at 0x107ff9440>, ''result_as_answer'': True, ''max_usage_count'':
|
||||||
None, ''current_usage_count'': 0}], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
None, ''current_usage_count'': 0}], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x13ab2e030>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x13ab2e030>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x13ab2e5d0>, ''crew'': Crew(id=f74956dd-60d0-402a-a703-2cc3d767397f,
|
object at 0x13ab2e5d0>, ''crew'': Crew(id=f74956dd-60d0-402a-a703-2cc3d767397f,
|
||||||
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
@@ -512,7 +512,7 @@ interactions:
|
|||||||
''description_updated'': False, ''cache_function'': <function BaseTool.<lambda>
|
''description_updated'': False, ''cache_function'': <function BaseTool.<lambda>
|
||||||
at 0x107ff9440>, ''result_as_answer'': True, ''max_usage_count'': None, ''current_usage_count'':
|
at 0x107ff9440>, ''result_as_answer'': True, ''max_usage_count'': None, ''current_usage_count'':
|
||||||
0}], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
0}], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
|
||||||
object at 0x13ab2e030>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
|
object at 0x13ab2e030>, ''llm'': <crewai.llm.providers.openai.completion.OpenAICompletion
|
||||||
object at 0x13ab2e5d0>, ''crew'': Crew(id=f74956dd-60d0-402a-a703-2cc3d767397f,
|
object at 0x13ab2e5d0>, ''crew'': Crew(id=f74956dd-60d0-402a-a703-2cc3d767397f,
|
||||||
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
process=Process.sequential, number_of_agents=1, number_of_tasks=1), ''i18n'':
|
||||||
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
{''prompt_file'': None}, ''cache_handler'': {}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ def test_anthropic_completion_is_used_when_claude_provider():
|
|||||||
"""
|
"""
|
||||||
llm = LLM(model="claude/claude-3-5-sonnet-20241022")
|
llm = LLM(model="claude/claude-3-5-sonnet-20241022")
|
||||||
|
|
||||||
from crewai.llms.providers.anthropic.completion import AnthropicCompletion
|
from crewai.llm.providers.anthropic.completion import AnthropicCompletion
|
||||||
assert isinstance(llm, AnthropicCompletion)
|
assert isinstance(llm, AnthropicCompletion)
|
||||||
assert llm.provider == "anthropic"
|
assert llm.provider == "anthropic"
|
||||||
assert llm.model == "claude-3-5-sonnet-20241022"
|
assert llm.model == "claude-3-5-sonnet-20241022"
|
||||||
@@ -47,7 +47,7 @@ def test_anthropic_tool_use_conversation_flow():
|
|||||||
Test that the Anthropic completion properly handles tool use conversation flow
|
Test that the Anthropic completion properly handles tool use conversation flow
|
||||||
"""
|
"""
|
||||||
from unittest.mock import Mock, patch
|
from unittest.mock import Mock, patch
|
||||||
from crewai.llms.providers.anthropic.completion import AnthropicCompletion
|
from crewai.llm.providers.anthropic.completion import AnthropicCompletion
|
||||||
from anthropic.types.tool_use_block import ToolUseBlock
|
from anthropic.types.tool_use_block import ToolUseBlock
|
||||||
|
|
||||||
# Create AnthropicCompletion instance
|
# Create AnthropicCompletion instance
|
||||||
@@ -123,7 +123,7 @@ def test_anthropic_completion_module_is_imported():
|
|||||||
"""
|
"""
|
||||||
Test that the completion module is properly imported when using Anthropic provider
|
Test that the completion module is properly imported when using Anthropic provider
|
||||||
"""
|
"""
|
||||||
module_name = "crewai.llms.providers.anthropic.completion"
|
module_name = "crewai.llm.providers.anthropic.completion"
|
||||||
|
|
||||||
# Remove module from cache if it exists
|
# Remove module from cache if it exists
|
||||||
if module_name in sys.modules:
|
if module_name in sys.modules:
|
||||||
@@ -175,7 +175,7 @@ def test_anthropic_completion_initialization_parameters():
|
|||||||
api_key="test-key"
|
api_key="test-key"
|
||||||
)
|
)
|
||||||
|
|
||||||
from crewai.llms.providers.anthropic.completion import AnthropicCompletion
|
from crewai.llm.providers.anthropic.completion import AnthropicCompletion
|
||||||
assert isinstance(llm, AnthropicCompletion)
|
assert isinstance(llm, AnthropicCompletion)
|
||||||
assert llm.model == "claude-3-5-sonnet-20241022"
|
assert llm.model == "claude-3-5-sonnet-20241022"
|
||||||
assert llm.temperature == 0.7
|
assert llm.temperature == 0.7
|
||||||
@@ -195,7 +195,7 @@ def test_anthropic_specific_parameters():
|
|||||||
timeout=60
|
timeout=60
|
||||||
)
|
)
|
||||||
|
|
||||||
from crewai.llms.providers.anthropic.completion import AnthropicCompletion
|
from crewai.llm.providers.anthropic.completion import AnthropicCompletion
|
||||||
assert isinstance(llm, AnthropicCompletion)
|
assert isinstance(llm, AnthropicCompletion)
|
||||||
assert llm.stop_sequences == ["Human:", "Assistant:"]
|
assert llm.stop_sequences == ["Human:", "Assistant:"]
|
||||||
assert llm.stream == True
|
assert llm.stream == True
|
||||||
@@ -390,7 +390,7 @@ def test_anthropic_raises_error_when_model_not_supported():
|
|||||||
"""Test that AnthropicCompletion raises ValueError when model not supported"""
|
"""Test that AnthropicCompletion raises ValueError when model not supported"""
|
||||||
|
|
||||||
# Mock the Anthropic client to raise an error
|
# Mock the Anthropic client to raise an error
|
||||||
with patch('crewai.llms.providers.anthropic.completion.Anthropic') as mock_anthropic_class:
|
with patch('crewai.llm.providers.anthropic.completion.Anthropic') as mock_anthropic_class:
|
||||||
mock_client = MagicMock()
|
mock_client = MagicMock()
|
||||||
mock_anthropic_class.return_value = mock_client
|
mock_anthropic_class.return_value = mock_client
|
||||||
|
|
||||||
@@ -427,7 +427,7 @@ def test_anthropic_client_params_setup():
|
|||||||
client_params=custom_client_params
|
client_params=custom_client_params
|
||||||
)
|
)
|
||||||
|
|
||||||
from crewai.llms.providers.anthropic.completion import AnthropicCompletion
|
from crewai.llm.providers.anthropic.completion import AnthropicCompletion
|
||||||
assert isinstance(llm, AnthropicCompletion)
|
assert isinstance(llm, AnthropicCompletion)
|
||||||
|
|
||||||
assert llm.client_params == custom_client_params
|
assert llm.client_params == custom_client_params
|
||||||
@@ -462,7 +462,7 @@ def test_anthropic_client_params_override_defaults():
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Verify this is actually AnthropicCompletion, not LiteLLM fallback
|
# Verify this is actually AnthropicCompletion, not LiteLLM fallback
|
||||||
from crewai.llms.providers.anthropic.completion import AnthropicCompletion
|
from crewai.llm.providers.anthropic.completion import AnthropicCompletion
|
||||||
assert isinstance(llm, AnthropicCompletion)
|
assert isinstance(llm, AnthropicCompletion)
|
||||||
|
|
||||||
merged_params = llm._get_client_params()
|
merged_params = llm._get_client_params()
|
||||||
@@ -487,7 +487,7 @@ def test_anthropic_client_params_none():
|
|||||||
client_params=None
|
client_params=None
|
||||||
)
|
)
|
||||||
|
|
||||||
from crewai.llms.providers.anthropic.completion import AnthropicCompletion
|
from crewai.llm.providers.anthropic.completion import AnthropicCompletion
|
||||||
assert isinstance(llm, AnthropicCompletion)
|
assert isinstance(llm, AnthropicCompletion)
|
||||||
|
|
||||||
assert llm.client_params is None
|
assert llm.client_params is None
|
||||||
@@ -515,7 +515,7 @@ def test_anthropic_client_params_empty_dict():
|
|||||||
client_params={}
|
client_params={}
|
||||||
)
|
)
|
||||||
|
|
||||||
from crewai.llms.providers.anthropic.completion import AnthropicCompletion
|
from crewai.llm.providers.anthropic.completion import AnthropicCompletion
|
||||||
assert isinstance(llm, AnthropicCompletion)
|
assert isinstance(llm, AnthropicCompletion)
|
||||||
|
|
||||||
assert llm.client_params == {}
|
assert llm.client_params == {}
|
||||||
@@ -538,7 +538,7 @@ def test_anthropic_model_detection():
|
|||||||
|
|
||||||
for model_name in anthropic_test_cases:
|
for model_name in anthropic_test_cases:
|
||||||
llm = LLM(model=model_name)
|
llm = LLM(model=model_name)
|
||||||
from crewai.llms.providers.anthropic.completion import AnthropicCompletion
|
from crewai.llm.providers.anthropic.completion import AnthropicCompletion
|
||||||
assert isinstance(llm, AnthropicCompletion), f"Failed for model: {model_name}"
|
assert isinstance(llm, AnthropicCompletion), f"Failed for model: {model_name}"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ def test_azure_completion_is_used_when_azure_openai_provider():
|
|||||||
"""
|
"""
|
||||||
llm = LLM(model="azure_openai/gpt-4")
|
llm = LLM(model="azure_openai/gpt-4")
|
||||||
|
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
assert isinstance(llm, AzureCompletion)
|
assert isinstance(llm, AzureCompletion)
|
||||||
assert llm.provider == "azure"
|
assert llm.provider == "azure"
|
||||||
assert llm.model == "gpt-4"
|
assert llm.model == "gpt-4"
|
||||||
@@ -47,7 +47,7 @@ def test_azure_tool_use_conversation_flow():
|
|||||||
"""
|
"""
|
||||||
Test that the Azure completion properly handles tool use conversation flow
|
Test that the Azure completion properly handles tool use conversation flow
|
||||||
"""
|
"""
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
from azure.ai.inference.models import ChatCompletionsToolCall
|
from azure.ai.inference.models import ChatCompletionsToolCall
|
||||||
|
|
||||||
# Create AzureCompletion instance
|
# Create AzureCompletion instance
|
||||||
@@ -105,7 +105,7 @@ def test_azure_completion_module_is_imported():
|
|||||||
"""
|
"""
|
||||||
Test that the completion module is properly imported when using Azure provider
|
Test that the completion module is properly imported when using Azure provider
|
||||||
"""
|
"""
|
||||||
module_name = "crewai.llms.providers.azure.completion"
|
module_name = "crewai.llm.providers.azure.completion"
|
||||||
|
|
||||||
# Remove module from cache if it exists
|
# Remove module from cache if it exists
|
||||||
if module_name in sys.modules:
|
if module_name in sys.modules:
|
||||||
@@ -160,7 +160,7 @@ def test_azure_completion_initialization_parameters():
|
|||||||
endpoint="https://test.openai.azure.com"
|
endpoint="https://test.openai.azure.com"
|
||||||
)
|
)
|
||||||
|
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
assert isinstance(llm, AzureCompletion)
|
assert isinstance(llm, AzureCompletion)
|
||||||
assert llm.model == "gpt-4"
|
assert llm.model == "gpt-4"
|
||||||
assert llm.temperature == 0.7
|
assert llm.temperature == 0.7
|
||||||
@@ -182,7 +182,7 @@ def test_azure_specific_parameters():
|
|||||||
endpoint="https://test.openai.azure.com"
|
endpoint="https://test.openai.azure.com"
|
||||||
)
|
)
|
||||||
|
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
assert isinstance(llm, AzureCompletion)
|
assert isinstance(llm, AzureCompletion)
|
||||||
assert llm.stop == ["Human:", "Assistant:"]
|
assert llm.stop == ["Human:", "Assistant:"]
|
||||||
assert llm.stream == True
|
assert llm.stream == True
|
||||||
@@ -374,7 +374,7 @@ def test_azure_completion_with_tools():
|
|||||||
|
|
||||||
def test_azure_raises_error_when_endpoint_missing():
|
def test_azure_raises_error_when_endpoint_missing():
|
||||||
"""Test that AzureCompletion raises ValueError when endpoint is missing"""
|
"""Test that AzureCompletion raises ValueError when endpoint is missing"""
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
|
|
||||||
# Clear environment variables
|
# Clear environment variables
|
||||||
with patch.dict(os.environ, {}, clear=True):
|
with patch.dict(os.environ, {}, clear=True):
|
||||||
@@ -383,7 +383,7 @@ def test_azure_raises_error_when_endpoint_missing():
|
|||||||
|
|
||||||
def test_azure_raises_error_when_api_key_missing():
|
def test_azure_raises_error_when_api_key_missing():
|
||||||
"""Test that AzureCompletion raises ValueError when API key is missing"""
|
"""Test that AzureCompletion raises ValueError when API key is missing"""
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
|
|
||||||
# Clear environment variables
|
# Clear environment variables
|
||||||
with patch.dict(os.environ, {}, clear=True):
|
with patch.dict(os.environ, {}, clear=True):
|
||||||
@@ -400,7 +400,7 @@ def test_azure_endpoint_configuration():
|
|||||||
}):
|
}):
|
||||||
llm = LLM(model="azure/gpt-4")
|
llm = LLM(model="azure/gpt-4")
|
||||||
|
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
assert isinstance(llm, AzureCompletion)
|
assert isinstance(llm, AzureCompletion)
|
||||||
assert llm.endpoint == "https://test1.openai.azure.com/openai/deployments/gpt-4"
|
assert llm.endpoint == "https://test1.openai.azure.com/openai/deployments/gpt-4"
|
||||||
|
|
||||||
@@ -426,7 +426,7 @@ def test_azure_api_key_configuration():
|
|||||||
}):
|
}):
|
||||||
llm = LLM(model="azure/gpt-4")
|
llm = LLM(model="azure/gpt-4")
|
||||||
|
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
assert isinstance(llm, AzureCompletion)
|
assert isinstance(llm, AzureCompletion)
|
||||||
assert llm.api_key == "test-azure-key"
|
assert llm.api_key == "test-azure-key"
|
||||||
|
|
||||||
@@ -437,7 +437,7 @@ def test_azure_model_capabilities():
|
|||||||
"""
|
"""
|
||||||
# Test GPT-4 model (supports function calling)
|
# Test GPT-4 model (supports function calling)
|
||||||
llm_gpt4 = LLM(model="azure/gpt-4")
|
llm_gpt4 = LLM(model="azure/gpt-4")
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
assert isinstance(llm_gpt4, AzureCompletion)
|
assert isinstance(llm_gpt4, AzureCompletion)
|
||||||
assert llm_gpt4.is_openai_model == True
|
assert llm_gpt4.is_openai_model == True
|
||||||
assert llm_gpt4.supports_function_calling() == True
|
assert llm_gpt4.supports_function_calling() == True
|
||||||
@@ -466,7 +466,7 @@ def test_azure_completion_params_preparation():
|
|||||||
max_tokens=1000
|
max_tokens=1000
|
||||||
)
|
)
|
||||||
|
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
assert isinstance(llm, AzureCompletion)
|
assert isinstance(llm, AzureCompletion)
|
||||||
|
|
||||||
messages = [{"role": "user", "content": "Hello"}]
|
messages = [{"role": "user", "content": "Hello"}]
|
||||||
@@ -494,7 +494,7 @@ def test_azure_model_detection():
|
|||||||
|
|
||||||
for model_name in azure_test_cases:
|
for model_name in azure_test_cases:
|
||||||
llm = LLM(model=model_name)
|
llm = LLM(model=model_name)
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
assert isinstance(llm, AzureCompletion), f"Failed for model: {model_name}"
|
assert isinstance(llm, AzureCompletion), f"Failed for model: {model_name}"
|
||||||
|
|
||||||
|
|
||||||
@@ -662,7 +662,7 @@ def test_azure_streaming_completion():
|
|||||||
"""
|
"""
|
||||||
Test that streaming completions work properly
|
Test that streaming completions work properly
|
||||||
"""
|
"""
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
from azure.ai.inference.models import StreamingChatCompletionsUpdate
|
from azure.ai.inference.models import StreamingChatCompletionsUpdate
|
||||||
|
|
||||||
llm = LLM(model="azure/gpt-4", stream=True)
|
llm = LLM(model="azure/gpt-4", stream=True)
|
||||||
@@ -698,7 +698,7 @@ def test_azure_api_version_default():
|
|||||||
"""
|
"""
|
||||||
llm = LLM(model="azure/gpt-4")
|
llm = LLM(model="azure/gpt-4")
|
||||||
|
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
assert isinstance(llm, AzureCompletion)
|
assert isinstance(llm, AzureCompletion)
|
||||||
# Should use default or environment variable
|
# Should use default or environment variable
|
||||||
assert llm.api_version is not None
|
assert llm.api_version is not None
|
||||||
@@ -721,7 +721,7 @@ def test_azure_openai_endpoint_url_construction():
|
|||||||
"""
|
"""
|
||||||
Test that Azure OpenAI endpoint URLs are automatically constructed correctly
|
Test that Azure OpenAI endpoint URLs are automatically constructed correctly
|
||||||
"""
|
"""
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
|
|
||||||
with patch.dict(os.environ, {
|
with patch.dict(os.environ, {
|
||||||
"AZURE_API_KEY": "test-key",
|
"AZURE_API_KEY": "test-key",
|
||||||
@@ -738,7 +738,7 @@ def test_azure_openai_endpoint_url_with_trailing_slash():
|
|||||||
"""
|
"""
|
||||||
Test that trailing slashes are handled correctly in endpoint URLs
|
Test that trailing slashes are handled correctly in endpoint URLs
|
||||||
"""
|
"""
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
|
|
||||||
with patch.dict(os.environ, {
|
with patch.dict(os.environ, {
|
||||||
"AZURE_API_KEY": "test-key",
|
"AZURE_API_KEY": "test-key",
|
||||||
@@ -804,7 +804,7 @@ def test_non_azure_openai_model_parameter_included():
|
|||||||
"""
|
"""
|
||||||
Test that model parameter IS included for non-Azure OpenAI endpoints
|
Test that model parameter IS included for non-Azure OpenAI endpoints
|
||||||
"""
|
"""
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
|
|
||||||
with patch.dict(os.environ, {
|
with patch.dict(os.environ, {
|
||||||
"AZURE_API_KEY": "test-key",
|
"AZURE_API_KEY": "test-key",
|
||||||
@@ -824,7 +824,7 @@ def test_azure_message_formatting_with_role():
|
|||||||
"""
|
"""
|
||||||
Test that messages are formatted with both 'role' and 'content' fields
|
Test that messages are formatted with both 'role' and 'content' fields
|
||||||
"""
|
"""
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
|
|
||||||
llm = LLM(model="azure/gpt-4")
|
llm = LLM(model="azure/gpt-4")
|
||||||
|
|
||||||
@@ -886,7 +886,7 @@ def test_azure_improved_error_messages():
|
|||||||
"""
|
"""
|
||||||
Test that improved error messages are provided for common HTTP errors
|
Test that improved error messages are provided for common HTTP errors
|
||||||
"""
|
"""
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
from azure.core.exceptions import HttpResponseError
|
from azure.core.exceptions import HttpResponseError
|
||||||
|
|
||||||
llm = LLM(model="azure/gpt-4")
|
llm = LLM(model="azure/gpt-4")
|
||||||
@@ -918,7 +918,7 @@ def test_azure_api_version_properly_passed():
|
|||||||
"""
|
"""
|
||||||
Test that api_version is properly passed to the client
|
Test that api_version is properly passed to the client
|
||||||
"""
|
"""
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
|
|
||||||
with patch.dict(os.environ, {
|
with patch.dict(os.environ, {
|
||||||
"AZURE_API_KEY": "test-key",
|
"AZURE_API_KEY": "test-key",
|
||||||
@@ -940,7 +940,7 @@ def test_azure_timeout_and_max_retries_stored():
|
|||||||
"""
|
"""
|
||||||
Test that timeout and max_retries parameters are stored
|
Test that timeout and max_retries parameters are stored
|
||||||
"""
|
"""
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
|
|
||||||
with patch.dict(os.environ, {
|
with patch.dict(os.environ, {
|
||||||
"AZURE_API_KEY": "test-key",
|
"AZURE_API_KEY": "test-key",
|
||||||
@@ -960,7 +960,7 @@ def test_azure_complete_params_include_optional_params():
|
|||||||
"""
|
"""
|
||||||
Test that optional parameters are included in completion params when set
|
Test that optional parameters are included in completion params when set
|
||||||
"""
|
"""
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
|
|
||||||
with patch.dict(os.environ, {
|
with patch.dict(os.environ, {
|
||||||
"AZURE_API_KEY": "test-key",
|
"AZURE_API_KEY": "test-key",
|
||||||
@@ -992,7 +992,7 @@ def test_azure_endpoint_validation_with_azure_prefix():
|
|||||||
"""
|
"""
|
||||||
Test that 'azure/' prefix is properly stripped when constructing endpoint
|
Test that 'azure/' prefix is properly stripped when constructing endpoint
|
||||||
"""
|
"""
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
|
|
||||||
with patch.dict(os.environ, {
|
with patch.dict(os.environ, {
|
||||||
"AZURE_API_KEY": "test-key",
|
"AZURE_API_KEY": "test-key",
|
||||||
@@ -1009,7 +1009,7 @@ def test_azure_message_formatting_preserves_all_roles():
|
|||||||
"""
|
"""
|
||||||
Test that all message roles (system, user, assistant) are preserved correctly
|
Test that all message roles (system, user, assistant) are preserved correctly
|
||||||
"""
|
"""
|
||||||
from crewai.llms.providers.azure.completion import AzureCompletion
|
from crewai.llm.providers.azure.completion import AzureCompletion
|
||||||
|
|
||||||
llm = LLM(model="azure/gpt-4")
|
llm = LLM(model="azure/gpt-4")
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ def mock_aws_credentials():
|
|||||||
"AWS_DEFAULT_REGION": "us-east-1"
|
"AWS_DEFAULT_REGION": "us-east-1"
|
||||||
}):
|
}):
|
||||||
# Mock boto3 Session to prevent actual AWS connections
|
# Mock boto3 Session to prevent actual AWS connections
|
||||||
with patch('crewai.llms.providers.bedrock.completion.Session') as mock_session_class:
|
with patch('crewai.llm.providers.bedrock.completion.Session') as mock_session_class:
|
||||||
# Create mock session instance
|
# Create mock session instance
|
||||||
mock_session_instance = MagicMock()
|
mock_session_instance = MagicMock()
|
||||||
mock_client = MagicMock()
|
mock_client = MagicMock()
|
||||||
@@ -67,7 +67,7 @@ def test_bedrock_completion_module_is_imported():
|
|||||||
"""
|
"""
|
||||||
Test that the completion module is properly imported when using Bedrock provider
|
Test that the completion module is properly imported when using Bedrock provider
|
||||||
"""
|
"""
|
||||||
module_name = "crewai.llms.providers.bedrock.completion"
|
module_name = "crewai.llm.providers.bedrock.completion"
|
||||||
|
|
||||||
# Remove module from cache if it exists
|
# Remove module from cache if it exists
|
||||||
if module_name in sys.modules:
|
if module_name in sys.modules:
|
||||||
@@ -124,7 +124,7 @@ def test_bedrock_completion_initialization_parameters():
|
|||||||
region_name="us-west-2"
|
region_name="us-west-2"
|
||||||
)
|
)
|
||||||
|
|
||||||
from crewai.llms.providers.bedrock.completion import BedrockCompletion
|
from crewai.llm.providers.bedrock.completion import BedrockCompletion
|
||||||
assert isinstance(llm, BedrockCompletion)
|
assert isinstance(llm, BedrockCompletion)
|
||||||
assert llm.model == "anthropic.claude-3-5-sonnet-20241022-v2:0"
|
assert llm.model == "anthropic.claude-3-5-sonnet-20241022-v2:0"
|
||||||
assert llm.temperature == 0.7
|
assert llm.temperature == 0.7
|
||||||
@@ -145,7 +145,7 @@ def test_bedrock_specific_parameters():
|
|||||||
region_name="us-east-1"
|
region_name="us-east-1"
|
||||||
)
|
)
|
||||||
|
|
||||||
from crewai.llms.providers.bedrock.completion import BedrockCompletion
|
from crewai.llm.providers.bedrock.completion import BedrockCompletion
|
||||||
assert isinstance(llm, BedrockCompletion)
|
assert isinstance(llm, BedrockCompletion)
|
||||||
assert llm.stop_sequences == ["Human:", "Assistant:"]
|
assert llm.stop_sequences == ["Human:", "Assistant:"]
|
||||||
assert llm.stream == True
|
assert llm.stream == True
|
||||||
@@ -369,7 +369,7 @@ def test_bedrock_aws_credentials_configuration():
|
|||||||
}):
|
}):
|
||||||
llm = LLM(model="bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0")
|
llm = LLM(model="bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0")
|
||||||
|
|
||||||
from crewai.llms.providers.bedrock.completion import BedrockCompletion
|
from crewai.llm.providers.bedrock.completion import BedrockCompletion
|
||||||
assert isinstance(llm, BedrockCompletion)
|
assert isinstance(llm, BedrockCompletion)
|
||||||
assert llm.region_name == "us-east-1"
|
assert llm.region_name == "us-east-1"
|
||||||
|
|
||||||
@@ -390,7 +390,7 @@ def test_bedrock_model_capabilities():
|
|||||||
"""
|
"""
|
||||||
# Test Claude model
|
# Test Claude model
|
||||||
llm_claude = LLM(model="bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0")
|
llm_claude = LLM(model="bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0")
|
||||||
from crewai.llms.providers.bedrock.completion import BedrockCompletion
|
from crewai.llm.providers.bedrock.completion import BedrockCompletion
|
||||||
assert isinstance(llm_claude, BedrockCompletion)
|
assert isinstance(llm_claude, BedrockCompletion)
|
||||||
assert llm_claude.is_claude_model == True
|
assert llm_claude.is_claude_model == True
|
||||||
assert llm_claude.supports_tools == True
|
assert llm_claude.supports_tools == True
|
||||||
@@ -413,7 +413,7 @@ def test_bedrock_inference_config():
|
|||||||
max_tokens=1000
|
max_tokens=1000
|
||||||
)
|
)
|
||||||
|
|
||||||
from crewai.llms.providers.bedrock.completion import BedrockCompletion
|
from crewai.llm.providers.bedrock.completion import BedrockCompletion
|
||||||
assert isinstance(llm, BedrockCompletion)
|
assert isinstance(llm, BedrockCompletion)
|
||||||
|
|
||||||
# Test config preparation
|
# Test config preparation
|
||||||
@@ -444,7 +444,7 @@ def test_bedrock_model_detection():
|
|||||||
|
|
||||||
for model_name in bedrock_test_cases:
|
for model_name in bedrock_test_cases:
|
||||||
llm = LLM(model=model_name)
|
llm = LLM(model=model_name)
|
||||||
from crewai.llms.providers.bedrock.completion import BedrockCompletion
|
from crewai.llm.providers.bedrock.completion import BedrockCompletion
|
||||||
assert isinstance(llm, BedrockCompletion), f"Failed for model: {model_name}"
|
assert isinstance(llm, BedrockCompletion), f"Failed for model: {model_name}"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ def test_gemini_completion_is_used_when_gemini_provider():
|
|||||||
"""
|
"""
|
||||||
llm = LLM(model="gemini/gemini-2.0-flash-001")
|
llm = LLM(model="gemini/gemini-2.0-flash-001")
|
||||||
|
|
||||||
from crewai.llms.providers.gemini.completion import GeminiCompletion
|
from crewai.llm.providers.gemini.completion import GeminiCompletion
|
||||||
assert isinstance(llm, GeminiCompletion)
|
assert isinstance(llm, GeminiCompletion)
|
||||||
assert llm.provider == "gemini"
|
assert llm.provider == "gemini"
|
||||||
assert llm.model == "gemini-2.0-flash-001"
|
assert llm.model == "gemini-2.0-flash-001"
|
||||||
@@ -47,7 +47,7 @@ def test_gemini_tool_use_conversation_flow():
|
|||||||
Test that the Gemini completion properly handles tool use conversation flow
|
Test that the Gemini completion properly handles tool use conversation flow
|
||||||
"""
|
"""
|
||||||
from unittest.mock import Mock, patch
|
from unittest.mock import Mock, patch
|
||||||
from crewai.llms.providers.gemini.completion import GeminiCompletion
|
from crewai.llm.providers.gemini.completion import GeminiCompletion
|
||||||
|
|
||||||
# Create GeminiCompletion instance
|
# Create GeminiCompletion instance
|
||||||
completion = GeminiCompletion(model="gemini-2.0-flash-001")
|
completion = GeminiCompletion(model="gemini-2.0-flash-001")
|
||||||
@@ -102,7 +102,7 @@ def test_gemini_completion_module_is_imported():
|
|||||||
"""
|
"""
|
||||||
Test that the completion module is properly imported when using Google provider
|
Test that the completion module is properly imported when using Google provider
|
||||||
"""
|
"""
|
||||||
module_name = "crewai.llms.providers.gemini.completion"
|
module_name = "crewai.llm.providers.gemini.completion"
|
||||||
|
|
||||||
# Remove module from cache if it exists
|
# Remove module from cache if it exists
|
||||||
if module_name in sys.modules:
|
if module_name in sys.modules:
|
||||||
@@ -159,7 +159,7 @@ def test_gemini_completion_initialization_parameters():
|
|||||||
api_key="test-key"
|
api_key="test-key"
|
||||||
)
|
)
|
||||||
|
|
||||||
from crewai.llms.providers.gemini.completion import GeminiCompletion
|
from crewai.llm.providers.gemini.completion import GeminiCompletion
|
||||||
assert isinstance(llm, GeminiCompletion)
|
assert isinstance(llm, GeminiCompletion)
|
||||||
assert llm.model == "gemini-2.0-flash-001"
|
assert llm.model == "gemini-2.0-flash-001"
|
||||||
assert llm.temperature == 0.7
|
assert llm.temperature == 0.7
|
||||||
@@ -186,7 +186,7 @@ def test_gemini_specific_parameters():
|
|||||||
location="us-central1"
|
location="us-central1"
|
||||||
)
|
)
|
||||||
|
|
||||||
from crewai.llms.providers.gemini.completion import GeminiCompletion
|
from crewai.llm.providers.gemini.completion import GeminiCompletion
|
||||||
assert isinstance(llm, GeminiCompletion)
|
assert isinstance(llm, GeminiCompletion)
|
||||||
assert llm.stop_sequences == ["Human:", "Assistant:"]
|
assert llm.stop_sequences == ["Human:", "Assistant:"]
|
||||||
assert llm.stream == True
|
assert llm.stream == True
|
||||||
@@ -382,7 +382,7 @@ def test_gemini_raises_error_when_model_not_supported():
|
|||||||
"""Test that GeminiCompletion raises ValueError when model not supported"""
|
"""Test that GeminiCompletion raises ValueError when model not supported"""
|
||||||
|
|
||||||
# Mock the Google client to raise an error
|
# Mock the Google client to raise an error
|
||||||
with patch('crewai.llms.providers.gemini.completion.genai') as mock_genai:
|
with patch('crewai.llm.providers.gemini.completion.genai') as mock_genai:
|
||||||
mock_client = MagicMock()
|
mock_client = MagicMock()
|
||||||
mock_genai.Client.return_value = mock_client
|
mock_genai.Client.return_value = mock_client
|
||||||
|
|
||||||
@@ -420,7 +420,7 @@ def test_gemini_vertex_ai_setup():
|
|||||||
location="us-west1"
|
location="us-west1"
|
||||||
)
|
)
|
||||||
|
|
||||||
from crewai.llms.providers.gemini.completion import GeminiCompletion
|
from crewai.llm.providers.gemini.completion import GeminiCompletion
|
||||||
assert isinstance(llm, GeminiCompletion)
|
assert isinstance(llm, GeminiCompletion)
|
||||||
|
|
||||||
assert llm.project == "test-project"
|
assert llm.project == "test-project"
|
||||||
@@ -435,7 +435,7 @@ def test_gemini_api_key_configuration():
|
|||||||
with patch.dict(os.environ, {"GOOGLE_API_KEY": "test-google-key"}):
|
with patch.dict(os.environ, {"GOOGLE_API_KEY": "test-google-key"}):
|
||||||
llm = LLM(model="google/gemini-2.0-flash-001")
|
llm = LLM(model="google/gemini-2.0-flash-001")
|
||||||
|
|
||||||
from crewai.llms.providers.gemini.completion import GeminiCompletion
|
from crewai.llm.providers.gemini.completion import GeminiCompletion
|
||||||
assert isinstance(llm, GeminiCompletion)
|
assert isinstance(llm, GeminiCompletion)
|
||||||
assert llm.api_key == "test-google-key"
|
assert llm.api_key == "test-google-key"
|
||||||
|
|
||||||
@@ -453,7 +453,7 @@ def test_gemini_model_capabilities():
|
|||||||
"""
|
"""
|
||||||
# Test Gemini 2.0 model
|
# Test Gemini 2.0 model
|
||||||
llm_2_0 = LLM(model="google/gemini-2.0-flash-001")
|
llm_2_0 = LLM(model="google/gemini-2.0-flash-001")
|
||||||
from crewai.llms.providers.gemini.completion import GeminiCompletion
|
from crewai.llm.providers.gemini.completion import GeminiCompletion
|
||||||
assert isinstance(llm_2_0, GeminiCompletion)
|
assert isinstance(llm_2_0, GeminiCompletion)
|
||||||
assert llm_2_0.is_gemini_2 == True
|
assert llm_2_0.is_gemini_2 == True
|
||||||
assert llm_2_0.supports_tools == True
|
assert llm_2_0.supports_tools == True
|
||||||
@@ -477,7 +477,7 @@ def test_gemini_generation_config():
|
|||||||
max_output_tokens=1000
|
max_output_tokens=1000
|
||||||
)
|
)
|
||||||
|
|
||||||
from crewai.llms.providers.gemini.completion import GeminiCompletion
|
from crewai.llm.providers.gemini.completion import GeminiCompletion
|
||||||
assert isinstance(llm, GeminiCompletion)
|
assert isinstance(llm, GeminiCompletion)
|
||||||
|
|
||||||
# Test config preparation
|
# Test config preparation
|
||||||
@@ -504,7 +504,7 @@ def test_gemini_model_detection():
|
|||||||
|
|
||||||
for model_name in gemini_test_cases:
|
for model_name in gemini_test_cases:
|
||||||
llm = LLM(model=model_name)
|
llm = LLM(model=model_name)
|
||||||
from crewai.llms.providers.gemini.completion import GeminiCompletion
|
from crewai.llm.providers.gemini.completion import GeminiCompletion
|
||||||
assert isinstance(llm, GeminiCompletion), f"Failed for model: {model_name}"
|
assert isinstance(llm, GeminiCompletion), f"Failed for model: {model_name}"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import httpx
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from crewai.llm import LLM
|
from crewai.llm import LLM
|
||||||
from crewai.llms.hooks.base import BaseInterceptor
|
from crewai.llm.hooks.base import BaseInterceptor
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
@pytest.fixture(autouse=True)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
import httpx
|
import httpx
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from crewai.llms.hooks.base import BaseInterceptor
|
from crewai.llm.hooks.base import BaseInterceptor
|
||||||
|
|
||||||
|
|
||||||
class SimpleInterceptor(BaseInterceptor[httpx.Request, httpx.Response]):
|
class SimpleInterceptor(BaseInterceptor[httpx.Request, httpx.Response]):
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import httpx
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from crewai.llm import LLM
|
from crewai.llm import LLM
|
||||||
from crewai.llms.hooks.base import BaseInterceptor
|
from crewai.llm.hooks.base import BaseInterceptor
|
||||||
|
|
||||||
|
|
||||||
class OpenAITestInterceptor(BaseInterceptor[httpx.Request, httpx.Response]):
|
class OpenAITestInterceptor(BaseInterceptor[httpx.Request, httpx.Response]):
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ from unittest.mock import Mock
|
|||||||
import httpx
|
import httpx
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from crewai.llms.hooks.base import BaseInterceptor
|
from crewai.llm.hooks.base import BaseInterceptor
|
||||||
from crewai.llms.hooks.transport import AsyncHTTPTransport, HTTPTransport
|
from crewai.llm.hooks.transport import AsyncHTTPTransport, HTTPTransport
|
||||||
|
|
||||||
|
|
||||||
class TrackingInterceptor(BaseInterceptor[httpx.Request, httpx.Response]):
|
class TrackingInterceptor(BaseInterceptor[httpx.Request, httpx.Response]):
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import httpx
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from crewai.llm import LLM
|
from crewai.llm import LLM
|
||||||
from crewai.llms.hooks.base import BaseInterceptor
|
from crewai.llm.hooks.base import BaseInterceptor
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
@pytest.fixture(autouse=True)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import openai
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from crewai.llm import LLM
|
from crewai.llm import LLM
|
||||||
from crewai.llms.providers.openai.completion import OpenAICompletion
|
from crewai.llm.providers.openai.completion import OpenAICompletion
|
||||||
from crewai.crew import Crew
|
from crewai.crew import Crew
|
||||||
from crewai.agent import Agent
|
from crewai.agent import Agent
|
||||||
from crewai.task import Task
|
from crewai.task import Task
|
||||||
@@ -29,7 +29,7 @@ def test_openai_completion_is_used_when_no_provider_prefix():
|
|||||||
"""
|
"""
|
||||||
llm = LLM(model="gpt-4o")
|
llm = LLM(model="gpt-4o")
|
||||||
|
|
||||||
from crewai.llms.providers.openai.completion import OpenAICompletion
|
from crewai.llm.providers.openai.completion import OpenAICompletion
|
||||||
assert isinstance(llm, OpenAICompletion)
|
assert isinstance(llm, OpenAICompletion)
|
||||||
assert llm.provider == "openai"
|
assert llm.provider == "openai"
|
||||||
assert llm.model == "gpt-4o"
|
assert llm.model == "gpt-4o"
|
||||||
@@ -63,7 +63,7 @@ def test_openai_completion_module_is_imported():
|
|||||||
"""
|
"""
|
||||||
Test that the completion module is properly imported when using OpenAI provider
|
Test that the completion module is properly imported when using OpenAI provider
|
||||||
"""
|
"""
|
||||||
module_name = "crewai.llms.providers.openai.completion"
|
module_name = "crewai.llm.providers.openai.completion"
|
||||||
|
|
||||||
# Remove module from cache if it exists
|
# Remove module from cache if it exists
|
||||||
if module_name in sys.modules:
|
if module_name in sys.modules:
|
||||||
@@ -114,7 +114,7 @@ def test_openai_completion_initialization_parameters():
|
|||||||
api_key="test-key"
|
api_key="test-key"
|
||||||
)
|
)
|
||||||
|
|
||||||
from crewai.llms.providers.openai.completion import OpenAICompletion
|
from crewai.llm.providers.openai.completion import OpenAICompletion
|
||||||
assert isinstance(llm, OpenAICompletion)
|
assert isinstance(llm, OpenAICompletion)
|
||||||
assert llm.model == "gpt-4o"
|
assert llm.model == "gpt-4o"
|
||||||
assert llm.temperature == 0.7
|
assert llm.temperature == 0.7
|
||||||
@@ -335,7 +335,7 @@ def test_openai_completion_call_returns_usage_metrics():
|
|||||||
def test_openai_raises_error_when_model_not_supported():
|
def test_openai_raises_error_when_model_not_supported():
|
||||||
"""Test that OpenAICompletion raises ValueError when model not supported"""
|
"""Test that OpenAICompletion raises ValueError when model not supported"""
|
||||||
|
|
||||||
with patch('crewai.llms.providers.openai.completion.OpenAI') as mock_openai_class:
|
with patch('crewai.llm.providers.openai.completion.OpenAI') as mock_openai_class:
|
||||||
mock_client = MagicMock()
|
mock_client = MagicMock()
|
||||||
mock_openai_class.return_value = mock_client
|
mock_openai_class.return_value = mock_client
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from typing import Any, Dict, List, Optional, Union
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from crewai import Agent, Crew, Process, Task
|
from crewai import Agent, Crew, Process, Task
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
from crewai.utilities.llm_utils import create_llm
|
from crewai.utilities.llm_utils import create_llm
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -743,7 +743,7 @@ def test_llm_emits_call_failed_event():
|
|||||||
error_message = "OpenAI API call failed: Simulated API failure"
|
error_message = "OpenAI API call failed: Simulated API failure"
|
||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
"crewai.llms.providers.openai.completion.OpenAICompletion._handle_completion"
|
"crewai.llm.providers.openai.completion.OpenAICompletion._handle_completion"
|
||||||
) as mock_handle_completion:
|
) as mock_handle_completion:
|
||||||
mock_handle_completion.side_effect = Exception("Simulated API failure")
|
mock_handle_completion.side_effect = Exception("Simulated API failure")
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from unittest.mock import patch
|
|||||||
|
|
||||||
from crewai.cli.constants import DEFAULT_LLM_MODEL
|
from crewai.cli.constants import DEFAULT_LLM_MODEL
|
||||||
from crewai.llm import LLM
|
from crewai.llm import LLM
|
||||||
from crewai.llms.base_llm import BaseLLM
|
from crewai.llm.base_llm import BaseLLM
|
||||||
from crewai.utilities.llm_utils import create_llm
|
from crewai.utilities.llm_utils import create_llm
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
|||||||
20
logs.txt
Normal file
20
logs.txt
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
lib/crewai/src/crewai/agent/core.py:901: error: Argument 1 has incompatible type "ToolFilterContext"; expected "dict[str, Any]" [arg-type]
|
||||||
|
lib/crewai/src/crewai/agent/core.py:901: note: Error code "arg-type" not covered by "type: ignore" comment
|
||||||
|
lib/crewai/src/crewai/agent/core.py:905: error: Argument 1 has incompatible type "dict[str, Any]"; expected "ToolFilterContext" [arg-type]
|
||||||
|
lib/crewai/src/crewai/agent/core.py:905: note: Error code "arg-type" not covered by "type: ignore" comment
|
||||||
|
lib/crewai/src/crewai/agent/core.py:996: error: Returning Any from function declared to return "dict[str, dict[str, Any]]" [no-any-return]
|
||||||
|
lib/crewai/src/crewai/agent/core.py:1157: error: Incompatible types in assignment (expression has type "tuple[UnionType, None]", target has type "tuple[type, Any]") [assignment]
|
||||||
|
lib/crewai/src/crewai/agent/core.py:1183: error: Argument 1 to "append" of "list" has incompatible type "type"; expected "type[str]" [arg-type]
|
||||||
|
lib/crewai/src/crewai/agent/core.py:1188: error: Incompatible types in assignment (expression has type "UnionType", variable has type "type[str]") [assignment]
|
||||||
|
lib/crewai/src/crewai/agent/core.py:1201: error: Argument 1 to "get" of "dict" has incompatible type "Any | None"; expected "str" [arg-type]
|
||||||
|
Found 7 errors in 1 file (checked 4 source files)
|
||||||
|
Success: no issues found in 4 source files
|
||||||
|
lib/crewai/src/crewai/llm/providers/gemini/completion.py:111: error: BaseModel field may only be overridden by another field [misc]
|
||||||
|
Found 1 error in 1 file (checked 4 source files)
|
||||||
|
Success: no issues found in 4 source files
|
||||||
|
lib/crewai/src/crewai/llm/providers/anthropic/completion.py:101: error: BaseModel field may only be overridden by another field [misc]
|
||||||
|
Found 1 error in 1 file (checked 4 source files)
|
||||||
|
lib/crewai/src/crewai/llm/providers/bedrock/completion.py:250: error: BaseModel field may only be overridden by another field [misc]
|
||||||
|
Found 1 error in 1 file (checked 4 source files)
|
||||||
|
|
||||||
|
uv-lock..............................................(no files to check)Skipped
|
||||||
Reference in New Issue
Block a user