nileshhanotia commited on
Commit
e15c5c6
Β·
verified Β·
1 Parent(s): dfc5f0d

Upload 10 files

Browse files
Files changed (11) hide show
  1. .gitattributes +1 -0
  2. NIlesh_Hanotia_AI.pdf +3 -0
  3. dataset.py +24 -0
  4. model.py +43 -0
  5. pdf.py +10 -0
  6. resume_text.docx +0 -0
  7. resume_text.txt +70 -0
  8. tokenizer.py +25 -0
  9. train.py +56 -0
  10. vocab.json +206 -0
  11. vocab.py +174 -0
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ NIlesh_Hanotia_AI.pdf filter=lfs diff=lfs merge=lfs -text
NIlesh_Hanotia_AI.pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b1a0719bbefb24885a8bb1473a0e7128a12692817bf74a659a5951c7be7b1738
3
+ size 281525
dataset.py ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ from tokenizer import encode
3
+
4
+ # Load full resume text
5
+ with open("resume_text.txt", "r", encoding="utf-8") as f:
6
+ text = f.read()
7
+
8
+ data = encode(text)
9
+ context_length = 64
10
+
11
+ def get_pairs(data, context_length):
12
+ pairs = []
13
+ for i in range(len(data) - context_length):
14
+ x = data[i : i + context_length]
15
+ y = data[i + 1 : i + context_length + 1]
16
+ pairs.append((x, y))
17
+ return pairs
18
+
19
+ pairs = get_pairs(data, context_length)
20
+
21
+ print(f"Total characters encoded : {len(data)}")
22
+ print(f"Total training pairs : {len(pairs)}")
23
+ print(f"Sample input : {pairs[0][0][:10]} ...")
24
+ print(f"Sample target : {pairs[0][1][:10]} ...")
model.py ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import torch.nn as nn
3
+
4
+ vocab_size = 80
5
+ embed_dim = 128
6
+ num_heads = 4
7
+ num_layers = 3
8
+ context_length = 64
9
+
10
+ class ResumeEncoder(nn.Module):
11
+ def __init__(self):
12
+ super().__init__()
13
+ self.token_emb = nn.Embedding(vocab_size, embed_dim)
14
+ self.position_emb = nn.Embedding(context_length, embed_dim)
15
+ self.blocks = nn.Sequential(*[
16
+ nn.TransformerEncoderLayer(
17
+ d_model=embed_dim,
18
+ nhead=num_heads,
19
+ dim_feedforward=embed_dim * 4,
20
+ dropout=0.1,
21
+ batch_first=True
22
+ ) for _ in range(num_layers)
23
+ ])
24
+ self.output_head = nn.Linear(embed_dim, vocab_size)
25
+
26
+ def forward(self, x):
27
+ B, T = x.shape
28
+ tok = self.token_emb(x)
29
+ pos = self.position_emb(torch.arange(T, device=x.device))
30
+ x = self.blocks(tok + pos)
31
+ return self.output_head(x)
32
+
33
+ def encode(self, x):
34
+ # Returns single vector for a sequence β€” used for similarity search
35
+ tok = self.token_emb(x)
36
+ pos = self.position_emb(torch.arange(x.shape[-1], device=x.device))
37
+ out = self.blocks(tok + pos)
38
+ return out.mean(dim=-2)
39
+
40
+ if __name__ == "__main__":
41
+ model = ResumeEncoder()
42
+ print("Model created!")
43
+ print(f"Parameters: {sum(p.numel() for p in model.parameters()):,}")
pdf.py ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ import pdfplumber
2
+
3
+ with pdfplumber.open("NIlesh_Hanotia_AI.pdf") as pdf:
4
+ text = "\n".join(page.extract_text() or "" for page in pdf.pages)
5
+
6
+ with open("resume_text.txt", "w", encoding="utf-8") as f:
7
+ f.write(text)
8
+
9
+ print("resume_text.txt saved!")
10
+ print(f"Total characters: {len(text)}")
resume_text.docx ADDED
Binary file (11.4 kB). View file
 
resume_text.txt ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ NILESH HANOTIA
2
+ AI Implementation Lead | POC-to-Production Specialist | Enterprise AI Deployment
3
+ Ahmedabad, India | +91-9925537229 | nilesh.hanotia@outlook.com
4
+ CERTIFICATIONS
5
+ AWS Certified AI Practitioner | Amazon Web Services
6
+ PROFESSIONAL SUMMARY
7
+ AI implementation leader with 7+ years driving enterprise AI deployments from first discovery call through
8
+ production go-live. Specialise in POC design and execution, stakeholder alignment, and translating complex
9
+ LLM/AWS architectures into measurable business outcomes. At Armakuni, serve as the bridge between technical
10
+ delivery teams and enterprise clients β€” owning the full 11-stage POC lifecycle: project allocation, internal/external
11
+ kick-offs, weekly governance, execution, testing, delivery, and path-to-production planning. Independently
12
+ delivered 6+ AI products generating $5M+ combined revenue, with proven impact in healthcare, legal, analytics,
13
+ and automation domains.
14
+ CORE COMPETENCIES
15
+ AI Implementation & POC Delivery: End-to-end POC lifecycle ownership, POC→Production roadmapping,
16
+ enterprise AI adoption strategy, deployment governance, MVP scoping, client validation
17
+ Technical Fluency: LLM pipelines & AI workflows, AWS services (Lambda, Bedrock, API Gateway, DynamoDB,
18
+ CloudWatch), serverless architecture, API integrations, solution architecture collaboration, logging & observability
19
+ (Langfuse, Langsmith)
20
+ Stakeholder & Delivery Leadership: Executive alignment, discovery workshops, SOW-to-delivery conversion,
21
+ weekly PSR reporting, risk & escalation management, account expansion strategy, cross-functional team
22
+ coordination
23
+ PROFESSIONAL EXPERIENCE
24
+ Customer Solution Consultant (CSC) β€” AI Implementation β€” Armakuni 2025 – Present
25
+ Own end-to-end delivery of AI POCs and rapid engagements (5–8 weeks) across enterprise clients in healthcare,
26
+ legal, and automation sectors.
27
+ β€’ Drive the full 11-stage POC lifecycle: project allocation, SOW review, internal/external kick-offs, planning,
28
+ weekly governance, execution oversight, testing & client validation, delivery, and path-to-production.
29
+ β€’ Convert Statements of Work into executable delivery plans with milestones, sprint cadences, RACI matrices,
30
+ and risk registers.
31
+ β€’ Serve as primary bridge between developers, solution architects, DevOps, and enterprise client
32
+ stakeholders β€” ensuring technical decisions align with business outcomes.
33
+ β€’ Lead weekly executive reporting (PSR), risk management, and scope control; escalate proactively across a
34
+ structured L1β†’L3 escalation matrix.
35
+ β€’ Develop deep working knowledge of AWS services (Lambda, Bedrock, API Gateway, CloudWatch) and LLM
36
+ pipeline architecture to engage credibly with both technical teams and client leadership.
37
+ β€’ Create and maintain technical documentation β€” process flows, README files, test cases β€” to ensure
38
+ production readiness from day one of execution.
39
+ β€’ Facilitate path-to-production workshops with clients, mapping POC learnings to scalable architecture,
40
+ compliance requirements (GDPR, HIPAA), and business value expansion plans.
41
+ β€’ Identify account expansion, cross-sell, and upsell opportunities, contributing to long-term Armakuni account
42
+ growth strategy.
43
+ AI Product & Implementation Lead β€” Independent Consultant 2021 – 2025
44
+ Delivered AI products end-to-end β€” from problem discovery and architecture design through deployment, user
45
+ adoption, and ongoing iteration β€” serving 10,000+ users across multiple industries.
46
+ β€’ Designed and deployed 6+ production AI systems generating $5M+ combined revenue across healthcare,
47
+ legal, enterprise analytics, and automation domains.
48
+ β€’ Led full AI product lifecycle: stakeholder discovery, requirements definition, LLM workflow design, MVP
49
+ build, UAT, and phased production rollout.
50
+ β€’ Reduced manual client workflows by 80–90% through targeted AI automation, directly measurable in client
51
+ operations.
52
+ β€’ Translated complex enterprise business needs into implementable technical architectures β€” working hands-
53
+ on across AWS, API integrations, and AI/LLM pipelines.
54
+ β€’ Built and validated AI products with real users, iterating rapidly based on adoption data and feedback to
55
+ drive retention and expansion.
56
+ β€’ Simultaneously built independent projects including real-time trading systems on AWS (Lambda,
57
+ DynamoDB, API Gateway, Bedrock, CloudWatch) β€” deepening hands-on serverless and AI infrastructure
58
+ expertise.
59
+ EARLIER CAREER
60
+ Product Analyst β€” Cignex Datamatics 2020 – 2021
61
+ Business Product Analyst β€” Cygnet Infotech 2019 – 2020
62
+ Associate Product Manager β€” Aimdek Technologies 2017 – 2019
63
+ TECHNICAL TOOLING
64
+ Cloud & AI: AWS (Lambda, Bedrock, API Gateway, DynamoDB, CloudWatch, CloudFront, CDK) | LLM
65
+ Pipelines | Langfuse | Langsmith
66
+ Dev & Data: Python | SQL | APIs | Docker | Tableau | Mixpanel
67
+ Delivery & Design: Jira | Zoho Projects | Figma | Panda.doc | Agile/Scrum
68
+ EDUCATION
69
+ Post Graduate Diploma in Business Administration β€” St. Kabir Institute
70
+ Bachelor of Commerce β€” IGNOU
tokenizer.py ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+
3
+ # Load vocab
4
+ with open("vocab.json", "r", encoding="utf-8") as f:
5
+ vocab = json.load(f)
6
+
7
+ stoi = vocab["stoi"]
8
+ itos = {int(k): v for k, v in vocab["itos"].items()}
9
+ vocab_size = vocab["vocab_size"]
10
+
11
+ def encode(text):
12
+ return [stoi[c] for c in text if c in stoi]
13
+
14
+ def decode(ids):
15
+ return ''.join([itos[i] for i in ids])
16
+
17
+ if __name__ == "__main__":
18
+ sample = "python developer with aws experience in ahmedabad"
19
+ encoded = encode(sample)
20
+ decoded = decode(encoded)
21
+
22
+ print(f"Sample text : {sample}")
23
+ print(f"Encoded : {encoded}")
24
+ print(f"Decoded back : {decoded}")
25
+ print(f"Vocab size : {vocab_size}")
train.py ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import torch.nn.functional as F
3
+ from torch.utils.data import Dataset, DataLoader
4
+ from model import ResumeEncoder
5
+ from tokenizer import encode
6
+
7
+ # Load resume text
8
+ with open("resume_text.txt", "r", encoding="utf-8") as f:
9
+ text = f.read()
10
+
11
+ data = encode(text)
12
+ context_length = 64
13
+
14
+ class ResumeDataset(Dataset):
15
+ def __init__(self, data, context_length):
16
+ self.data = data
17
+ self.context_length = context_length
18
+
19
+ def __len__(self):
20
+ return len(self.data) - self.context_length
21
+
22
+ def __getitem__(self, idx):
23
+ x = torch.tensor(self.data[idx : idx + self.context_length])
24
+ y = torch.tensor(self.data[idx + 1 : idx + self.context_length + 1])
25
+ return x, y
26
+
27
+ dataset = ResumeDataset(data, context_length)
28
+ dataloader = DataLoader(dataset, batch_size=32, shuffle=True)
29
+
30
+ model = ResumeEncoder()
31
+ optimizer = torch.optim.AdamW(model.parameters(), lr=3e-4)
32
+ epochs = 500
33
+
34
+
35
+ for epoch in range(1, epochs + 1):
36
+ total_loss = 0
37
+ for x, y in dataloader:
38
+ logits = model(x)
39
+ B, T, C = logits.shape
40
+ loss = F.cross_entropy(logits.view(B*T, C), y.view(B*T))
41
+ optimizer.zero_grad()
42
+ loss.backward()
43
+ optimizer.step()
44
+ total_loss += loss.item()
45
+
46
+ avg_loss = total_loss / len(dataloader)
47
+
48
+ if epoch % 10 == 0:
49
+ print(f"Epoch {epoch}/{epochs} | Loss: {avg_loss:.4f}")
50
+
51
+ if epoch % 50 == 0:
52
+ torch.save(model.state_dict(), f"resume_encoder_epoch{epoch}.pth")
53
+ print(f" β†’ Checkpoint saved at epoch {epoch}")
54
+
55
+ torch.save(model.state_dict(), "resume_encoder.pth")
56
+ print("Final model saved!")
vocab.json ADDED
@@ -0,0 +1,206 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "stoi": {
3
+ " ": 0,
4
+ "e": 1,
5
+ "n": 2,
6
+ "t": 3,
7
+ "i": 4,
8
+ "a": 5,
9
+ "o": 6,
10
+ "r": 7,
11
+ "s": 8,
12
+ "l": 9,
13
+ "c": 10,
14
+ "d": 11,
15
+ "u": 12,
16
+ "p": 13,
17
+ ",": 14,
18
+ "m": 15,
19
+ "g": 16,
20
+ "\n": 17,
21
+ "h": 18,
22
+ "A": 19,
23
+ "y": 20,
24
+ "I": 21,
25
+ "v": 22,
26
+ "-": 23,
27
+ "P": 24,
28
+ "C": 25,
29
+ "k": 26,
30
+ "b": 27,
31
+ "w": 28,
32
+ "L": 29,
33
+ "f": 30,
34
+ "S": 31,
35
+ "O": 32,
36
+ "D": 33,
37
+ ".": 34,
38
+ "E": 35,
39
+ "x": 36,
40
+ "2": 37,
41
+ "|": 38,
42
+ "0": 39,
43
+ "R": 40,
44
+ "M": 41,
45
+ "\u2014": 42,
46
+ "W": 43,
47
+ "T": 44,
48
+ "1": 45,
49
+ "N": 46,
50
+ "B": 47,
51
+ "&": 48,
52
+ ":": 49,
53
+ "(": 50,
54
+ ")": 51,
55
+ "G": 52,
56
+ "+": 53,
57
+ "9": 54,
58
+ "5": 55,
59
+ "F": 56,
60
+ "\u2013": 57,
61
+ "/": 58,
62
+ "H": 59,
63
+ "U": 60,
64
+ "j": 61,
65
+ "7": 62,
66
+ "3": 63,
67
+ "6": 64,
68
+ "$": 65,
69
+ "\u2192": 66,
70
+ "V": 67,
71
+ "8": 68,
72
+ "q": 69,
73
+ "K": 70,
74
+ "@": 71,
75
+ "z": 72,
76
+ "Y": 73,
77
+ "X": 74,
78
+ ";": 75,
79
+ "%": 76,
80
+ "Q": 77,
81
+ "J": 78,
82
+ "Z": 79
83
+ },
84
+ "itos": {
85
+ "0": " ",
86
+ "1": "e",
87
+ "2": "n",
88
+ "3": "t",
89
+ "4": "i",
90
+ "5": "a",
91
+ "6": "o",
92
+ "7": "r",
93
+ "8": "s",
94
+ "9": "l",
95
+ "10": "c",
96
+ "11": "d",
97
+ "12": "u",
98
+ "13": "p",
99
+ "14": ",",
100
+ "15": "m",
101
+ "16": "g",
102
+ "17": "\n",
103
+ "18": "h",
104
+ "19": "A",
105
+ "20": "y",
106
+ "21": "I",
107
+ "22": "v",
108
+ "23": "-",
109
+ "24": "P",
110
+ "25": "C",
111
+ "26": "k",
112
+ "27": "b",
113
+ "28": "w",
114
+ "29": "L",
115
+ "30": "f",
116
+ "31": "S",
117
+ "32": "O",
118
+ "33": "D",
119
+ "34": ".",
120
+ "35": "E",
121
+ "36": "x",
122
+ "37": "2",
123
+ "38": "|",
124
+ "39": "0",
125
+ "40": "R",
126
+ "41": "M",
127
+ "42": "\u2014",
128
+ "43": "W",
129
+ "44": "T",
130
+ "45": "1",
131
+ "46": "N",
132
+ "47": "B",
133
+ "48": "&",
134
+ "49": ":",
135
+ "50": "(",
136
+ "51": ")",
137
+ "52": "G",
138
+ "53": "+",
139
+ "54": "9",
140
+ "55": "5",
141
+ "56": "F",
142
+ "57": "\u2013",
143
+ "58": "/",
144
+ "59": "H",
145
+ "60": "U",
146
+ "61": "j",
147
+ "62": "7",
148
+ "63": "3",
149
+ "64": "6",
150
+ "65": "$",
151
+ "66": "\u2192",
152
+ "67": "V",
153
+ "68": "8",
154
+ "69": "q",
155
+ "70": "K",
156
+ "71": "@",
157
+ "72": "z",
158
+ "73": "Y",
159
+ "74": "X",
160
+ "75": ";",
161
+ "76": "%",
162
+ "77": "Q",
163
+ "78": "J",
164
+ "79": "Z"
165
+ },
166
+ "vocab_size": 80,
167
+ "keywords": {
168
+ "skills": [
169
+ "python",
170
+ "aws",
171
+ "sql",
172
+ "docker",
173
+ "llm",
174
+ "bedrock",
175
+ "lambda",
176
+ "api",
177
+ "langfuse",
178
+ "langsmith",
179
+ "tableau",
180
+ "figma",
181
+ "jira",
182
+ "cdk"
183
+ ],
184
+ "education": [
185
+ "bachelor",
186
+ "post graduate",
187
+ "diploma",
188
+ "commerce",
189
+ "business administration"
190
+ ],
191
+ "experience": [
192
+ "7"
193
+ ],
194
+ "location": [
195
+ "ahmedabad",
196
+ "india"
197
+ ],
198
+ "roles": [
199
+ "ai implementation",
200
+ "product manager",
201
+ "consultant",
202
+ "analyst",
203
+ "solution consultant"
204
+ ]
205
+ }
206
+ }
vocab.py ADDED
@@ -0,0 +1,174 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import re
3
+ from collections import Counter
4
+
5
+ # ── Raw resume text ───────────────────────────────────────────────────────────
6
+ RESUME_TEXT = """
7
+ NILESH HANOTIA
8
+ AI Implementation Lead | POC-to-Production Specialist | Enterprise AI Deployment
9
+ Ahmedabad, India | +91-9925537229 | nilesh.hanotia@outlook.com
10
+
11
+ CERTIFICATIONS
12
+ AWS Certified AI Practitioner | Amazon Web Services
13
+
14
+ PROFESSIONAL SUMMARY
15
+ AI implementation leader with 7+ years driving enterprise AI deployments from first discovery call through
16
+ production go-live. Specialise in POC design and execution, stakeholder alignment, and translating complex
17
+ LLM/AWS architectures into measurable business outcomes. At Armakuni, serve as the bridge between technical
18
+ delivery teams and enterprise clients β€” owning the full 11-stage POC lifecycle: project allocation, internal/external
19
+ kick-offs, weekly governance, execution, testing, delivery, and path-to-production planning. Independently
20
+ delivered 6+ AI products generating $5M+ combined revenue, with proven impact in healthcare, legal, analytics,
21
+ and automation domains.
22
+
23
+ CORE COMPETENCIES
24
+ AI Implementation & POC Delivery: End-to-end POC lifecycle ownership, POC→Production roadmapping,
25
+ enterprise AI adoption strategy, deployment governance, MVP scoping, client validation
26
+ Technical Fluency: LLM pipelines & AI workflows, AWS services (Lambda, Bedrock, API Gateway, DynamoDB,
27
+ CloudWatch), serverless architecture, API integrations, solution architecture collaboration, logging & observability
28
+ (Langfuse, Langsmith)
29
+ Stakeholder & Delivery Leadership: Executive alignment, discovery workshops, SOW-to-delivery conversion,
30
+ weekly PSR reporting, risk & escalation management, account expansion strategy, cross-functional team
31
+ coordination
32
+
33
+ PROFESSIONAL EXPERIENCE
34
+ Customer Solution Consultant (CSC) β€” AI Implementation β€” Armakuni 2025 – Present
35
+ Own end-to-end delivery of AI POCs and rapid engagements (5–8 weeks) across enterprise clients in healthcare,
36
+ legal, and automation sectors.
37
+ - Drive the full 11-stage POC lifecycle: project allocation, SOW review, internal/external kick-offs, planning,
38
+ weekly governance, execution oversight, testing & client validation, delivery, and path-to-production.
39
+ - Convert Statements of Work into executable delivery plans with milestones, sprint cadences, RACI matrices,
40
+ and risk registers.
41
+ - Serve as primary bridge between developers, solution architects, DevOps, and enterprise client
42
+ stakeholders β€” ensuring technical decisions align with business outcomes.
43
+ - Lead weekly executive reporting (PSR), risk management, and scope control; escalate proactively across a
44
+ structured L1β†’L3 escalation matrix.
45
+ - Develop deep working knowledge of AWS services (Lambda, Bedrock, API Gateway, CloudWatch) and LLM
46
+ pipeline architecture to engage credibly with both technical teams and client leadership.
47
+ - Create and maintain technical documentation β€” process flows, README files, test cases β€” to ensure
48
+ production readiness from day one of execution.
49
+ - Facilitate path-to-production workshops with clients, mapping POC learnings to scalable architecture,
50
+ compliance requirements (GDPR, HIPAA), and business value expansion plans.
51
+ - Identify account expansion, cross-sell, and upsell opportunities, contributing to long-term Armakuni account
52
+ growth strategy.
53
+
54
+ AI Product & Implementation Lead β€” Independent Consultant 2021 – 2025
55
+ Delivered AI products end-to-end β€” from problem discovery and architecture design through deployment, user
56
+ adoption, and ongoing iteration β€” serving 10,000+ users across multiple industries.
57
+ - Designed and deployed 6+ production AI systems generating $5M+ combined revenue across healthcare,
58
+ legal, enterprise analytics, and automation domains.
59
+ - Led full AI product lifecycle: stakeholder discovery, requirements definition, LLM workflow design, MVP
60
+ build, UAT, and phased production rollout.
61
+ - Reduced manual client workflows by 80-90% through targeted AI automation, directly measurable in client
62
+ operations.
63
+ - Translated complex enterprise business needs into implementable technical architectures β€” working hands-on
64
+ across AWS, API integrations, and AI/LLM pipelines.
65
+ - Built and validated AI products with real users, iterating rapidly based on adoption data and feedback to
66
+ drive retention and expansion.
67
+ - Simultaneously built independent projects including real-time trading systems on AWS (Lambda,
68
+ DynamoDB, API Gateway, Bedrock, CloudWatch) β€” deepening hands-on serverless and AI infrastructure expertise.
69
+
70
+ EARLIER CAREER
71
+ Product Analyst β€” Cignex Datamatics 2020 – 2021
72
+ Business Product Analyst β€” Cygnet Infotech 2019 – 2020
73
+ Associate Product Manager β€” Aimdek Technologies 2017 – 2019
74
+
75
+ TECHNICAL TOOLING
76
+ Cloud & AI: AWS (Lambda, Bedrock, API Gateway, DynamoDB, CloudWatch, CloudFront, CDK) | LLM Pipelines | Langfuse | Langsmith
77
+ Dev & Data: Python | SQL | APIs | Docker | Tableau | Mixpanel
78
+ Delivery & Design: Jira | Zoho Projects | Figma | Panda.doc | Agile/Scrum
79
+
80
+ EDUCATION
81
+ Post Graduate Diploma in Business Administration β€” St. Kabir Institute
82
+ Bachelor of Commerce β€” IGNOU
83
+ """
84
+
85
+ # ── Step 1: Build character-level vocabulary ──────────────────────────────────
86
+ def build_vocab(text):
87
+ # Count frequency of every character
88
+ char_counts = Counter(text)
89
+
90
+ # Sort by frequency (most common first)
91
+ sorted_chars = sorted(char_counts.items(), key=lambda x: -x[1])
92
+
93
+ # Assign ID to each unique character
94
+ stoi = {ch: idx for idx, (ch, _) in enumerate(sorted_chars)}
95
+ itos = {idx: ch for ch, idx in stoi.items()}
96
+
97
+ return stoi, itos, char_counts, sorted_chars
98
+
99
+ # ── Step 2: Encode full text ───────────────────────────────────────────────────
100
+ def encode(text, stoi):
101
+ return [stoi[ch] for ch in text if ch in stoi]
102
+
103
+ # ── Step 3: Extract key terms from resume ─────────────────────────────────────
104
+ def extract_keywords(text):
105
+ text_lower = text.lower()
106
+
107
+ skills = ["python", "aws", "sql", "docker", "llm", "bedrock", "lambda",
108
+ "api", "langfuse", "langsmith", "tableau", "figma", "jira", "cdk"]
109
+ education = ["bachelor", "post graduate", "diploma", "commerce", "business administration"]
110
+ experience = re.findall(r'(\d+)\+?\s*years?', text_lower)
111
+ locations = ["ahmedabad", "india"]
112
+ roles = ["ai implementation", "product manager", "consultant", "analyst",
113
+ "product lead", "solution consultant"]
114
+
115
+ found_skills = [s for s in skills if s in text_lower]
116
+ found_education = [e for e in education if e in text_lower]
117
+ found_roles = [r for r in roles if r in text_lower]
118
+
119
+ return {
120
+ "skills" : found_skills,
121
+ "education" : found_education,
122
+ "experience": experience,
123
+ "location" : locations,
124
+ "roles" : found_roles
125
+ }
126
+
127
+ # ── Main ───────────────────────────────────────────────────────────────────────
128
+ if __name__ == "__main__":
129
+ print("=" * 55)
130
+ print(" VOCABULARY BUILDER β€” NILESH HANOTIA RESUME")
131
+ print("=" * 55)
132
+
133
+ stoi, itos, char_counts, sorted_chars = build_vocab(RESUME_TEXT)
134
+
135
+ print(f"\nTotal characters (with repeats) : {len(RESUME_TEXT)}")
136
+ print(f"Unique characters : {len(stoi)}")
137
+ print(f"Vocab size : {len(stoi)}")
138
+
139
+ print("\n── Top 15 most frequent characters ──")
140
+ for ch, count in sorted_chars[:15]:
141
+ display = repr(ch)
142
+ print(f" {display:6s} β†’ ID {stoi[ch]:3d} | appears {count:4d} times")
143
+
144
+ print("\n── Full Character β†’ ID mapping ──")
145
+ for ch, idx in stoi.items():
146
+ display = repr(ch)
147
+ print(f" {display:6s} β†’ {idx}")
148
+
149
+ # Encode a sample
150
+ sample = "AI Implementation Lead with AWS and Python skills"
151
+ encoded = encode(sample, stoi)
152
+ print(f"\n── Sample Encoding ──")
153
+ print(f" Text : {sample}")
154
+ print(f" Encoded : {encoded}")
155
+
156
+ # Extract keywords
157
+ print(f"\n── Extracted Keywords from Resume ──")
158
+ keywords = extract_keywords(RESUME_TEXT)
159
+ for key, values in keywords.items():
160
+ print(f" {key:12s}: {values}")
161
+
162
+ # Save vocab to JSON
163
+ vocab_data = {
164
+ "stoi" : stoi,
165
+ "itos" : {str(k): v for k, v in itos.items()},
166
+ "vocab_size": len(stoi),
167
+ "keywords" : extract_keywords(RESUME_TEXT)
168
+ }
169
+
170
+ with open("vocab.json", "w") as f:
171
+ json.dump(vocab_data, f, indent=2)
172
+
173
+ print(f"\nβœ… vocab.json saved β€” {len(stoi)} characters mapped")
174
+ print("βœ… Ready for Step 2: Tokenizer")