Spaces:
Running
Running
File size: 2,935 Bytes
c151c44 ed5b42d c151c44 77e56ff c151c44 8fde879 17ea087 8fde879 77e56ff ed5b42d 17ea087 c151c44 ed5b42d c151c44 ed5b42d 30989e3 c151c44 fefb5c9 c151c44 fefb5c9 dcefa44 fefb5c9 77e56ff fefb5c9 8fde879 fefb5c9 8fde879 fefb5c9 dcefa44 77e56ff dcefa44 c151c44 77e56ff c151c44 77e56ff c151c44 77e56ff |
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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
from fastapi import FastAPI, HTTPException
from fastapi.responses import JSONResponse
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from backend.utils import generate_completions
from backend.utils.handlers import handle_generation_request, INSTRUCTION_TEMPLATES
from backend import config
from typing import Union, List, Literal, Optional
import logging
import json
from backend.cache import cache
logging.basicConfig(level=logging.INFO)
app = FastAPI()
# Add CORS middleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # Allows all origins
allow_credentials=True,
allow_methods=["*"], # Allows all methods
allow_headers=["*"], # Allows all headers
)
class Message(BaseModel):
role: Literal["user", "assistant"]
content: str
class GenerationRequest(BaseModel):
user_id: int
query: Union[str, List[Message]]
native_language: Optional[str] = None
target_language: Optional[str] = None
proficiency: Optional[str] = None
class MetadataRequest(BaseModel):
query: str
@app.get("/")
async def root():
return {"message": "Welcome to the AI Learning Assistant API!"}
@app.post("/extract/metadata")
async def extract_metadata(data: MetadataRequest):
logging.info(f"Query: {data.query}")
try:
response_str = await cache.get_or_set(
(str(data.query), config.language_metadata_extraction_prompt),
generate_completions.get_completions,
data.query,
config.language_metadata_extraction_prompt
)
metadata_dict = json.loads(response_str)
return JSONResponse(
content={
"data": metadata_dict,
"type": "language_metadata",
"status": "success"
},
status_code=200
)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.post("/generate/curriculum")
async def generate_curriculum(data: GenerationRequest):
return await handle_generation_request(
data=data,
mode="curriculum",
instructions_template=INSTRUCTION_TEMPLATES["curriculum"]
)
@app.post("/generate/flashcards")
async def generate_flashcards(data: GenerationRequest):
return await handle_generation_request(
data=data,
mode="flashcards",
instructions_template=INSTRUCTION_TEMPLATES["flashcards"]
)
@app.post("/generate/exercises")
async def generate_exercises(data: GenerationRequest):
return await handle_generation_request(
data=data,
mode="exercises",
instructions_template=INSTRUCTION_TEMPLATES["exercises"]
)
@app.post("/generate/simulation")
async def generate_simulation(data: GenerationRequest):
return await handle_generation_request(
data=data,
mode="simulation",
instructions_template=INSTRUCTION_TEMPLATES["simulation"]
) |