From e7117cfbc2c8247656eb38cf173dbfd43bbb2046 Mon Sep 17 00:00:00 2001 From: MervinPraison Date: Sun, 19 Apr 2026 01:14:59 +0100 Subject: [PATCH] fix(motion-graphics): correct FileTools import path and constructor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Post-merge fixes for #27 caught via live end-to-end run of motion_graphics_team: - agent.py / team.py: import FileTools from praisonaiagents.tools.file_tools (not praisonaiagents.tools). FileTools is not exported via the tools package __getattr__, so 'from praisonaiagents.tools import FileTools' raises ImportError in production and causes motion_graphics_team() and create_motion_graphics_agent() to both fail with the generic 'praisonaiagents not available' ImportError. - agent.py: drop the base_dir kwarg when instantiating FileTools — the class takes no constructor args (methods are bound directly). - team.py: also catch AttributeError alongside ImportError so lazy attribute failures fall back cleanly to None stubs. - pyproject.toml: bump version 0.2.24 -> 0.2.25 Unit tests continue to pass because they mock out praisonaiagents. The bug only surfaces in live runs. Follow-up: add one non-mocked smoke test that actually instantiates motion_graphics_team(). --- praisonai_tools/video/motion_graphics/agent.py | 8 +++++--- praisonai_tools/video/motion_graphics/team.py | 8 +++++--- pyproject.toml | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/praisonai_tools/video/motion_graphics/agent.py b/praisonai_tools/video/motion_graphics/agent.py index f73c56d..11953af 100644 --- a/praisonai_tools/video/motion_graphics/agent.py +++ b/praisonai_tools/video/motion_graphics/agent.py @@ -6,7 +6,7 @@ try: from praisonaiagents import Agent - from praisonaiagents.tools import FileTools + from praisonaiagents.tools.file_tools import FileTools except ImportError: # Fallback for development Agent = None @@ -193,8 +193,10 @@ def create_motion_graphics_agent( Workspace directory: {workspace} """ - # Create tools - file_tools = FileTools(base_dir=str(workspace)) + # Create tools. + # FileTools is a utility class with bound methods; pass the instance so the + # Agent can register read_file/write_file/list_files as callable tools. + file_tools = FileTools() render_tools = RenderTools(render_backend, workspace, max_retries) # Create agent diff --git a/praisonai_tools/video/motion_graphics/team.py b/praisonai_tools/video/motion_graphics/team.py index e20c0d7..9d0d75a 100644 --- a/praisonai_tools/video/motion_graphics/team.py +++ b/praisonai_tools/video/motion_graphics/team.py @@ -6,9 +6,11 @@ try: from praisonaiagents import Agent, AgentTeam - from praisonaiagents.tools import FileTools, search_web -except ImportError: - # Fallback for development + from praisonaiagents.tools.file_tools import FileTools + # search_web is lazily resolved via praisonaiagents.tools.__getattr__ + from praisonaiagents.tools import search_web +except (ImportError, AttributeError): + # Fallback for development / partial installs Agent = None AgentTeam = None FileTools = None diff --git a/pyproject.toml b/pyproject.toml index 7ca2f13..b18d027 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "praisonai-tools" -version = "0.2.24" +version = "0.2.25" description = "Extended tools for PraisonAI Agents" authors = [ {name = "Mervin Praison"}