From 8afbd2b07112e4c377ae9869cf542394981a78b2 Mon Sep 17 00:00:00 2001 From: lorenzejay Date: Fri, 11 Apr 2025 12:00:12 -0700 Subject: [PATCH] feat: enhance OpenAIAgentAdapter with configurable agent properties - Refactored OpenAIAgentAdapter to accept agent configuration as an argument. - Introduced a method to build a system prompt for the OpenAI agent, improving task execution context. - Updated initialization to utilize role, goal, and backstory from kwargs, enhancing flexibility in agent setup. - Improved tool handling and integration within the adapter. --- .../openai_agents/openai_adapter.py | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/src/crewai/agents/agent_adapters/openai_agents/openai_adapter.py b/src/crewai/agents/agent_adapters/openai_agents/openai_adapter.py index d0f74f0c4..562d10322 100644 --- a/src/crewai/agents/agent_adapters/openai_agents/openai_adapter.py +++ b/src/crewai/agents/agent_adapters/openai_agents/openai_adapter.py @@ -1,7 +1,7 @@ -from typing import Any, List, Optional +from typing import Any, Dict, List, Optional from agents import Agent as OpenAIAgent -from agents import Runner, Tool, enable_verbose_stdout_logging +from agents import Runner, enable_verbose_stdout_logging from pydantic import Field, PrivateAttr from crewai.agents.agent_adapters.base_agent_adapter import BaseAgentAdapter @@ -36,24 +36,40 @@ class OpenAIAgentAdapter(BaseAgentAdapter): def __init__( self, - openai_agent: OpenAIAgent, model: str = "gpt-4o-mini", tools: Optional[List[BaseTool]] = None, + agent_config: Optional[dict] = None, **kwargs, ): + role = kwargs.pop("role", None) + goal = kwargs.pop("goal", None) + backstory = kwargs.pop("backstory", None) super().__init__( - role=openai_agent.name, - goal=openai_agent.instructions, - backstory=openai_agent.instructions, + role=role, + goal=goal, + backstory=backstory, + agent_config=agent_config, **kwargs, ) - self._openai_agent = openai_agent - self._openai_agent.model = model + self.tools = tools self.tools = tools self._tool_adapter = OpenAIAgentToolAdapter(tools=tools) self.llm = model self._converter_adapter = OpenAIConverterAdapter(self) + def _build_system_prompt(self) -> str: + """Build a system prompt for the OpenAI agent.""" + base_prompt = f""" + You are {self.role}. + + Your goal is: {self.goal} + + Your backstory: {self.backstory} + + When working on tasks, think step-by-step and use the available tools when necessary. + """ + return self._converter_adapter.enhance_system_prompt(base_prompt) + def execute_task( self, task: Any, @@ -106,6 +122,13 @@ class OpenAIAgentAdapter(BaseAgentAdapter): """ all_tools = list(self.tools or []) + list(tools or []) + self._openai_agent = OpenAIAgent( + name=self.role, + instructions=self._build_system_prompt(), + model=self.llm, + **self._agent_config or {}, + ) + if all_tools: self.configure_tools(all_tools)