Spaces:
Running
Running
from Ars.core import r | |
from Ars.repositories import get_document_by_hashed_doc_complete,get_document_by_hashed_doc,create_new_hashed_doc_entry,create_boost_suggestions,create_breakdown_by_domain,create_flagged_risk_areas,create_user_resilience | |
from fastapi import UploadFile | |
from Ars.ai_functions import extract_text_from_bytes,resume_analysis,calculate_automation_risk,calculate_Ai_collab_readiness,calculate_skill_depth,generate_boost_suggestion,generate_domain_breakdown,generate_flagged_risk_areas | |
from Ars.objects import AICollabReadiness,SkillDepthResult,AutomationRiskResult | |
import hashlib | |
def get_document_hash(document_content: str) -> str: | |
# Ensure consistent encoding (e.g., UTF-8) before hashing | |
document_bytes = document_content.encode('utf-8') | |
hasher = hashlib.sha256() | |
hasher.update(document_bytes) | |
return hasher.hexdigest() | |
async def resilience_analysis(file:UploadFile,userId:str): | |
contents = await file.read() | |
resume_text = extract_text_from_bytes(pdf_bytes=contents) | |
hashed_doc = get_document_hash(resume_text) | |
check = await get_document_by_hashed_doc(hashed_doc=hashed_doc) | |
if check==None: | |
resume= await resume_analysis(contents) | |
risk = calculate_automation_risk(resume) | |
risk = AutomationRiskResult(**risk.model_dump()) | |
skill_depth = calculate_skill_depth(resume) | |
skill_depth= SkillDepthResult(**skill_depth.model_dump()) | |
ai_readiness = calculate_Ai_collab_readiness(resume) | |
ai_readiness = AICollabReadiness(**ai_readiness.model_dump()) | |
ResilienceScore = ((1-(risk.result/100))*0.5+(skill_depth.result/100)*0.3+(ai_readiness.result/100)*0.2) | |
flagged_risk =generate_flagged_risk_areas(resume=resume,skil_depth=skill_depth,risk=risk,ai_readiness=ai_readiness) | |
boost_suggestion = generate_boost_suggestion(resume=resume,skil_depth=skill_depth,risk=risk,ai_readiness=ai_readiness) | |
domain_breakdown = generate_domain_breakdown(resume=resume,skil_depth=skill_depth,risk=risk,ai_readiness=ai_readiness) | |
final_analysis_response ={"overall score": ResilienceScore,"flagged Risk": flagged_risk.model_dump(),"boost suggestion":boost_suggestion.model_dump(),"domain breakdown":domain_breakdown.model_dump(),"resume":resume.model_dump(),"skil_depth":skill_depth.model_dump(),"risk":risk.model_dump(),"ai_readiness":ai_readiness.model_dump()} | |
resultId =await create_new_hashed_doc_entry(data={"hashed_doc":hashed_doc,"resume":final_analysis_response,"userId":userId}) | |
return final_analysis_response | |
else: | |
result_hash =await get_document_by_hashed_doc_complete(hashed_doc) | |
if result_hash['hashed_doc']==hashed_doc and result_hash['userId']== userId: | |
await create_new_hashed_doc_entry(data={"hashed_doc":hashed_doc,"resume":check,"userId":userId}) | |
return check | |
await create_new_hashed_doc_entry(data={"hashed_doc":hashed_doc,"resume":check,"userId":userId}) | |
return check |