import logging from dotenv import load_dotenv from jinja2 import Environment, TemplateNotFound import warnings import os from fastapi import Depends, FastAPI, Response from fastapi.staticfiles import StaticFiles import api.solutions from dependencies import get_prompt_templates, init_dependencies import api.docs import api.requirements from schemas import * from fastapi.middleware.cors import CORSMiddleware load_dotenv() logging.basicConfig( level=logging.DEBUG if (os.environ.get( "DEBUG_LOG", "0") == "1") else logging.INFO, format='[%(asctime)s][%(levelname)s][%(filename)s:%(lineno)d]: %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) logging.info(f"Set `DEBUG_LOG` env var to 1 to enable debug logging.") # Initialize global dependencies init_dependencies() warnings.filterwarnings("ignore") app = FastAPI(title="Requirements Extractor", docs_url="/apidocs") app.add_middleware(CORSMiddleware, allow_credentials=True, allow_headers=[ "*"], allow_methods=["*"], allow_origins=["*"]) app.include_router(api.docs.router, prefix="/docs") app.include_router(api.requirements.router, prefix="/requirements") app.include_router(api.solutions.router, prefix="/solutions") # INTERNAL ROUTE TO RETRIEVE PROMPT TEMPLATES FOR PRIVATE COMPUTE @app.get("/prompt/{task}", include_in_schema=True) async def retrieve_prompt(task: str, prompt_env: Environment = Depends(get_prompt_templates)): """Retrieves a prompt for client-side private inference""" try: logging.debug( f"Retrieving template for on device private task {task}.") prompt, filename, _ = prompt_env.loader.get_source( prompt_env, f"private/{task}.txt") return prompt except TemplateNotFound as _: return Response(content="", status_code=404) app.mount("/", StaticFiles(directory="static", html=True), name="static")