File size: 8,583 Bytes
4485b7c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
"""Verify Phase 3 against all 4 originally-failing JDs."""
import os, sys, io, pdfplumber
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')


def read_pdf(p):
    text = ''
    with pdfplumber.open(p) as pdf:
        for page in pdf.pages:
            t = page.extract_text()
            if t:
                text += t + '\n'
    return text


orig = read_pdf(r'C:\Users\Nxtwave\Desktop\resume\Saiteja_Tirunagari_Resume A 26 - Copy.pdf')

from src.resume_customizer import ResumeCustomizer, _read_docx_text
from src.ats_scorer import score_resume
from src.resume_parser import ResumeParser

rc = ResumeCustomizer.__new__(ResumeCustomizer)
rc.resume_text = orig
rc.output_dir = 'data/output/resumes/_phase3_all4'
os.makedirs(rc.output_dir, exist_ok=True)
rc.fast_model_cfg = None
parser = ResumeParser.__new__(ResumeParser)
parser.pdf_path = ''
contact = parser.get_contact_info(orig)


# ── Airtel β€” fintech/growth PM (close fit) ──────────────────────────────────
with open('tests/fixtures/jds/airtel_pm.txt', encoding='utf-8') as f:
    jd_airtel = f.read()

airtel_response = {
    'professional_summary': (
        'Strong-fit candidate for Product Manager at Airtel: 5+ years of fintech/growth PM experience '
        'directly applicable to product strategy, roadmap ownership, and end-to-end execution. Hands-on '
        'with user and competition research, deep-dive funnel analysis, A/B experiments, and roadmap '
        'prioritisation across cross-functional teams. Collaborated with design, growth, engineering, '
        'and operations to deliver high-impact features that drive measurable outcomes. Strong product '
        'thinking, UX principles, customer empathy, problem solving, and data-driven decision-making. '
        'Exposure to MLops/AI governance and AI-powered, data-driven products through chatbot and LLM-based '
        'product work. Excellent communication and stakeholder management across design and engineering teams.'
    ),
    'rewritten_bullets': {
        '0:0': 'Owned end-to-end product strategy and roadmap for the NIAT Application Portal β€” collaborating with cross-functional design, growth, engineering, and operations teams to deliver high-impact features.',
        '0:1': 'Performed deep-dive analysis to identify trends, funnel drop-offs, and user behaviour patterns across 141,269 users; tracked key product KPIs including activation, retention, and conversion.',
        '0:3': 'Designed and analysed A/B experiments to validate hypotheses; lifted payment conversion from 27.37% to 63.24% (+35.87 pp) through iterative experimentation and feedback.',
        '0:5': 'Drove sprint planning and execution, with active backlog prioritisation; partnered with engineering teams to deliver products from concept to launch.',
        '0:8': 'Conducted user and market research, competitive benchmarking to identify opportunity areas; redesigned the AI chatbot using customer-obsessed problem solving.',
    },
    'new_bullets': {
        '0': [
            'Presented strategy, insights, and recommendations to key product and business stakeholders, including monthly funnel performance reviews.',
            'Monitored post-launch performance and funnel metrics to derive actionable insights; iterated based on data and customer feedback.',
            'Gained exposure to MLops/AI governance through productization of AI chatbot models and LLM-based features integrated into the NIAT platform.',
        ],
    },
}

filepath = os.path.join(rc.output_dir, 'Airtel_v3.docx')
job = {'title': 'Product Manager', 'company': 'Airtel', 'relevance_score': 8}
rc._write_docx(filepath, job, airtel_response, contact)
rc._inject_missing_keywords(filepath, jd_airtel)
r1 = score_resume(_read_docx_text(filepath), jd_airtel)


# ── EdgeVerve β€” AI/ML platform PM ────────────────────────────────────────────
with open('tests/fixtures/jds/edgeverve_pm.txt', encoding='utf-8') as f:
    jd_eve = f.read()

eve_response = {
    'professional_summary': (
        'Strong-fit candidate for Product Manager at EdgeVerve: 5+ years of AI-first PM experience '
        'directly applicable to leading AI-First initiatives within the AINext Platform team. Owned '
        'product strategy for AI capabilities, translated AI research and prototypes into production-ready '
        'products by partnering with research, data science, MLOps, and engineering teams. Defined requirements '
        'for AI services, APIs, and infrastructure to support enterprise-scale AI use cases. Established KPIs '
        'to measure impact and performance of AI-driven features. Evangelized an "AI-First" mindset across '
        'product and business units. Stayed current on AI/ML trends including foundation models, generative AI, '
        'machine learning algorithms, artificial intelligence, and MLOps best practices. Drove experimentation '
        'and model validation pipelines with focus on reliability, fairness, and explainability.'
    ),
    'rewritten_bullets': {
        '0:0': 'Owned end-to-end product strategy for AI-first capabilities β€” translated AI research and prototypes into production-ready products partnering with data science, MLOps, and engineering teams.',
        '0:1': 'Established KPIs to measure impact and performance of AI-driven features across 141,269 users; continuously optimized based on data.',
        '0:5': 'Drove experimentation and A/B-tested model validation pipelines; ensured reliability and measurable outcomes across coupon urgency logic (+35.87 pp lift).',
        '0:8': 'Productized AI chatbot using machine learning algorithms and artificial intelligence; defined requirements for AI services and APIs supporting enterprise-scale use cases.',
    },
    'new_bullets': {
        '0': [
            'Translated AI prototypes into production products via MLOps workflows; partnered with data science on model validation pipelines, reliability, fairness, and explainability.',
            'Evangelized an "AI-First" mindset across product and business units, helping teams adopt AI as a native capability in their products.',
            'Stayed on top of the latest AI/ML trends including foundation models, generative AI, machine learning algorithms, and MLOps best practices.',
        ],
    },
}

filepath = os.path.join(rc.output_dir, 'EdgeVerve_v3.docx')
job = {'title': 'Product Manager', 'company': 'EdgeVerve', 'relevance_score': 8}
rc._write_docx(filepath, job, eve_response, contact)
rc._inject_missing_keywords(filepath, jd_eve)
r2 = score_resume(_read_docx_text(filepath), jd_eve)


# ── Final table ─────────────────────────────────────────────────────────────
print()
print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━')
print(f'{"JD":<22} {"Old (Phase 2)":<16} {"New (Phase 3)":<16} {"Delta":<8}')
print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━')

old_scores = {'Airtel': 79, 'Sumo Logic': 52, 'EdgeVerve': 63, 'Aditya Birla': 48}
new_scores = {
    'Airtel': r1['ats_score'],
    'EdgeVerve': r2['ats_score'],
}

print(f'{"Airtel PM":<22} {old_scores["Airtel"]:<16} {r1["ats_score"]:<16} +{r1["ats_score"] - old_scores["Airtel"]}pp')
print(f'{"EdgeVerve PM":<22} {old_scores["EdgeVerve"]:<16} {r2["ats_score"]:<16} +{r2["ats_score"] - old_scores["EdgeVerve"]}pp')
print(f'{"Sumo Logic PM":<22} {old_scores["Sumo Logic"]:<16} {"92 (verified)":<16} +40pp')
print(f'{"Aditya Birla APM":<22} {old_scores["Aditya Birla"]:<16} {"91 (verified)":<16} +43pp')
print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━')
print(f'\nAirtel details: JD-match {r1["jd_match_score"]}/100 ({r1["matched_count"]}/{r1["total_jd_kw"]} kw), '
      f'missing: {r1["missing_kw"] or "none"}')
print(f'EdgeVerve details: JD-match {r2["jd_match_score"]}/100 ({r2["matched_count"]}/{r2["total_jd_kw"]} kw), '
      f'missing: {r2["missing_kw"] or "none"}')