aiondtech 2.1.0__tar.gz → 2.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aiondtech
3
- Version: 2.1.0
3
+ Version: 2.3.0
4
4
  Summary: Official Python SDK for AiondTech Resume Analyser API
5
5
  Author-email: AiondTech <support@aiondtech.com>
6
6
  Maintainer-email: AiondTech <support@aiondtech.com>
@@ -77,15 +77,17 @@ client = ResumeAnalyser(api_key="your-api-key", production=True)
77
77
 
78
78
  ## API Endpoints
79
79
 
80
+ Credit usage varies depending on resume size and complexity. Every response includes the actual `credits_used` — always check it for accurate tracking.
81
+
80
82
  | Method | Credits | Description |
81
83
  |--------|---------|-------------|
82
- | `resumes.upload()` | 1 | Upload PDF resume |
83
- | `resumes.upload_and_analyze()` | 3 | Upload + AI parsing |
84
- | `resumes.upload_analyze_compare()` | 6 | Upload + parse + compare to job |
85
- | `resumes.analyze()` | 2 | Parse existing resume by ID |
86
- | `resumes.compare_resumes()` | 3 | Compare resume to job |
84
+ | `resumes.upload()` | Varies | Upload PDF resume |
85
+ | `resumes.upload_and_analyze()` | Varies | Upload + AI parsing |
86
+ | `resumes.upload_analyze_compare()` | Varies | Upload + parse + compare to job |
87
+ | `resumes.analyze()` | Varies | Parse existing resume by ID |
88
+ | `resumes.compare_resumes()` | Varies | Compare resume to job |
87
89
  | `resumes.list()` | 0 | List all resumes |
88
- | `jobs.create()` | 1 | Create job posting |
90
+ | `jobs.create()` | Varies | Create job posting |
89
91
  | `jobs.list()` | 0 | List all jobs |
90
92
  | `credits.balance()` | 0 | Check credit balance |
91
93
  | `credits.usage()` | 0 | View usage history |
@@ -100,15 +102,18 @@ Upload a PDF resume without parsing. Returns a `resume_id` for later use.
100
102
 
101
103
  ```python
102
104
  result = client.resumes.upload("path/to/resume.pdf")
105
+
106
+ print(f"Resume ID: {result.resume_id}")
107
+ print(f"Message: {result.message}")
108
+ print(f"Credits Used: {result.credits_used}")
103
109
  ```
104
110
 
105
- **Return type:** `ResumeUploadResult`
111
+ **Output:**
106
112
 
107
- ```python
108
- result.resume_id # int — Unique resume ID
109
- result.message # str — "Resume uploaded successfully"
110
- result.credits_used # int 1
111
- result._raw # dict — Full raw API response
113
+ ```
114
+ Resume ID: 450
115
+ Message: Resume uploaded successfully
116
+ Credits Used: 1
112
117
  ```
113
118
 
114
119
  ---
@@ -119,25 +124,31 @@ Upload a PDF and immediately extract structured data (AI-powered parsing).
119
124
 
120
125
  ```python
121
126
  result = client.resumes.upload_and_analyze("path/to/resume.pdf")
122
- ```
123
127
 
124
- **Return type:** `ResumeAnalysisResult`
128
+ print(f"Resume ID: {result.resume_id}")
129
+ print(f"Full Name: {result.full_name}")
130
+ print(f"Email: {result.email}")
131
+ print(f"Skills: {result.skills}")
132
+ print(f"Job Titles: {result.job_titles}")
133
+ print(f"Total Experience: {result.total_experience}")
134
+ print(f"Credits Used: {result.credits_used}")
135
+ print(f"Parsed Data: {result.parsed_data}")
136
+ ```
125
137
 
126
- ```python
127
- result.resume_id # int — Unique resume ID
128
- result.parsed_data # dict — Full parsed data (see structure below)
129
- result.credits_used # int — 3
130
- result._raw # dict — Full raw API response
138
+ **Output:**
131
139
 
132
- # Convenience properties
133
- result.full_name # str | None
134
- result.email # str | None
135
- result.skills # list[str]
136
- result.job_titles # list[str]
137
- result.total_experience # str | None
140
+ ```
141
+ Resume ID: 450
142
+ Full Name: John Doe
143
+ Email: john@example.com
144
+ Skills: ['Python', 'Django', 'AWS']
145
+ Job Titles: ['Senior Developer', 'Tech Lead']
146
+ Total Experience: 8 years
147
+ Credits Used: 5
148
+ Parsed Data: {'full_name': 'John Doe', 'email': 'john@example.com', ...}
138
149
  ```
139
150
 
140
- **`parsed_data` structure:**
151
+ **Full `parsed_data` structure:**
141
152
 
142
153
  ```python
143
154
  {
@@ -163,20 +174,25 @@ result.total_experience # str | None
163
174
  Upload a resume, parse it, and compare against a job posting in one call.
164
175
 
165
176
  ```python
166
- result = client.resumes.upload_analyze_compare("resume.pdf", job_id=42)
177
+ result = client.resumes.upload_analyze_compare("resume.pdf", job_id=56)
178
+
179
+ print(f"Resume ID: {result.resume_id}")
180
+ print(f"Job ID: {result.job_id}")
181
+ print(f"Score: {result.comparison_score}")
182
+ print(f"Reason: {result.comparison_reason}")
183
+ print(f"Parsed Data: {result.parsed_data}")
184
+ print(f"Credits Used: {result.credits_used}")
167
185
  ```
168
186
 
169
- **Return type:** `ResumeComparisonResult`
187
+ **Output:**
170
188
 
171
- ```python
172
- result.resume_id # int — Resume ID
173
- result.job_id # int — Job ID compared against
174
- result.comparison_score # float — Match score (0-100)
175
- result.comparison_reason # str Detailed reasoning
176
- result.language # str | None Detected language (e.g. "en", "ar")
177
- result.parsed_data # dict | None — Parsed resume data
178
- result.credits_used # int — 6
179
- result._raw # dict — Full raw API response
189
+ ```
190
+ Resume ID: 449
191
+ Job ID: 56
192
+ Score: 30
193
+ Reason: The candidate has a strong technical background...
194
+ Parsed Data: {'full_name': 'Salem O. Ba Atya', 'email': 'Baatyaso@gmail.com', ...}
195
+ Credits Used: 9
180
196
  ```
181
197
 
182
198
  ---
@@ -186,30 +202,43 @@ result._raw # dict — Full raw API response
186
202
  Parse an already-uploaded resume by its ID.
187
203
 
188
204
  ```python
189
- result = client.resumes.analyze(resume_id=123)
205
+ result = client.resumes.analyze(resume_id=444)
206
+
207
+ print(f"Resume ID: {result.resume_id}")
208
+ print(f"Partner: {result.partner}")
209
+ print(f"Full Name: {result.full_name}")
210
+ print(f"Email: {result.email}")
211
+ print(f"Phone: {result.phone}")
212
+ print(f"LinkedIn: {result.linkedin}")
213
+ print(f"Location: {result.location}")
214
+ print(f"Skills: {result.skills}")
215
+ print(f"Job Titles: {result.job_titles}")
216
+ print(f"Companies: {result.companies}")
217
+ print(f"Education: {result.education}")
218
+ print(f"Total Experience: {result.total_experience}")
219
+ print(f"Certifications: {result.certifications}")
220
+ print(f"Credits Used: {result.credits_used}")
221
+ print(f"Parsed Data: {result.parsed_data}")
190
222
  ```
191
223
 
192
- **Return type:** `ParsedResumeResult`
224
+ **Output:**
193
225
 
194
- ```python
195
- result.resume_id # int — Resume ID
196
- result.partner # str — Partner identifier
197
- result.parsed_data # dict Full parsed data
198
- result.credits_used # int — 2
199
- result._raw # dict — Full raw API response
200
-
201
- # Convenience properties
202
- result.full_name # str | None
203
- result.email # str | None
204
- result.phone # str | None
205
- result.linkedin # str | None
206
- result.location # str | None
207
- result.skills # list[str]
208
- result.job_titles # list[str]
209
- result.companies # list[str]
210
- result.education # list[str]
211
- result.total_experience # str | None
212
- result.certifications # list[str]
226
+ ```
227
+ Resume ID: 444
228
+ Partner: your-partner-id
229
+ Full Name: John Doe
230
+ Email: john@example.com
231
+ Phone: +1234567890
232
+ LinkedIn: linkedin.com/in/johndoe
233
+ Location: New York, NY
234
+ Skills: ['Python', 'Django', 'AWS']
235
+ Job Titles: ['Senior Developer', 'Tech Lead']
236
+ Companies: ['Google', 'Meta']
237
+ Education: ['BSc Computer Science - MIT']
238
+ Total Experience: 8 years
239
+ Certifications: ['AWS Certified Solutions Architect']
240
+ Credits Used: 3
241
+ Parsed Data: {'full_name': 'John Doe', ...}
213
242
  ```
214
243
 
215
244
  ---
@@ -223,18 +252,24 @@ job = client.jobs.create(
223
252
  title="Senior Python Developer",
224
253
  description="We are looking for an experienced Python developer..."
225
254
  )
255
+
256
+ print(f"Job ID: {job.job_id}")
257
+ print(f"Title: {job.title}")
258
+ print(f"Description: {job.description}")
259
+ print(f"Created By: {job.created_by}")
260
+ print(f"Created At: {job.created_at}")
261
+ print(f"Credits Used: {job.credits_used}")
226
262
  ```
227
263
 
228
- **Return type:** `JobResult`
264
+ **Output:**
229
265
 
230
- ```python
231
- job.job_id # int — Unique job ID
232
- job.title # str Job title
233
- job.description # str Job description
234
- job.created_by # str — Creator identifier
235
- job.created_at # str | None — Creation timestamp
236
- job.credits_used # int — 1
237
- job._raw # dict — Full raw API response
266
+ ```
267
+ Job ID: 57
268
+ Title: Senior Python Developer
269
+ Description: We are looking for an experienced Python developer...
270
+ Created By: your-partner-id
271
+ Created At: 2026-02-06T10:30:00Z
272
+ Credits Used: 1
238
273
  ```
239
274
 
240
275
  ---
@@ -244,19 +279,25 @@ job._raw # dict — Full raw API response
244
279
  Compare an existing resume against an existing job posting.
245
280
 
246
281
  ```python
247
- result = client.resumes.compare_resumes(resume_id=123, job_id=456)
282
+ result = client.resumes.compare_resumes(resume_id=445, job_id=56)
283
+
284
+ print(f"Resume ID: {result.resume_id}")
285
+ print(f"Job ID: {result.job_id}")
286
+ print(f"Score: {result.comparison_score}")
287
+ print(f"Reason: {result.comparison_reason}")
288
+ print(f"Language: {result.language}")
289
+ print(f"Credits Used: {result.credits_used}")
248
290
  ```
249
291
 
250
- **Return type:** `ResumeComparisonResult`
292
+ **Output:**
251
293
 
252
- ```python
253
- result.resume_id # int — Resume ID
254
- result.job_id # int — Job ID
255
- result.comparison_score # float — Match score (0-100)
256
- result.comparison_reason # str Detailed reasoning
257
- result.language # str | None — Detected language (e.g. "en", "ar")
258
- result.credits_used # int — 3
259
- result._raw # dict — Full raw API response
294
+ ```
295
+ Resume ID: 445
296
+ Job ID: 56
297
+ Score: 75
298
+ Reason: The candidate demonstrates strong alignment with the role requirements...
299
+ Language: en
300
+ Credits Used: 5
260
301
  ```
261
302
 
262
303
  ---
@@ -267,23 +308,28 @@ List all uploaded resumes with pagination.
267
308
 
268
309
  ```python
269
310
  result = client.resumes.list(page=1, limit=50)
270
- ```
271
311
 
272
- **Return type:** `ResumeListResult`
312
+ print(f"Total: {result.total}")
313
+ print(f"Page: {result.page}")
314
+ print(f"Limit: {result.limit}")
315
+ print(f"Has More: {result.has_more}")
316
+ print(f"Count: {len(result)}")
273
317
 
274
- ```python
275
- result.resumes # list[dict] — List of resume objects
276
- result.total # int — Total number of resumes
277
- result.page # int — Current page
278
- result.limit # int — Items per page
279
- result.has_more # bool — Whether more pages exist
280
- result._raw # dict — Full raw API response
281
-
282
- # Iterable
283
318
  for resume in result:
284
- print(resume["id"], resume.get("full_name"))
319
+ print(f" ID: {resume['id']}, Name: {resume.get('full_name')}, File: {resume.get('filename')}")
320
+ ```
321
+
322
+ **Output:**
285
323
 
286
- len(result) # Number of resumes on this page
324
+ ```
325
+ Total: 120
326
+ Page: 1
327
+ Limit: 50
328
+ Has More: True
329
+ Count: 50
330
+ ID: 450, Name: John Doe, File: resume.pdf
331
+ ID: 449, Name: Salem O. Ba Atya, File: Salem_20220524.pdf
332
+ ...
287
333
  ```
288
334
 
289
335
  ---
@@ -294,21 +340,28 @@ List all job postings with pagination.
294
340
 
295
341
  ```python
296
342
  result = client.jobs.list(page=1, limit=50)
297
- ```
298
343
 
299
- **Return type:** `JobListResult`
344
+ print(f"Total: {result.total}")
345
+ print(f"Page: {result.page}")
346
+ print(f"Limit: {result.limit}")
347
+ print(f"Has More: {result.has_more}")
348
+ print(f"Count: {len(result)}")
300
349
 
301
- ```python
302
- result.jobs # list[dict] — List of job objects
303
- result.total # int — Total number of jobs
304
- result.page # int — Current page
305
- result.limit # int — Items per page
306
- result.has_more # bool — Whether more pages exist
307
- result._raw # dict — Full raw API response
308
-
309
- # Iterable
310
350
  for job in result:
311
- print(job["id"], job["title"])
351
+ print(f" ID: {job['id']}, Title: {job['title']}")
352
+ ```
353
+
354
+ **Output:**
355
+
356
+ ```
357
+ Total: 10
358
+ Page: 1
359
+ Limit: 50
360
+ Has More: False
361
+ Count: 10
362
+ ID: 56, Title: Senior Python Developer
363
+ ID: 55, Title: Data Scientist
364
+ ...
312
365
  ```
313
366
 
314
367
  ---
@@ -317,18 +370,22 @@ for job in result:
317
370
 
318
371
  ```python
319
372
  balance = client.credits.balance()
373
+
374
+ print(f"Total: {balance.get('total')}")
375
+ print(f"Used This Month: {balance.get('used_mtd')}")
376
+ print(f"Remaining: {balance.get('remaining')}")
377
+ print(f"Plan: {balance.get('plan_name')}")
378
+ print(f"Resets At: {balance.get('resets_at')}")
320
379
  ```
321
380
 
322
- **Returns:** `dict`
381
+ **Output:**
323
382
 
324
- ```python
325
- {
326
- "total": 1000,
327
- "used_mtd": 150,
328
- "remaining": 850,
329
- "plan_name": "Professional",
330
- "resets_at": "2026-03-01T00:00:00Z"
331
- }
383
+ ```
384
+ Total: 1000
385
+ Used This Month: 150
386
+ Remaining: 850
387
+ Plan: Professional
388
+ Resets At: 2026-03-01T00:00:00Z
332
389
  ```
333
390
 
334
391
  ---
@@ -337,8 +394,11 @@ balance = client.credits.balance()
337
394
 
338
395
  ```python
339
396
  usage = client.credits.usage()
397
+ print(usage)
398
+
340
399
  # Or with date filters
341
400
  usage = client.credits.usage(start_date="2026-01-01", end_date="2026-01-31")
401
+ print(usage)
342
402
  ```
343
403
 
344
404
  ---
@@ -390,13 +450,14 @@ job = client.jobs.create(
390
450
  title="Senior Python Developer",
391
451
  description="5+ years Python, Django, AWS, PostgreSQL required..."
392
452
  )
393
- print(f"Created job #{job.job_id}: {job.title}")
453
+ print(f"Created job #{job.job_id}: {job.title} ({job.credits_used} credits)")
394
454
 
395
455
  # Step 2: Upload and analyze a resume
396
456
  analysis = client.resumes.upload_and_analyze("candidate_resume.pdf")
397
457
  print(f"Candidate: {analysis.full_name}")
398
458
  print(f"Skills: {', '.join(analysis.skills)}")
399
459
  print(f"Experience: {analysis.total_experience}")
460
+ print(f"Credits used: {analysis.credits_used}")
400
461
 
401
462
  # Step 3: Compare resume to job
402
463
  comparison = client.resumes.compare_resumes(
@@ -404,8 +465,8 @@ comparison = client.resumes.compare_resumes(
404
465
  job_id=job.job_id
405
466
  )
406
467
  print(f"Score: {comparison.comparison_score}%")
407
- print(f"Language: {comparison.language}")
408
468
  print(f"Reasoning: {comparison.comparison_reason}")
469
+ print(f"Credits used: {comparison.credits_used}")
409
470
 
410
471
  # Step 4: Check remaining credits
411
472
  balance = client.credits.balance()
@@ -417,6 +478,7 @@ print(f"Credits remaining: {balance['remaining']}")
417
478
  ```python
418
479
  result = client.resumes.upload_analyze_compare("resume.pdf", job_id=job.job_id)
419
480
  print(f"Score: {result.comparison_score}% — {result.comparison_reason}")
481
+ print(f"Credits used: {result.credits_used}")
420
482
  ```
421
483
 
422
484
  ### Batch Processing
@@ -426,18 +488,22 @@ import os
426
488
 
427
489
  job = client.jobs.create("Data Scientist", "ML, Python, statistics...")
428
490
 
491
+ total_credits = job.credits_used
429
492
  results = []
493
+
430
494
  for pdf in os.listdir("resumes/"):
431
495
  if pdf.endswith(".pdf"):
432
496
  r = client.resumes.upload_analyze_compare(
433
497
  f"resumes/{pdf}", job_id=job.job_id
434
498
  )
435
499
  results.append(r)
436
- print(f"{r.comparison_score:5.1f}% — {pdf}")
500
+ total_credits += r.credits_used
501
+ print(f"{r.comparison_score:5.1f}% — {pdf} ({r.credits_used} credits)")
437
502
 
438
503
  # Sort by score
439
504
  results.sort(key=lambda x: x.comparison_score, reverse=True)
440
505
  print(f"\nTop candidate: resume_id={results[0].resume_id} ({results[0].comparison_score}%)")
506
+ print(f"Total credits used: {total_credits}")
441
507
  ```
442
508
 
443
509
  ---