| """ |
| FastAPI Backend for Archon Knowledge Engine |
| |
| This is the main entry point for the Archon backend API. |
| It uses a modular approach with separate API modules for different functionality. |
| |
| Modules: |
| - settings_api: Settings and credentials management |
| - mcp_api: MCP server management and tool execution |
| - knowledge_api: Knowledge base, crawling, and RAG operations |
| - projects_api: Project and task management with streaming |
| """ |
| |
|
|
| import os |
| import warnings |
|
|
| from dotenv import find_dotenv, load_dotenv |
|
|
| load_dotenv(find_dotenv(), override=True) |
|
|
| |
| warnings.filterwarnings("ignore", message=".*LambdaRuntimeClient.*") |
| warnings.filterwarnings("ignore", category=DeprecationWarning, module="transformers") |
| |
| warnings.filterwarnings("ignore", category=DeprecationWarning, module="fastapi") |
| warnings.filterwarnings("ignore", message=".*regex.*") |
|
|
| import logging |
|
|
| try: |
| import transformers.utils.logging as transformers_logging |
| transformers_logging.set_verbosity_error() |
| except ImportError: |
| pass |
| logging.getLogger("transformers").setLevel(logging.ERROR) |
|
|
| from fastapi import FastAPI |
| from fastapi.middleware.cors import CORSMiddleware |
|
|
| from src.server.core import ( |
| check_system_health, |
| global_exception_handler, |
| lifespan, |
| ) |
|
|
| from .api_routes.admin_api import router as admin_router |
| from .api_routes.agent_chat_api import router as agent_chat_router |
| from .api_routes.agents_api import router as agents_router |
| from .api_routes.audio_api import router as audio_router |
| from .api_routes.auth_api import router as auth_router |
| from .api_routes.blog_api import router as blog_router |
| from .api_routes.bug_report_api import router as bug_report_router |
| from .api_routes.changes_api import router as changes_router |
| from .api_routes.ethics_api import router as ethics_router |
| from .api_routes.extraction_api import router as extraction_router |
| from .api_routes.game_api import router as game_router |
| from .api_routes.internal_api import router as internal_router |
| from .api_routes.internal_llm_api import router as internal_llm_router |
| from .api_routes.knowledge_api import router as knowledge_router |
| from .api_routes.log_api import router as log_router |
| from .api_routes.marketing_api import router as marketing_router |
| from .api_routes.mcp_api import router as mcp_api_router |
| from .api_routes.migration_api import router as migration_router |
| from .api_routes.progress_api import router as progress_router |
| from .api_routes.projects_api import router as projects_router |
| from .api_routes.prompts_api import router as prompts_router |
| from .api_routes.providers_api import router as providers_router |
| from .api_routes.rag_api import router as rag_router |
| from .api_routes.settings_api import router as settings_router |
| from .api_routes.sse_api import router as sse_router |
| from .api_routes.stats_api import router as stats_router |
| from .api_routes.system_api import router as system_router |
| from .api_routes.test_api import router as test_api_router |
| from .api_routes.version_api import router as version_router |
| from .api_routes.visit_log_api import router as visit_log_router |
| from .middleware.budget_guard import BudgetGuardMiddleware |
|
|
| |
|
|
| |
| app = FastAPI( |
| title="Archon Knowledge Engine API", |
| description="Backend API for the Archon knowledge management and project automation platform", |
| version="1.0.0", |
| lifespan=lifespan, |
| ) |
|
|
| app.add_exception_handler(Exception, global_exception_handler) |
|
|
| |
| origins = [ |
| "https://archon-ui-wiwy.onrender.com", |
| "https://enduser-ui-fe.onrender.com", |
| "http://localhost:5173", |
| "http://127.0.0.1:5173", |
| "http://localhost:3000", |
| "http://localhost:3737", |
| "http://enduser-ui:5173", |
| "http://archon-ui:3737", |
| ] |
| app.add_middleware( |
| CORSMiddleware, |
| allow_origins=origins, |
| allow_credentials=True, |
| allow_methods=["*"], |
| allow_headers=["*"], |
| ) |
| app.add_middleware(BudgetGuardMiddleware) |
|
|
|
|
| app.include_router(test_api_router) |
| app.include_router(internal_llm_router) |
|
|
|
|
| |
| @app.middleware("http") |
| async def skip_health_check_logs(request, call_next): |
| |
| if request.url.path in ["/health", "/api/health"]: |
| |
| import logging |
|
|
| logger = logging.getLogger("uvicorn.access") |
| old_level = logger.level |
| logger.setLevel(logging.ERROR) |
| response = await call_next(request) |
| logger.setLevel(old_level) |
| return response |
| return await call_next(request) |
|
|
|
|
| |
| |
| app.include_router(projects_router) |
| app.include_router(marketing_router) |
| app.include_router(admin_router) |
| app.include_router(blog_router) |
| app.include_router(stats_router) |
| app.include_router(mcp_api_router) |
| app.include_router(visit_log_router) |
| app.include_router(version_router) |
| app.include_router(log_router) |
| app.include_router(bug_report_router) |
| app.include_router(changes_router) |
| app.include_router(extraction_router) |
| app.include_router(ethics_router) |
| app.include_router(providers_router) |
| app.include_router(migration_router) |
| app.include_router(system_router) |
| app.include_router(sse_router) |
| app.include_router(agent_chat_router) |
| app.include_router(audio_router) |
| app.include_router(progress_router) |
| app.include_router(knowledge_router) |
| app.include_router(agents_router) |
| app.include_router(prompts_router) |
|
|
| |
| app.include_router(auth_router, prefix="/api") |
| app.include_router(settings_router, prefix="/api") |
| app.include_router(game_router, prefix="/api") |
| app.include_router(rag_router, prefix="/api") |
| app.include_router(internal_router) |
|
|
| app.include_router(test_api_router) |
|
|
|
|
| |
| @app.get("/") |
| @app.head("/") |
| async def root(): |
| """Root endpoint returning API information.""" |
| return { |
| "name": "Archon Knowledge Engine API", |
| "version": "1.0.0", |
| "description": "Backend API for knowledge management and project automation", |
| "status": "healthy", |
| "modules": ["settings", "mcp", "mcp-clients", "knowledge", "projects"], |
| } |
|
|
|
|
| |
| @app.get("/health") |
| @app.head("/health") |
| async def health_check_route(): |
| """Health check endpoint that indicates true readiness including credential loading.""" |
| return await check_system_health() |
|
|
|
|
| |
| @app.get("/api/health") |
| async def api_health_check_route(): |
| """API health check endpoint - alias for /health.""" |
| return await check_system_health() |
|
|
|
|
| |
|
|
|
|
| def main(): |
| """Main entry point for running the server.""" |
| import uvicorn |
|
|
| |
| server_port = os.getenv("ARCHON_SERVER_PORT") |
| if not server_port: |
| raise ValueError( |
| "ARCHON_SERVER_PORT environment variable is required. " |
| "Please set it in your .env file or environment. " |
| "Default value: 8181" |
| ) |
|
|
| uvicorn.run( |
| "src.server.main:app", |
| host="0.0.0.0", |
| port=int(server_port), |
| reload=True, |
| log_level="info", |
| ) |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|