Spaces:
Sleeping
Sleeping
Update main.py
Browse files
main.py
CHANGED
@@ -7,10 +7,6 @@ import uvicorn
|
|
7 |
from fastapi.middleware.cors import CORSMiddleware
|
8 |
from utils import read_file, fetch_job_description, optimize_resume_api
|
9 |
import logging
|
10 |
-
from fastapi_cache import FastAPICache
|
11 |
-
from fastapi_cache.backends.inmemory import InMemoryBackend
|
12 |
-
from fastapi_cache.decorator import cache
|
13 |
-
import hashlib
|
14 |
|
15 |
# Set up logging
|
16 |
logging.basicConfig(level=logging.DEBUG)
|
@@ -35,12 +31,7 @@ def verify_token(credentials: HTTPAuthorizationCredentials = Depends(security)):
|
|
35 |
raise HTTPException(status_code=401, detail="Invalid authentication token")
|
36 |
return token
|
37 |
|
38 |
-
def generate_cache_key(resume_content: str, job_description_content: str) -> str:
|
39 |
-
combined = resume_content + job_description_content
|
40 |
-
return hashlib.md5(combined.encode()).hexdigest()
|
41 |
-
|
42 |
@app.post("/api/optimize-resume", response_model=OptimizationResponse, responses={400: {"model": ErrorResponse}, 401: {"model": ErrorResponse}, 500: {"model": ErrorResponse}})
|
43 |
-
@cache(expire=36000000) # Cache for n seconds
|
44 |
async def optimize_resume(
|
45 |
resume: Optional[UploadFile] = File(None),
|
46 |
resumeText: Optional[str] = Form(None),
|
@@ -67,31 +58,17 @@ async def optimize_resume(
|
|
67 |
else:
|
68 |
job_description_content = fetch_job_description(jobDescriptionUrl)
|
69 |
|
70 |
-
# Generate cache key
|
71 |
-
cache_key = generate_cache_key(resume_content, job_description_content)
|
72 |
-
|
73 |
-
# Check cache
|
74 |
-
cached_result = await FastAPICache.get(cache_key)
|
75 |
-
if cached_result:
|
76 |
-
return OptimizationResponse(**cached_result)
|
77 |
-
|
78 |
# Perform optimization
|
79 |
optimized_resume = optimize_resume_api(resume_content, job_description_content)
|
80 |
|
81 |
metadata = {
|
82 |
-
"original_resume":
|
83 |
-
"original_jd": job_description_content
|
84 |
-
}
|
85 |
|
86 |
-
|
87 |
optimizedResume=optimized_resume,
|
88 |
metadata=metadata
|
89 |
)
|
90 |
-
|
91 |
-
# Cache the result
|
92 |
-
await FastAPICache.set(cache_key, result.dict(), expire=36000000)
|
93 |
-
|
94 |
-
return result
|
95 |
except ValueError as ve:
|
96 |
logger.error(f"ValueError occurred: {str(ve)}", exc_info=True)
|
97 |
raise HTTPException(status_code=400, detail=str(ve))
|
@@ -103,9 +80,5 @@ async def optimize_resume(
|
|
103 |
async def http_exception_handler(request: Request, exc: HTTPException):
|
104 |
return JSONResponse(status_code=exc.status_code, content={"detail": exc.detail})
|
105 |
|
106 |
-
@app.on_event("startup")
|
107 |
-
async def startup():
|
108 |
-
FastAPICache.init(InMemoryBackend(), prefix="fastapi-cache")
|
109 |
-
|
110 |
if __name__ == "__main__":
|
111 |
uvicorn.run(app, host="0.0.0.0", port=8000, debug=True)
|
|
|
7 |
from fastapi.middleware.cors import CORSMiddleware
|
8 |
from utils import read_file, fetch_job_description, optimize_resume_api
|
9 |
import logging
|
|
|
|
|
|
|
|
|
10 |
|
11 |
# Set up logging
|
12 |
logging.basicConfig(level=logging.DEBUG)
|
|
|
31 |
raise HTTPException(status_code=401, detail="Invalid authentication token")
|
32 |
return token
|
33 |
|
|
|
|
|
|
|
|
|
34 |
@app.post("/api/optimize-resume", response_model=OptimizationResponse, responses={400: {"model": ErrorResponse}, 401: {"model": ErrorResponse}, 500: {"model": ErrorResponse}})
|
|
|
35 |
async def optimize_resume(
|
36 |
resume: Optional[UploadFile] = File(None),
|
37 |
resumeText: Optional[str] = Form(None),
|
|
|
58 |
else:
|
59 |
job_description_content = fetch_job_description(jobDescriptionUrl)
|
60 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
# Perform optimization
|
62 |
optimized_resume = optimize_resume_api(resume_content, job_description_content)
|
63 |
|
64 |
metadata = {
|
65 |
+
"original_resume":resume_content,
|
66 |
+
"original_jd": job_description_content}
|
|
|
67 |
|
68 |
+
return OptimizationResponse(
|
69 |
optimizedResume=optimized_resume,
|
70 |
metadata=metadata
|
71 |
)
|
|
|
|
|
|
|
|
|
|
|
72 |
except ValueError as ve:
|
73 |
logger.error(f"ValueError occurred: {str(ve)}", exc_info=True)
|
74 |
raise HTTPException(status_code=400, detail=str(ve))
|
|
|
80 |
async def http_exception_handler(request: Request, exc: HTTPException):
|
81 |
return JSONResponse(status_code=exc.status_code, content={"detail": exc.detail})
|
82 |
|
|
|
|
|
|
|
|
|
83 |
if __name__ == "__main__":
|
84 |
uvicorn.run(app, host="0.0.0.0", port=8000, debug=True)
|