sarveshpatel commited on
Commit
b271154
·
verified ·
1 Parent(s): 7094811

Create app/routes/tools.py

Browse files
Files changed (1) hide show
  1. app/routes/tools.py +95 -0
app/routes/tools.py ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Direct REST API endpoints for each tool (non-MCP access)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import logging
6
+
7
+ from fastapi import APIRouter
8
+
9
+ from app.environment import configure_environment, get_environment_config
10
+ from app.executor import get_executor
11
+ from app.file_manager import FileManager
12
+ from app.models import (
13
+ AppendToCodeFileRequest,
14
+ CheckInstalledPackagesRequest,
15
+ ConfigureEnvironmentRequest,
16
+ ExecuteCodeRequest,
17
+ ExecutionResult,
18
+ FilePathRequest,
19
+ FileResult,
20
+ InitializeCodeFileRequest,
21
+ InstallDependenciesRequest,
22
+ )
23
+ from app.package_manager import get_package_manager
24
+
25
+ logger = logging.getLogger(__name__)
26
+
27
+ router = APIRouter(prefix="/tools", tags=["tools"])
28
+
29
+
30
+ @router.post("/execute_code", response_model=ExecutionResult)
31
+ async def execute_code(request: ExecuteCodeRequest) -> ExecutionResult:
32
+ """Execute Python code directly."""
33
+ executor = get_executor()
34
+ return await executor.execute_code(request.code, request.filename)
35
+
36
+
37
+ @router.post("/install_dependencies")
38
+ async def install_dependencies(request: InstallDependenciesRequest):
39
+ """Install Python packages."""
40
+ pm = get_package_manager()
41
+ return await pm.install_packages(request.packages)
42
+
43
+
44
+ @router.post("/check_installed_packages")
45
+ async def check_installed_packages(request: CheckInstalledPackagesRequest):
46
+ """Check if packages are installed."""
47
+ pm = get_package_manager()
48
+ results = await pm.check_packages(request.packages)
49
+ return [r.model_dump() for r in results]
50
+
51
+
52
+ @router.post("/configure_environment")
53
+ async def configure_env(request: ConfigureEnvironmentRequest):
54
+ """Reconfigure the execution environment."""
55
+ config = configure_environment(
56
+ env_type=request.type,
57
+ conda_name=request.conda_name,
58
+ venv_path=request.venv_path,
59
+ uv_venv_path=request.uv_venv_path,
60
+ )
61
+ return config.model_dump()
62
+
63
+
64
+ @router.get("/get_environment_config")
65
+ async def get_env_config():
66
+ """Get current environment configuration."""
67
+ return get_environment_config().model_dump()
68
+
69
+
70
+ @router.post("/initialize_code_file", response_model=FileResult)
71
+ async def initialize_code_file(request: InitializeCodeFileRequest) -> FileResult:
72
+ """Create a new Python file with initial content."""
73
+ fm = FileManager()
74
+ return fm.create_file(request.content, request.filename)
75
+
76
+
77
+ @router.post("/append_to_code_file", response_model=FileResult)
78
+ async def append_to_code_file(request: AppendToCodeFileRequest) -> FileResult:
79
+ """Append content to an existing code file."""
80
+ fm = FileManager()
81
+ return fm.append_to_file(request.file_path, request.content)
82
+
83
+
84
+ @router.post("/execute_code_file", response_model=ExecutionResult)
85
+ async def execute_code_file(request: FilePathRequest) -> ExecutionResult:
86
+ """Execute an existing Python file."""
87
+ executor = get_executor()
88
+ return await executor.execute_file(request.file_path)
89
+
90
+
91
+ @router.post("/read_code_file", response_model=FileResult)
92
+ async def read_code_file(request: FilePathRequest) -> FileResult:
93
+ """Read content of an existing code file."""
94
+ fm = FileManager()
95
+ return fm.read_file(request.file_path)