Spaces:
Running
Running
import requests | |
from docx import Document | |
from data_models.resume import Resume | |
from ats_optimizer.data_models.job_description import JobDescription | |
from ats_optimizer.data_models.resume import Resume | |
class ResumeOptimizer: | |
def __init__(self, api_key: str): | |
self.api_key = api_key | |
# self.template = "templates/professional.docx" | |
self.template = "templates/Ramen_DXC.docx" | |
def rewrite_resume(self, resume: Resume, jd: JobDescription) -> Resume: | |
"""Step 4: AI rewriting with formatting preservation""" | |
prompt = self._build_optimization_prompt(resume, jd) | |
response = requests.post( | |
"https://api.deepseek.com/v1/chat/completions", | |
headers={"Authorization": f"Bearer {self.api_key}"}, | |
json={ | |
"model": "deepseek-chat", | |
"messages": [{ | |
"role": "user", | |
"content": prompt | |
}], | |
"temperature": 0.7 | |
} | |
) | |
# Apply optimized content to original format | |
optimized_content = response.json()["choices"][0]["message"]["content"] | |
return self._apply_formatting(resume, optimized_content) | |
def _apply_formatting(self, original: Resume, new_content: str) -> Resume: | |
"""Preserve original formatting with new content""" | |
doc = Document(original.file_path) | |
# Advanced formatting preservation logic | |
return Resume.from_docx(doc, new_content) |