mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-01-09 07:08:09 -05:00
We'll soon be needing a more feature-complete external API. To make way for this, I'm moving some files around so: - We can more easily create new versions of our external API - The file structure of our internal API is more homogeneous These changes are quite opinionated, but IMO in any case they're better than the chaotic structure we have now. ### Changes 🏗️ - Move `backend/server` -> `backend/api` - Move `backend/server/routers` + `backend/server/v2` -> `backend/api/features` - Change absolute sibling imports to relative imports - Move `backend/server/v2/AutoMod` -> `backend/executor/automod` - Combine `backend/server/routers/analytics_*test.py` -> `backend/api/features/analytics_test.py` - Sort OpenAPI spec file ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - CI tests - [x] Clicking around in the app -> no obvious breakage
57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
import logging
|
|
from typing import TYPE_CHECKING
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv()
|
|
|
|
if TYPE_CHECKING:
|
|
from backend.util.process import AppProcess
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def run_processes(*processes: "AppProcess", **kwargs):
|
|
"""
|
|
Execute all processes in the app. The last process is run in the foreground.
|
|
Includes enhanced error handling and process lifecycle management.
|
|
"""
|
|
try:
|
|
# Run all processes except the last one in the background.
|
|
for process in processes[:-1]:
|
|
process.start(background=True, **kwargs)
|
|
|
|
# Run the last process in the foreground.
|
|
processes[-1].start(background=False, **kwargs)
|
|
finally:
|
|
for process in processes:
|
|
try:
|
|
process.stop()
|
|
except Exception as e:
|
|
logger.exception(f"[{process.service_name}] unable to stop: {e}")
|
|
|
|
|
|
def main(**kwargs):
|
|
"""
|
|
Run all the processes required for the AutoGPT-server (REST and WebSocket APIs).
|
|
"""
|
|
|
|
from backend.api.rest_api import AgentServer
|
|
from backend.api.ws_api import WebsocketServer
|
|
from backend.executor import DatabaseManager, ExecutionManager, Scheduler
|
|
from backend.notifications import NotificationManager
|
|
|
|
run_processes(
|
|
DatabaseManager().set_log_level("warning"),
|
|
Scheduler(),
|
|
NotificationManager(),
|
|
WebsocketServer(),
|
|
AgentServer(),
|
|
ExecutionManager(),
|
|
**kwargs,
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|