|
from fastapi import FastAPI |
|
from fastapi.responses import FileResponse |
|
from transformers import pipeline |
|
from fpdf import FPDF |
|
import os |
|
import uvicorn |
|
from fastapi.middleware.cors import CORSMiddleware |
|
|
|
app = FastAPI() |
|
|
|
app.add_middleware( |
|
CORSMiddleware, |
|
allow_origins=["*"], |
|
allow_credentials=True, |
|
allow_methods=["*"], |
|
allow_headers=["*"], |
|
) |
|
|
|
|
|
HF_TOKEN = os.getenv("HF_TOKEN") |
|
|
|
|
|
pipe = pipeline( |
|
"text-generation", |
|
model="google/gemma-3-270m-it", |
|
token=HF_TOKEN, |
|
max_new_tokens=400 |
|
) |
|
|
|
def generate_resume_with_gemma(data): |
|
prompt = f""" |
|
Create a professional resume based on the following details. |
|
Write in clear sections (Education, Internships, Projects, Skills, Extra Curricular). |
|
|
|
Personal Information: |
|
- Name: {data.get('name')} |
|
- Email: {data.get('email')} |
|
- Phone: {data.get('phone')} |
|
- LinkedIn: {data.get('linkedin')} |
|
|
|
Education: |
|
{data.get('education')} |
|
|
|
Internships: |
|
{data.get('internships')} |
|
|
|
Projects: |
|
{data.get('projects')} |
|
|
|
Skills: |
|
{data.get('skills')} |
|
|
|
Extra Curricular: |
|
{data.get('extra')} |
|
|
|
Resume: |
|
""" |
|
result = pipe(prompt, max_new_tokens=400, do_sample=False) |
|
return result[0]['generated_text'] |
|
|
|
def generate_resume_pdf(text): |
|
pdf = FPDF() |
|
pdf.add_page() |
|
pdf.set_font("Arial", size=12) |
|
for line in text.split("\n"): |
|
pdf.multi_cell(0, 8, line) |
|
filename = "resume.pdf" |
|
pdf.output(filename) |
|
return filename |
|
|
|
@app.post("/generate_resume") |
|
async def generate_resume(data: dict): |
|
|
|
text = generate_resume_with_gemma(data) |
|
|
|
pdf_file = generate_resume_pdf(text) |
|
|
|
return FileResponse(pdf_file, media_type="application/pdf", filename="resume.pdf") |
|
|
|
|
|
if __name__ == "__main__": |
|
uvicorn.run(app, host="0.0.0.0", port=7860) |
|
|