Spaces:
Running
Running
File size: 9,826 Bytes
9a6a4dc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 |
"""
AGNO-compatible wrapper for Phase 3 mathematical code execution tools.
This module provides AGNO-compatible tool classes that wrap the existing
Phase 3 mathematical code execution functionality to resolve Pydantic validation errors.
"""
import logging
from typing import Any, Dict, List, Optional
from tools.code_execution_tool import get_code_execution_tools
from tools.mathematical_engine import get_mathematical_engine_tools
from tools.code_analyzer import get_code_analyzer_tools
logger = logging.getLogger(__name__)
class AGNOCodeExecutionTool:
"""AGNO-compatible wrapper for Phase 3 code execution tools."""
def __init__(self):
"""Initialize the AGNO-compatible code execution tool."""
self.name = "agno_code_execution"
self.description = "Execute Python code securely with comprehensive error handling and result formatting"
self.available = False
self._phase3_tools = {}
try:
# Get Phase 3 code execution tools
phase3_tools = get_code_execution_tools()
if phase3_tools:
# Store the Phase 3 tools by name for easy access
for tool in phase3_tools:
self._phase3_tools[tool['name']] = tool['function']
self.available = True
logger.info(f"β
AGNO Code Execution Tool initialized with {len(phase3_tools)} Phase 3 tools")
else:
logger.warning("β οΈ No Phase 3 code execution tools available")
except Exception as e:
logger.error(f"β Failed to initialize AGNO Code Execution Tool: {e}")
def execute_python_code(self, code: str, timeout: int = 30) -> Dict[str, Any]:
"""Execute Python code using Phase 3 code execution functionality."""
if not self.available or 'execute_python_code' not in self._phase3_tools:
return {
'success': False,
'error': 'Code execution tool not available',
'result': None
}
try:
# Use the Phase 3 code execution function
phase3_func = self._phase3_tools['execute_python_code']
result = phase3_func(code, timeout)
return result
except Exception as e:
logger.error(f"β Code execution failed: {e}")
return {
'success': False,
'error': str(e),
'result': None
}
def analyze_code_structure(self, code: str) -> Dict[str, Any]:
"""Analyze code structure using Phase 3 functionality."""
if not self.available or 'analyze_code_structure' not in self._phase3_tools:
return {
'success': False,
'error': 'Code analysis tool not available',
'result': None
}
try:
# Use the Phase 3 code analysis function
phase3_func = self._phase3_tools['analyze_code_structure']
result = phase3_func(code)
return result
except Exception as e:
logger.error(f"β Code analysis failed: {e}")
return {
'success': False,
'error': str(e),
'result': None
}
class AGNOMathematicalEngineTool:
"""AGNO-compatible wrapper for Phase 3 mathematical engine tools."""
def __init__(self):
"""Initialize the AGNO-compatible mathematical engine tool."""
self.name = "agno_mathematical_engine"
self.description = "Advanced mathematical computations using SymPy, NumPy, and SciPy"
self.available = False
self._phase3_tools = {}
try:
# Get Phase 3 mathematical engine tools
phase3_tools = get_mathematical_engine_tools()
if phase3_tools:
# Store the Phase 3 tools by name for easy access
for tool in phase3_tools:
self._phase3_tools[tool['name']] = tool['function']
self.available = True
logger.info(f"β
AGNO Mathematical Engine Tool initialized with {len(phase3_tools)} Phase 3 tools")
else:
logger.warning("β οΈ No Phase 3 mathematical engine tools available")
except Exception as e:
logger.error(f"β Failed to initialize AGNO Mathematical Engine Tool: {e}")
def solve_mathematical_expression(self, expression: str, variables: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
"""Solve mathematical expressions using Phase 3 mathematical engine."""
if not self.available or 'solve_mathematical_expression' not in self._phase3_tools:
return {
'success': False,
'error': 'Mathematical engine tool not available',
'result': None
}
try:
# Use the Phase 3 mathematical engine function
phase3_func = self._phase3_tools['solve_mathematical_expression']
result = phase3_func(expression, variables)
return result
except Exception as e:
logger.error(f"β Mathematical computation failed: {e}")
return {
'success': False,
'error': str(e),
'result': None
}
def compute_numerical_analysis(self, operation: str, data: List[float], **kwargs) -> Dict[str, Any]:
"""Perform numerical analysis using Phase 3 functionality."""
if not self.available or 'compute_numerical_analysis' not in self._phase3_tools:
return {
'success': False,
'error': 'Numerical analysis tool not available',
'result': None
}
try:
# Use the Phase 3 numerical analysis function
phase3_func = self._phase3_tools['compute_numerical_analysis']
result = phase3_func(operation, data, **kwargs)
return result
except Exception as e:
logger.error(f"β Numerical analysis failed: {e}")
return {
'success': False,
'error': str(e),
'result': None
}
class AGNOCodeAnalyzerTool:
"""AGNO-compatible wrapper for Phase 3 code analyzer tools."""
def __init__(self):
"""Initialize the AGNO-compatible code analyzer tool."""
self.name = "agno_code_analyzer"
self.description = "Comprehensive code analysis including complexity, security, and quality metrics"
self.available = False
self._phase3_tools = {}
try:
# Get Phase 3 code analyzer tools
phase3_tools = get_code_analyzer_tools()
if phase3_tools:
# Store the Phase 3 tools by name for easy access
for tool in phase3_tools:
self._phase3_tools[tool['name']] = tool['function']
self.available = True
logger.info(f"β
AGNO Code Analyzer Tool initialized with {len(phase3_tools)} Phase 3 tools")
else:
logger.warning("β οΈ No Phase 3 code analyzer tools available")
except Exception as e:
logger.error(f"β Failed to initialize AGNO Code Analyzer Tool: {e}")
def analyze_code_quality(self, code: str) -> Dict[str, Any]:
"""Analyze code quality using Phase 3 functionality."""
if not self.available or 'analyze_code_quality' not in self._phase3_tools:
return {
'success': False,
'error': 'Code quality analyzer not available',
'result': None
}
try:
# Use the Phase 3 code quality analysis function
phase3_func = self._phase3_tools['analyze_code_quality']
result = phase3_func(code)
return result
except Exception as e:
logger.error(f"β Code quality analysis failed: {e}")
return {
'success': False,
'error': str(e),
'result': None
}
def check_code_security(self, code: str) -> Dict[str, Any]:
"""Check code security using Phase 3 functionality."""
if not self.available or 'check_code_security' not in self._phase3_tools:
return {
'success': False,
'error': 'Code security checker not available',
'result': None
}
try:
# Use the Phase 3 code security check function
phase3_func = self._phase3_tools['check_code_security']
result = phase3_func(code)
return result
except Exception as e:
logger.error(f"β Code security check failed: {e}")
return {
'success': False,
'error': str(e),
'result': None
}
def create_agno_compatible_math_tools() -> List[Any]:
"""Create AGNO-compatible mathematical code execution tools."""
tools = []
# Create AGNO-compatible code execution tool
code_exec_tool = AGNOCodeExecutionTool()
if code_exec_tool.available:
tools.append(code_exec_tool)
# Create AGNO-compatible mathematical engine tool
math_engine_tool = AGNOMathematicalEngineTool()
if math_engine_tool.available:
tools.append(math_engine_tool)
# Create AGNO-compatible code analyzer tool
code_analyzer_tool = AGNOCodeAnalyzerTool()
if code_analyzer_tool.available:
tools.append(code_analyzer_tool)
logger.info(f"β
Created {len(tools)} AGNO-compatible mathematical code execution tools")
return tools |