"""Entry point - starts ContextForge server and metrics collector.""" import asyncio import logging import uvicorn from contextforge.config import settings from contextforge.metrics.collector import MetricsCollector from contextforge.mcp.server import app, metrics_loop logging.basicConfig( level=logging.INFO, format="%(asctime)s | %(levelname)s | %(name)s | %(message)s", ) logger = logging.getLogger(__name__) async def main(): """Start ContextForge server.""" logger.info("Starting ContextForge...") logger.info(f"Host: {settings.contextforge_host}:{settings.contextforge_port}") logger.info(f"vLLM: {settings.vllm_base_url}") logger.info(f"Model: {settings.vllm_model}") # Start background metrics collector metrics_task = asyncio.create_task(metrics_loop()) try: config = uvicorn.Config( app, host=settings.contextforge_host, port=settings.contextforge_port, log_level="info", ) server = uvicorn.Server(config) await server.serve() finally: metrics_task.cancel() if __name__ == "__main__": asyncio.run(main())