|  | @@ -0,0 +1,37 @@
 | 
	
		
			
				|  |  | +from typing import Any
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +from langchain.utilities import ArxivAPIWrapper
 | 
	
		
			
				|  |  | +from pydantic import BaseModel, Field
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +from core.tools.entities.tool_entities import ToolInvokeMessage
 | 
	
		
			
				|  |  | +from core.tools.tool.builtin_tool import BuiltinTool
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +class ArxivSearchInput(BaseModel):
 | 
	
		
			
				|  |  | +    query: str = Field(..., description="Search query.")
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +class ArxivSearchTool(BuiltinTool):
 | 
	
		
			
				|  |  | +    """
 | 
	
		
			
				|  |  | +    A tool for searching articles on Arxiv.
 | 
	
		
			
				|  |  | +    """
 | 
	
		
			
				|  |  | +    def _invoke(self, user_id: str, tool_parameters: dict[str, Any]) -> ToolInvokeMessage | list[ToolInvokeMessage]:
 | 
	
		
			
				|  |  | +        """
 | 
	
		
			
				|  |  | +        Invokes the Arxiv search tool with the given user ID and tool parameters.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Args:
 | 
	
		
			
				|  |  | +            user_id (str): The ID of the user invoking the tool.
 | 
	
		
			
				|  |  | +            tool_parameters (dict[str, Any]): The parameters for the tool, including the 'query' parameter.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Returns:
 | 
	
		
			
				|  |  | +            ToolInvokeMessage | list[ToolInvokeMessage]: The result of the tool invocation, which can be a single message or a list of messages.
 | 
	
		
			
				|  |  | +        """
 | 
	
		
			
				|  |  | +        query = tool_parameters.get('query', '')
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if not query:
 | 
	
		
			
				|  |  | +            return self.create_text_message('Please input query')
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        arxiv = ArxivAPIWrapper()
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        response = arxiv.run(query)
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        return self.create_text_message(self.summary(user_id=user_id, content=response))
 |