diff --git a/pyproject.toml b/pyproject.toml index 5084b915..c483e10a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,7 @@ dependencies = [ "jinja2>=3.1.3,<4", "mcp[cli]>=1.4.1", "scale-gp>=0.1.0a59", - "openai-agents>=0.0.7", + "openai-agents>=0.0.7,!=0.2.3", # 0.2.3 bug - https://github.com/openai/openai-agents-python/issues/1276 "tzlocal>=5.3.1", "tzdata>=2025.2", "pytest>=8.4.0", diff --git a/src/agentex/lib/types/converters.py b/src/agentex/lib/types/converters.py new file mode 100644 index 00000000..5b876a1c --- /dev/null +++ b/src/agentex/lib/types/converters.py @@ -0,0 +1,60 @@ +from agentex.types.task_message import TaskMessage +from agentex.types.text_content import TextContent +from agentex.types.tool_request_content import ToolRequestContent +from agentex.types.tool_response_content import ToolResponseContent +import json +from agents import TResponseInputItem + + +def convert_task_messages_to_oai_agents_inputs( + task_messages: list[TaskMessage], +) -> list[TResponseInputItem]: + """ + Convert a list of TaskMessages to a list of OpenAI Agents SDK inputs (TResponseInputItem). + + Args: + task_messages: The list of TaskMessages to convert. + + Returns: + A list of OpenAI Agents SDK inputs (TResponseInputItem). + """ + converted_messages = [] + for task_message in task_messages: + task_message_content = task_message.content + if isinstance(task_message_content, TextContent): + converted_messages.append( + { + "role": ( + "user" if task_message_content.author == "user" else "assistant" + ), + "content": task_message_content.content, + } + ) + elif isinstance(task_message_content, ToolRequestContent): + converted_messages.append( + { + "type": "function_call", + "call_id": task_message_content.tool_call_id, + "name": task_message_content.name, + "arguments": json.dumps(task_message_content.arguments), + } + ) + elif isinstance(task_message_content, ToolResponseContent): + content_str = ( + task_message_content.content + if isinstance(task_message_content.content, str) + else json.dumps(task_message_content.content) + ) + converted_messages.append( + { + "type": "function_call_output", + "call_id": task_message_content.tool_call_id, + "output": content_str, + } + ) + else: + raise ValueError( + f"Unsupported content type for converting TaskMessage to OpenAI Agents SDK input: {type(task_message.content)}" + ) + + return converted_messages