offerprinter 0.2.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.
- offerprinter-0.2.0/.gitignore +36 -0
- offerprinter-0.2.0/CHANGELOG.md +104 -0
- offerprinter-0.2.0/LICENSE +21 -0
- offerprinter-0.2.0/PKG-INFO +542 -0
- offerprinter-0.2.0/README.md +495 -0
- offerprinter-0.2.0/app.py +395 -0
- offerprinter-0.2.0/cli.py +13 -0
- offerprinter-0.2.0/config.example.toml +80 -0
- offerprinter-0.2.0/deploy/README.md +101 -0
- offerprinter-0.2.0/deploy/huggingface/README.md +43 -0
- offerprinter-0.2.0/docs/skill/SKILL.md +124 -0
- offerprinter-0.2.0/examples/README.md +28 -0
- offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/ats-keyword-report.docx +0 -0
- offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/ats-keyword-report.md +39 -0
- offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/cover-letter.docx +0 -0
- offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/cover-letter.md +34 -0
- offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/fit-memo.docx +0 -0
- offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/fit-memo.md +39 -0
- offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/full-package.docx +0 -0
- offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/full-package.md +242 -0
- offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/interview-prep-pack.docx +0 -0
- offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/interview-prep-pack.md +66 -0
- offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/tailored-cv.docx +0 -0
- offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/tailored-cv.md +45 -0
- offerprinter-0.2.0/examples/sample_cv.md +41 -0
- offerprinter-0.2.0/examples/sample_jd.md +37 -0
- offerprinter-0.2.0/offerprinter/__init__.py +7 -0
- offerprinter-0.2.0/offerprinter/cli.py +523 -0
- offerprinter-0.2.0/offerprinter/config.py +183 -0
- offerprinter-0.2.0/offerprinter/controllers/__init__.py +5 -0
- offerprinter-0.2.0/offerprinter/controllers/pipeline.py +135 -0
- offerprinter-0.2.0/offerprinter/llm/__init__.py +11 -0
- offerprinter-0.2.0/offerprinter/llm/anthropic_provider.py +41 -0
- offerprinter-0.2.0/offerprinter/llm/base.py +125 -0
- offerprinter-0.2.0/offerprinter/llm/factory.py +33 -0
- offerprinter-0.2.0/offerprinter/llm/gemini_provider.py +38 -0
- offerprinter-0.2.0/offerprinter/llm/kimi_provider.py +16 -0
- offerprinter-0.2.0/offerprinter/llm/ollama_provider.py +24 -0
- offerprinter-0.2.0/offerprinter/llm/openai_provider.py +42 -0
- offerprinter-0.2.0/offerprinter/models/__init__.py +21 -0
- offerprinter-0.2.0/offerprinter/models/schemas.py +202 -0
- offerprinter-0.2.0/offerprinter/pricing.py +98 -0
- offerprinter-0.2.0/offerprinter/prompts/__init__.py +32 -0
- offerprinter-0.2.0/offerprinter/prompts/templates.py +339 -0
- offerprinter-0.2.0/offerprinter/services/__init__.py +14 -0
- offerprinter-0.2.0/offerprinter/services/cv_parser.py +84 -0
- offerprinter-0.2.0/offerprinter/services/generator.py +169 -0
- offerprinter-0.2.0/offerprinter/services/jd_fetcher.py +86 -0
- offerprinter-0.2.0/offerprinter/services/pdf_writer.py +329 -0
- offerprinter-0.2.0/offerprinter/services/tracker.py +210 -0
- offerprinter-0.2.0/offerprinter/services/writer.py +142 -0
- offerprinter-0.2.0/offerprinter/ui/__init__.py +9 -0
- offerprinter-0.2.0/offerprinter/ui/printer.py +165 -0
- offerprinter-0.2.0/pyproject.toml +125 -0
- offerprinter-0.2.0/tests/__init__.py +0 -0
- offerprinter-0.2.0/tests/conftest.py +72 -0
- offerprinter-0.2.0/tests/test_offerprinter.py +259 -0
- offerprinter-0.2.0/tests/test_pdf_writer.py +127 -0
- offerprinter-0.2.0/tests/test_pricing_and_retries.py +217 -0
- offerprinter-0.2.0/tests/test_tracker.py +168 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# --- OfferPrinter ---
|
|
2
|
+
# Never commit secrets or generated user output.
|
|
3
|
+
config.toml
|
|
4
|
+
.env
|
|
5
|
+
output/
|
|
6
|
+
!examples/output/
|
|
7
|
+
|
|
8
|
+
# --- Python ---
|
|
9
|
+
__pycache__/
|
|
10
|
+
*.py[cod]
|
|
11
|
+
*.egg-info/
|
|
12
|
+
.eggs/
|
|
13
|
+
build/
|
|
14
|
+
dist/
|
|
15
|
+
.venv/
|
|
16
|
+
venv/
|
|
17
|
+
env/
|
|
18
|
+
.python-version
|
|
19
|
+
|
|
20
|
+
# --- Packaging / release ---
|
|
21
|
+
*.spec.bak
|
|
22
|
+
release/
|
|
23
|
+
# (dist/ and build/ are already ignored under Python, above)
|
|
24
|
+
|
|
25
|
+
# --- Tooling ---
|
|
26
|
+
.ruff_cache/
|
|
27
|
+
.pytest_cache/
|
|
28
|
+
.mypy_cache/
|
|
29
|
+
.coverage
|
|
30
|
+
htmlcov/
|
|
31
|
+
|
|
32
|
+
# --- OS / editor ---
|
|
33
|
+
.DS_Store
|
|
34
|
+
.idea/
|
|
35
|
+
.vscode/
|
|
36
|
+
*.swp
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to OfferPrinter are documented here.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.2.0] — 2026-08-18
|
|
11
|
+
|
|
12
|
+
The "actually installable, and quite a lot faster" release.
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
**Distribution**
|
|
17
|
+
- Published to PyPI: `pipx install offerprinter`, `uvx offerprinter`, or
|
|
18
|
+
`pip install offerprinter`.
|
|
19
|
+
- `offerprinter` and `opr` console scripts, so it works from anywhere after
|
|
20
|
+
install rather than only from a git clone.
|
|
21
|
+
- Standalone binaries for macOS, Linux and Windows attached to each release —
|
|
22
|
+
no Python installation required.
|
|
23
|
+
- Multi-arch Docker image published to GHCR on every push and tag:
|
|
24
|
+
`ghcr.io/mohitagw15856/offerprinter:latest`.
|
|
25
|
+
- Homebrew formula in `packaging/homebrew/` for a `brew install` tap.
|
|
26
|
+
- Deployment guides for Streamlit Community Cloud, Hugging Face Spaces, Docker
|
|
27
|
+
and container platforms, in `deploy/`.
|
|
28
|
+
|
|
29
|
+
**Features**
|
|
30
|
+
- **Fit score** — every run ends with a 0-100 score, a band, and honest
|
|
31
|
+
strengths and gaps. Written to `fit-score.md` and shown in the CLI and web UI.
|
|
32
|
+
- **PDF output** — real, selectable, ATS-friendly Helvetica text, written by a
|
|
33
|
+
dependency-free PDF writer rather than a rendering engine. Enable with
|
|
34
|
+
`--formats md,docx,pdf`.
|
|
35
|
+
- **Roast mode** — `offerprinter roast --cv cv.pdf`, or `--roast` during a run.
|
|
36
|
+
Blunt, funny, opt-in critique of your CV's *writing*. Still never dishonest.
|
|
37
|
+
- **Application tracker** — every run is recorded locally in
|
|
38
|
+
`~/.offerprinter/applications.json`. New commands: `offerprinter list`,
|
|
39
|
+
`offerprinter stats`, `offerprinter status <slug> <status>`.
|
|
40
|
+
- **Achievements** — eleven small milestones, computed from your local history.
|
|
41
|
+
- **Batch mode** — `--jd-dir ./jobs` prints a package for every job description
|
|
42
|
+
in a folder.
|
|
43
|
+
- **Cost and token reporting** — every run reports calls, tokens and estimated
|
|
44
|
+
spend. `--dry-run` forecasts the cost without calling the API at all.
|
|
45
|
+
- **Ollama provider** — run entirely on your own machine with no API key and no
|
|
46
|
+
data leaving your laptop: `--provider ollama`.
|
|
47
|
+
- **Printer animation** — an ASCII dot-matrix printer feeding a sheet per
|
|
48
|
+
document. Degrades to plain status lines when not a terminal, or with
|
|
49
|
+
`--no-animation`.
|
|
50
|
+
- **Demo mode in the web UI** — with no API key configured, the app shows the
|
|
51
|
+
bundled example package instead of an error, which is what makes a public
|
|
52
|
+
hosted demo possible.
|
|
53
|
+
|
|
54
|
+
**Reliability**
|
|
55
|
+
- Automatic retries with exponential backoff and `Retry-After` support on 429s
|
|
56
|
+
and 5xx errors. A single rate limit no longer kills a five-document run.
|
|
57
|
+
- `[pricing]` config table to override list prices with your actual rates.
|
|
58
|
+
|
|
59
|
+
**Project**
|
|
60
|
+
- `CONTRIBUTING.md`, `SECURITY.md`, `CODE_OF_CONDUCT.md`, this changelog, issue
|
|
61
|
+
and pull request templates.
|
|
62
|
+
- CI now runs the test suite across Python 3.11/3.12/3.13 with macOS and Windows
|
|
63
|
+
spot-checks, plus coverage, a packaging build, and a console-script smoke test.
|
|
64
|
+
|
|
65
|
+
### Changed
|
|
66
|
+
|
|
67
|
+
- **Artifacts now generate in parallel.** They are independent of each other, so
|
|
68
|
+
a full run takes about as long as its slowest single document instead of the
|
|
69
|
+
sum of all five. Use `--sequential` for the old behaviour.
|
|
70
|
+
- The CLI moved to `offerprinter/cli.py` so it ships inside the installed
|
|
71
|
+
package. `python cli.py …` still works from a clone.
|
|
72
|
+
- The web UI (`streamlit`) is now an optional extra, keeping
|
|
73
|
+
`pipx install offerprinter` small. Install it with `offerprinter[web]`.
|
|
74
|
+
- Default output formats remain `md` and `docx`; `pdf` is opt-in via config
|
|
75
|
+
or `--formats`.
|
|
76
|
+
|
|
77
|
+
### Fixed
|
|
78
|
+
|
|
79
|
+
- The `offerprinter` console script pointed at a root-level `cli` module that
|
|
80
|
+
was never included in the wheel, so it could not resolve after an install.
|
|
81
|
+
- The README claimed CI ran `pytest`. It didn't. Now it does.
|
|
82
|
+
|
|
83
|
+
## [0.1.0] — 2026-08-18
|
|
84
|
+
|
|
85
|
+
First release — "First Print".
|
|
86
|
+
|
|
87
|
+
### Added
|
|
88
|
+
|
|
89
|
+
- Five generated artifacts from one CV and one job description: tailored CV,
|
|
90
|
+
cover letter, fit memo, ATS keyword report, interview prep pack.
|
|
91
|
+
- The no-fabrication guarantee, enforced in every prompt.
|
|
92
|
+
- Four providers behind one interface: Anthropic (default), OpenAI, Gemini,
|
|
93
|
+
Moonshot Kimi.
|
|
94
|
+
- CLI (Typer), web UI (Streamlit), and an agent skill at `docs/skill/SKILL.md`.
|
|
95
|
+
- CV input as `.pdf`, `.docx`, `.md`, `.txt` or pasted text; job description as a
|
|
96
|
+
URL or text.
|
|
97
|
+
- Markdown and Word output, plus a combined full package.
|
|
98
|
+
- UK and US English.
|
|
99
|
+
- Config via env vars, `config.toml`, or defaults.
|
|
100
|
+
- Dockerfile and docker-compose, offline test suite, ruff lint.
|
|
101
|
+
|
|
102
|
+
[Unreleased]: https://github.com/mohitagw15856/OfferPrinter/compare/v0.2.0...HEAD
|
|
103
|
+
[0.2.0]: https://github.com/mohitagw15856/OfferPrinter/compare/v0.1.0...v0.2.0
|
|
104
|
+
[0.1.0]: https://github.com/mohitagw15856/OfferPrinter/releases/tag/v0.1.0
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 OfferPrinter contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|