| 
					
				 | 
			
			
				@@ -0,0 +1,29 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import logging 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from datetime import datetime, timezone 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from typing import Any, Dict, List, Union 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from core.tools.entities.tool_entities import ToolInvokeMessage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from core.tools.tool.builtin_tool import BuiltinTool 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from pytz import timezone as pytz_timezone 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import numexpr as ne 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class EvaluateExpressionTool(BuiltinTool): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def _invoke(self,  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                user_id: str, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               tool_parameters: Dict[str, Any],  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ) -> Union[ToolInvokeMessage, List[ToolInvokeMessage]]: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            invoke tools 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # get expression 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        expression = tool_parameters.get('expression', '').strip() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if not expression: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return self.create_text_message('Invalid expression') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            result = ne.evaluate(expression) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            result_str = str(result) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        except Exception as e: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            logging.exception(f'Error evaluating expression: {expression}') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return self.create_text_message(f'Invalid expression: {expression}, error: {str(e)}') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return self.create_text_message(f'The result of the expression "{expression}" is {result_str}') 
			 |