monster07 commited on
Commit
16de311
·
verified ·
1 Parent(s): 80de720

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +102 -0
app.py ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import base64
3
+ import io
4
+ from reportlab.lib.pagesizes import A4
5
+ from reportlab.pdfgen import canvas
6
+ from reportlab.lib.utils import ImageReader
7
+ from transformers import pipeline
8
+
9
+ # Load smaller faster model
10
+ summary_generator = pipeline("text2text-generation", model="google/flan-t5-small")
11
+
12
+ def generate_resume(name, job_title, email, phone, skills, education, experience, photo, use_ai):
13
+ # Fast AI summary or fallback
14
+ if use_ai:
15
+ prompt = f"Write a passionate professional summary for {name}, applying as a {job_title}, skilled in {skills}, with experience in {experience}."
16
+ summary = summary_generator(prompt, max_length=200)[0]["generated_text"]
17
+ else:
18
+ summary = f"{name} is a passionate {job_title} with skills in {skills}, and experience in {experience}."
19
+
20
+ buffer = io.BytesIO()
21
+ pdf = canvas.Canvas(buffer, pagesize=A4)
22
+ width, height = A4
23
+ y = height - 50
24
+
25
+ pdf.setFont("Helvetica-Bold", 20)
26
+ pdf.drawString(50, y, name)
27
+
28
+ y -= 25
29
+ pdf.setFont("Helvetica", 14)
30
+ pdf.drawString(50, y, job_title)
31
+
32
+ y -= 20
33
+ pdf.setFont("Helvetica", 12)
34
+ pdf.drawString(50, y, f"Email: {email}")
35
+ y -= 20
36
+ pdf.drawString(50, y, f"Phone: {phone}")
37
+
38
+ if photo:
39
+ image = ImageReader(photo)
40
+ pdf.drawImage(image, width - 130, height - 130, width=80, height=80, mask='auto')
41
+
42
+ y -= 40
43
+ pdf.setFont("Helvetica-Bold", 16)
44
+ pdf.drawString(50, y, "Professional Summary")
45
+ y -= 20
46
+ pdf.setFont("Helvetica", 12)
47
+ for line in summary.split(". "):
48
+ pdf.drawString(50, y, f"- {line.strip()}")
49
+ y -= 18
50
+
51
+ y -= 20
52
+ pdf.setFont("Helvetica-Bold", 16)
53
+ pdf.drawString(50, y, "Skills")
54
+ y -= 20
55
+ pdf.setFont("Helvetica", 12)
56
+ for skill in skills.split(","):
57
+ pdf.drawString(50, y, f"- {skill.strip()}")
58
+ y -= 18
59
+
60
+ y -= 20
61
+ pdf.setFont("Helvetica-Bold", 16)
62
+ pdf.drawString(50, y, "Education")
63
+ y -= 20
64
+ pdf.setFont("Helvetica", 12)
65
+ for edu in education.split(";"):
66
+ pdf.drawString(50, y, f"- {edu.strip()}")
67
+ y -= 18
68
+
69
+ y -= 20
70
+ pdf.setFont("Helvetica-Bold", 16)
71
+ pdf.drawString(50, y, "Experience")
72
+ y -= 20
73
+ pdf.setFont("Helvetica", 12)
74
+ for exp in experience.split(";"):
75
+ pdf.drawString(50, y, f"- {exp.strip()}")
76
+ y -= 18
77
+
78
+ pdf.save()
79
+ buffer.seek(0)
80
+ return buffer
81
+
82
+ # Launch Gradio App
83
+ iface = gr.Interface(
84
+ fn=generate_resume,
85
+ inputs=[
86
+ gr.Text(label="Full Name"),
87
+ gr.Text(label="Job Title"),
88
+ gr.Text(label="Email"),
89
+ gr.Text(label="Phone"),
90
+ gr.Textbox(label="Skills (comma-separated)"),
91
+ gr.Textbox(label="Education (use ; to separate items)"),
92
+ gr.Textbox(label="Experience (use ; to separate items)"),
93
+ gr.File(label="Profile Photo (optional)", type="binary"),
94
+ gr.Checkbox(label="Use AI to auto-generate summary?", value=True)
95
+ ],
96
+ outputs=gr.File(label="📄 Download Resume PDF"),
97
+ title="🚀 AI Resume Builder (Fast Edition)",
98
+ description="Create a smart resume using FLAN-T5-Small for fast AI summary or manual fallback. Works great on Hugging Face Spaces!",
99
+ live=True
100
+ )
101
+
102
+ iface.launch()