File size: 2,160 Bytes
1b57e39
 
5ef0f8d
 
e97be0e
1b57e39
c1faac1
 
e97be0e
546fbbe
f6bffda
e97be0e
5ef0f8d
 
 
040cfa1
1392287
03e159d
040cfa1
 
c1faac1
 
 
035141c
 
c1faac1
 
 
 
5ef0f8d
 
 
1b57e39
040cfa1
 
 
 
1392287
040cfa1
9829679
c1faac1
 
 
4e54efb
5ef0f8d
 
f6bffda
e97be0e
 
 
 
 
 
6edfd36
e97be0e
 
 
 
 
 
 
035141c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import asyncio
import logging
from dotenv import load_dotenv
from typing import Literal
from jinja2 import Environment, TemplateNotFound
import nltk
import warnings
import os
from fastapi import Depends, FastAPI, BackgroundTasks, HTTPException, Request, Response
from fastapi.staticfiles import StaticFiles
import api.solutions
from dependencies import get_llm_router, get_prompt_templates, init_dependencies
import api.docs
import api.requirements
from api.docs import docx_to_txt
from schemas import *
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import FileResponse, StreamingResponse
from litellm.router import Router

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'
)

# Initialize global dependencies
init_dependencies()

# Download required packages for NLTK
nltk.download('stopwords')
nltk.download('punkt_tab')
nltk.download('wordnet')

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")