* feat: add loading indicator when creating new agent * feat: reorder front page to avoid overflow and always show add button * feat: display function calls * feat: set up proxy during development & remove explicit inclusion of host/port in backend calls * fix: introduce api prefix, split up fastapi server to become more modular, use app directly instead of subprocess the api prefix allows us to create a proxy for frontend development that relays all /api requests to our fastapi, while serving the development files for other paths. splitting up the fastapi server will allow us to branch out and divide up the work better in the future. using the application directly in our cli instead of a subprocess makes debugging a thing in development and overall this python native way just seems cleaner. we can discuss if we should keep the api prefix or if we should distinguish between a REST only mode and one that also serves the static files for the GUI. This is just my initial take on things * chore: build latest frontend
66 lines
2.1 KiB
Python
66 lines
2.1 KiB
Python
from contextlib import asynccontextmanager
|
|
|
|
from fastapi import FastAPI
|
|
|
|
from starlette.middleware.cors import CORSMiddleware
|
|
|
|
from memgpt.server.rest_api.agents.index import setup_agents_index_router
|
|
from memgpt.server.rest_api.agents.command import setup_agents_command_router
|
|
from memgpt.server.rest_api.agents.config import setup_agents_config_router
|
|
from memgpt.server.rest_api.agents.memory import setup_agents_memory_router
|
|
from memgpt.server.rest_api.agents.message import setup_agents_message_router
|
|
from memgpt.server.rest_api.config.index import setup_config_index_router
|
|
from memgpt.server.server import SyncServer
|
|
from memgpt.server.rest_api.interface import QueuingInterface
|
|
from memgpt.server.rest_api.static_files import mount_static_files
|
|
|
|
"""
|
|
Basic REST API sitting on top of the internal MemGPT python server (SyncServer)
|
|
|
|
Start the server with:
|
|
cd memgpt/server/rest_api
|
|
poetry run uvicorn server:app --reload
|
|
"""
|
|
|
|
interface: QueuingInterface = QueuingInterface()
|
|
server: SyncServer = SyncServer(default_interface=interface)
|
|
|
|
|
|
API_PREFIX = "/api"
|
|
|
|
CORS_ORIGINS = [
|
|
"http://localhost:4200",
|
|
"http://localhost:4201",
|
|
"http://localhost:8283",
|
|
"http://127.0.0.1:4200",
|
|
"http://127.0.0.1:4201",
|
|
"http://127.0.0.1:8283",
|
|
]
|
|
|
|
app = FastAPI()
|
|
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=CORS_ORIGINS,
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
# /api/agents endpoints
|
|
app.include_router(setup_agents_command_router(server, interface), prefix=API_PREFIX)
|
|
app.include_router(setup_agents_config_router(server, interface), prefix=API_PREFIX)
|
|
app.include_router(setup_agents_index_router(server, interface), prefix=API_PREFIX)
|
|
app.include_router(setup_agents_memory_router(server, interface), prefix=API_PREFIX)
|
|
app.include_router(setup_agents_message_router(server, interface), prefix=API_PREFIX)
|
|
# /api/config endpoints
|
|
app.include_router(setup_config_index_router(server, interface), prefix=API_PREFIX)
|
|
# / static files
|
|
mount_static_files(app)
|
|
|
|
|
|
@app.on_event("shutdown")
|
|
def on_shutdown():
|
|
global server
|
|
server.save_agents()
|
|
server = None
|