import os from langchain.tools.base import BaseTool from langchain.callbacks.manager import CallbackManagerForToolRun import requests from typing import Optional from langchain_community.tools import DuckDuckGoSearchRun class MediaInfoSearchTool(BaseTool): name: str = "duckduckgo_search" description: str = '''Useful for searching the web using DuckDuckGo for information about \ movies and TV shows, actors and directors. To be used only on imdb.com adding relative keyword imdb to query to filter results. Input should be a search query, and the tool will return relevant results.''' def _run(self, query: str, run_manager: Optional[CallbackManagerForToolRun] = None) -> str: """Perform a DuckDuckGo search.""" try: search_tool = DuckDuckGoSearchRun() return search_tool.run(query) except Exception as e: return f"Error performing DuckDuckGo search: {str(e)}" class MoviesAdviceSearchTool(BaseTool): name: str = "movies_advice_search" description: str = '''Useful for searching the web using DuckDuckGo for movie recommendations and similar content to a given title or plot. prefer searching on one (on your preference) known trustworthy sites. add relative keyword (like "reddit" for reddit.com for example) to query to filter results only on that site. Input should be a search query, and the tool will return relevant results.''' def _run(self, query: str, run_manager: Optional[CallbackManagerForToolRun] = None) -> str: """Perform a DuckDuckGo search.""" try: search_tool = DuckDuckGoSearchRun() search_results = search_tool.run(query) return search_results except Exception as e: return f"Error performing DuckDuckGo search: {str(e)}"