mrrobot1024
commited on
Commit
Β·
6e2bf85
1
Parent(s):
3166780
Restructuring the application repo.
Browse files- .gitignore +4 -0
- .python-version +1 -0
- .vscode/settings.json +3 -0
- README.md +87 -0
- job_writing_agent/nodes/createdraft.py β __init__.py +0 -0
- job_writing_agent.egg-info/PKG-INFO +0 -333
- job_writing_agent.egg-info/SOURCES.txt +0 -40
- job_writing_agent.egg-info/dependency_links.txt +0 -1
- job_writing_agent.egg-info/top_level.txt +0 -1
- langgraph.json +10 -0
- pyproject.toml +260 -0
- job_writing_agent.egg-info/requires.txt β requirements.txt +0 -1
- {job_writing_agent β src/job_writing_agent}/__init__.py +0 -0
- {job_writing_agent β src/job_writing_agent}/agents/__init__.py +0 -0
- {job_writing_agent β src/job_writing_agent}/agents/nodes.py +0 -0
- {job_writing_agent β src/job_writing_agent}/agents/output_schema.py +0 -0
- {job_writing_agent β src/job_writing_agent}/classes/__init__.py +0 -0
- {job_writing_agent β src/job_writing_agent}/classes/classes.py +0 -0
- {job_writing_agent β src/job_writing_agent}/langgraph_init.py +0 -0
- src/job_writing_agent/logs/job_writer.log +0 -0
- {job_writing_agent β src/job_writing_agent}/nodes/__init__.py +0 -0
- job_writing_agent/utils/langfuse_handler.py β src/job_writing_agent/nodes/createdraft.py +0 -0
- {job_writing_agent β src/job_writing_agent}/nodes/initializing.py +0 -0
- {job_writing_agent β src/job_writing_agent}/nodes/research_workflow.py +0 -0
- {job_writing_agent β src/job_writing_agent}/nodes/selfconsistency.py +0 -0
- {job_writing_agent β src/job_writing_agent}/nodes/test_workflow.py +0 -0
- {job_writing_agent β src/job_writing_agent}/nodes/variations.py +0 -0
- {job_writing_agent β src/job_writing_agent}/prompts.md +0 -0
- {job_writing_agent β src/job_writing_agent}/prompts/__init__.py +0 -0
- {job_writing_agent β src/job_writing_agent}/prompts/templates.py +0 -0
- {job_writing_agent β src/job_writing_agent}/tools/SearchTool.py +0 -0
- {job_writing_agent β src/job_writing_agent}/tools/__init__.py +0 -0
- {job_writing_agent β src/job_writing_agent}/utils/__init__.py +0 -0
- {job_writing_agent β src/job_writing_agent}/utils/application_cli_interface.py +0 -0
- {job_writing_agent β src/job_writing_agent}/utils/config.py +0 -0
- {job_writing_agent β src/job_writing_agent}/utils/config_utils.py +0 -0
- {job_writing_agent β src/job_writing_agent}/utils/document_processing.py +0 -0
- {job_writing_agent β src/job_writing_agent}/utils/dspy_job_extract.py +0 -0
- {job_writing_agent β src/job_writing_agent}/utils/errors.py +0 -0
- src/job_writing_agent/utils/langfuse_handler.py +0 -0
- {job_writing_agent β src/job_writing_agent}/utils/llm_client.py +0 -0
- {job_writing_agent β src/job_writing_agent}/utils/llm_provider_factory.py +0 -0
- {job_writing_agent β src/job_writing_agent}/utils/result_utils.py +0 -0
- {job_writing_agent β src/job_writing_agent}/utils/vector_store.py +0 -0
- {job_writing_agent β src/job_writing_agent}/workflow.py +0 -0
- uv.lock +0 -0
.gitignore
CHANGED
|
@@ -33,3 +33,7 @@ __pycache__/
|
|
| 33 |
*.py[cod]
|
| 34 |
*.pyc
|
| 35 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
*.py[cod]
|
| 34 |
*.pyc
|
| 35 |
|
| 36 |
+
# Git backup
|
| 37 |
+
src/.git_backup
|
| 38 |
+
src/job_writing_agent.egg-info/*
|
| 39 |
+
|
.python-version
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
3.12.8
|
.vscode/settings.json
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"python.defaultInterpreterPath": "/home/icangdb/application_writing_agent/.venv/bin/python"
|
| 3 |
+
}
|
README.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Job Writer Module
|
| 2 |
+
|
| 3 |
+
A modular, well-structured package for creating tailored job applications using LangChain and LangGraph with LangSmith observability.
|
| 4 |
+
|
| 5 |
+
## Features
|
| 6 |
+
|
| 7 |
+
- Creates personalized job application materials based on resumes and job descriptions
|
| 8 |
+
- Supports multiple application types: cover letters, bullet points, and LinkedIn messages
|
| 9 |
+
- Uses RAG for personalization and web search for company research
|
| 10 |
+
- Provides human-in-the-loop feedback integration
|
| 11 |
+
- Implements self-consistency voting for quality control
|
| 12 |
+
|
| 13 |
+
## Installation
|
| 14 |
+
|
| 15 |
+
```bash
|
| 16 |
+
# Install the package and its dependencies
|
| 17 |
+
pip install -e .
|
| 18 |
+
|
| 19 |
+
# Install development dependencies (including linting tools)
|
| 20 |
+
pip install -r requirements-dev.txt
|
| 21 |
+
```
|
| 22 |
+
|
| 23 |
+
## Code Standards and Linting
|
| 24 |
+
|
| 25 |
+
This project uses several tools to ensure code quality:
|
| 26 |
+
|
| 27 |
+
1. **Black** - Code formatter that enforces consistent style
|
| 28 |
+
2. **isort** - Sorts imports according to best practices
|
| 29 |
+
3. **Flake8** - Style guide enforcement
|
| 30 |
+
4. **mypy** - Static type checking
|
| 31 |
+
|
| 32 |
+
### Running the Linters
|
| 33 |
+
|
| 34 |
+
```bash
|
| 35 |
+
# Format code with Black
|
| 36 |
+
black job_writer/
|
| 37 |
+
|
| 38 |
+
# Sort imports
|
| 39 |
+
isort job_writer/
|
| 40 |
+
|
| 41 |
+
# Check style with Flake8
|
| 42 |
+
flake8 job_writer/
|
| 43 |
+
|
| 44 |
+
# Type checking with mypy
|
| 45 |
+
mypy job_writer/
|
| 46 |
+
```
|
| 47 |
+
|
| 48 |
+
### Pre-commit Hooks
|
| 49 |
+
|
| 50 |
+
We use pre-commit hooks to automatically run linters before each commit:
|
| 51 |
+
|
| 52 |
+
```bash
|
| 53 |
+
# Install the pre-commit hooks
|
| 54 |
+
pip install pre-commit
|
| 55 |
+
pre-commit install
|
| 56 |
+
|
| 57 |
+
# You can also run the hooks manually
|
| 58 |
+
pre-commit run --all-files
|
| 59 |
+
```
|
| 60 |
+
|
| 61 |
+
## Usage Example
|
| 62 |
+
|
| 63 |
+
```python
|
| 64 |
+
import asyncio
|
| 65 |
+
from job_writer.workflow import run_job_application_writer
|
| 66 |
+
|
| 67 |
+
# Run the job application writer
|
| 68 |
+
result = asyncio.run(run_job_application_writer(
|
| 69 |
+
resume_path="path/to/resume.pdf",
|
| 70 |
+
job_desc_path="https://example.com/job-posting",
|
| 71 |
+
content="cover_letter"
|
| 72 |
+
))
|
| 73 |
+
|
| 74 |
+
print(result["final"])
|
| 75 |
+
```
|
| 76 |
+
|
| 77 |
+
Alternatively, you can use the command-line interface:
|
| 78 |
+
|
| 79 |
+
```bash
|
| 80 |
+
python -m job_writer.workflow --resume path/to/resume.pdf --job https://example.com/job-posting --type cover_letter
|
| 81 |
+
```
|
| 82 |
+
|
| 83 |
+
Run with uv
|
| 84 |
+
|
| 85 |
+
```bash
|
| 86 |
+
uv run --active -m job_writing_agent.workflow --resume resumefilepath --job jobposturl
|
| 87 |
+
```
|
job_writing_agent/nodes/createdraft.py β __init__.py
RENAMED
|
File without changes
|
job_writing_agent.egg-info/PKG-INFO
DELETED
|
@@ -1,333 +0,0 @@
|
|
| 1 |
-
Metadata-Version: 2.4
|
| 2 |
-
Name: job_writing_agent
|
| 3 |
-
Version: 1.0.0
|
| 4 |
-
Summary: This module can run an agent which is capable of running langgraph agent sing tools like tavily search
|
| 5 |
-
Requires-Python: >=3.11
|
| 6 |
-
Description-Content-Type: text/markdown
|
| 7 |
-
Requires-Dist: aiofiles==24.1.0
|
| 8 |
-
Requires-Dist: aiohappyeyeballs==2.6.1
|
| 9 |
-
Requires-Dist: aiohttp==3.12.15
|
| 10 |
-
Requires-Dist: aiosignal==1.4.0
|
| 11 |
-
Requires-Dist: alembic==1.16.5
|
| 12 |
-
Requires-Dist: annotated-types==0.7.0
|
| 13 |
-
Requires-Dist: anyio==4.11.0
|
| 14 |
-
Requires-Dist: asyncer==0.0.8
|
| 15 |
-
Requires-Dist: attrs==25.3.0
|
| 16 |
-
Requires-Dist: authlib==1.6.5
|
| 17 |
-
Requires-Dist: av==15.1.0
|
| 18 |
-
Requires-Dist: babel==2.17.0
|
| 19 |
-
Requires-Dist: backoff==2.2.1
|
| 20 |
-
Requires-Dist: beautifulsoup4==4.14.2
|
| 21 |
-
Requires-Dist: blinker==1.9.0
|
| 22 |
-
Requires-Dist: blockbuster==1.5.25
|
| 23 |
-
Requires-Dist: bs4==0.0.2
|
| 24 |
-
Requires-Dist: cachetools==6.2.0
|
| 25 |
-
Requires-Dist: certifi==2025.10.5
|
| 26 |
-
Requires-Dist: cffi==2.0.0
|
| 27 |
-
Requires-Dist: charset-normalizer==3.4.3
|
| 28 |
-
Requires-Dist: click==8.3.0
|
| 29 |
-
Requires-Dist: click-default-group==1.2.4
|
| 30 |
-
Requires-Dist: cloudpickle==3.1.1
|
| 31 |
-
Requires-Dist: colorama==0.4.6
|
| 32 |
-
Requires-Dist: coloredlogs==15.0.1
|
| 33 |
-
Requires-Dist: colorlog==6.9.0
|
| 34 |
-
Requires-Dist: condense-json==0.1.3
|
| 35 |
-
Requires-Dist: contourpy==1.3.3
|
| 36 |
-
Requires-Dist: courlan==1.3.2
|
| 37 |
-
Requires-Dist: cryptography==44.0.3
|
| 38 |
-
Requires-Dist: cycler==0.12.1
|
| 39 |
-
Requires-Dist: cyclopts==3.24.0
|
| 40 |
-
Requires-Dist: databricks-sdk==0.67.0
|
| 41 |
-
Requires-Dist: dataclasses-json==0.6.7
|
| 42 |
-
Requires-Dist: dateparser==1.2.2
|
| 43 |
-
Requires-Dist: diskcache==5.6.3
|
| 44 |
-
Requires-Dist: distro==1.9.0
|
| 45 |
-
Requires-Dist: dnspython==2.8.0
|
| 46 |
-
Requires-Dist: docker==7.1.0
|
| 47 |
-
Requires-Dist: docstring-parser==0.17.0
|
| 48 |
-
Requires-Dist: docutils==0.22.2
|
| 49 |
-
Requires-Dist: dspy==3.0.3
|
| 50 |
-
Requires-Dist: dspy-ai==3.0.3
|
| 51 |
-
Requires-Dist: email-validator==2.3.0
|
| 52 |
-
Requires-Dist: eval-type-backport==0.2.2
|
| 53 |
-
Requires-Dist: exceptiongroup==1.3.0
|
| 54 |
-
Requires-Dist: fastapi==0.118.0
|
| 55 |
-
Requires-Dist: fastmcp==2.12.4
|
| 56 |
-
Requires-Dist: fastuuid==0.13.5
|
| 57 |
-
Requires-Dist: filelock==3.19.1
|
| 58 |
-
Requires-Dist: flask==3.1.2
|
| 59 |
-
Requires-Dist: flatbuffers==25.9.23
|
| 60 |
-
Requires-Dist: fonttools==4.60.1
|
| 61 |
-
Requires-Dist: forbiddenfruit==0.1.4
|
| 62 |
-
Requires-Dist: frozenlist==1.7.0
|
| 63 |
-
Requires-Dist: fsspec==2025.9.0
|
| 64 |
-
Requires-Dist: gepa==0.0.7
|
| 65 |
-
Requires-Dist: gitdb==4.0.12
|
| 66 |
-
Requires-Dist: gitpython==3.1.45
|
| 67 |
-
Requires-Dist: google-auth==2.41.1
|
| 68 |
-
Requires-Dist: googleapis-common-protos==1.70.0
|
| 69 |
-
Requires-Dist: graphene==3.4.3
|
| 70 |
-
Requires-Dist: graphql-core==3.2.6
|
| 71 |
-
Requires-Dist: graphql-relay==3.2.0
|
| 72 |
-
Requires-Dist: greenlet==3.2.4
|
| 73 |
-
Requires-Dist: grpcio==1.76.0
|
| 74 |
-
Requires-Dist: grpcio-tools==1.76.0
|
| 75 |
-
Requires-Dist: gunicorn==23.0.0
|
| 76 |
-
Requires-Dist: h11==0.16.0
|
| 77 |
-
Requires-Dist: hf-xet==1.1.10
|
| 78 |
-
Requires-Dist: html2text==2025.4.15
|
| 79 |
-
Requires-Dist: htmldate==1.9.3
|
| 80 |
-
Requires-Dist: httpcore==1.0.9
|
| 81 |
-
Requires-Dist: httpx==0.28.1
|
| 82 |
-
Requires-Dist: httpx-sse==0.4.1
|
| 83 |
-
Requires-Dist: huggingface-hub==0.35.3
|
| 84 |
-
Requires-Dist: humanfriendly==10.0
|
| 85 |
-
Requires-Dist: idna==3.10
|
| 86 |
-
Requires-Dist: importlib-metadata==8.7.0
|
| 87 |
-
Requires-Dist: isodate==0.7.2
|
| 88 |
-
Requires-Dist: itsdangerous==2.2.0
|
| 89 |
-
Requires-Dist: jinja2==3.1.6
|
| 90 |
-
Requires-Dist: jiter==0.11.0
|
| 91 |
-
Requires-Dist: joblib==1.5.2
|
| 92 |
-
Requires-Dist: json-repair==0.52.0
|
| 93 |
-
Requires-Dist: jsonpatch==1.33
|
| 94 |
-
Requires-Dist: jsonpointer==3.0.0
|
| 95 |
-
Requires-Dist: jsonschema==4.25.1
|
| 96 |
-
Requires-Dist: jsonschema-path==0.3.4
|
| 97 |
-
Requires-Dist: jsonschema-rs==0.29.1
|
| 98 |
-
Requires-Dist: jsonschema-specifications==2025.9.1
|
| 99 |
-
Requires-Dist: justext==3.0.2
|
| 100 |
-
Requires-Dist: kiwisolver==1.4.9
|
| 101 |
-
Requires-Dist: langchain==0.3.27
|
| 102 |
-
Requires-Dist: langchain-cerebras==0.5.0
|
| 103 |
-
Requires-Dist: langchain-community==0.3.30
|
| 104 |
-
Requires-Dist: langchain-core==0.3.78
|
| 105 |
-
Requires-Dist: langchain-ollama==0.3.10
|
| 106 |
-
Requires-Dist: langchain-openai==0.3.34
|
| 107 |
-
Requires-Dist: langchain-tavily==0.2.12
|
| 108 |
-
Requires-Dist: langchain-text-splitters==0.3.11
|
| 109 |
-
Requires-Dist: langfuse==3.6.1
|
| 110 |
-
Requires-Dist: langgraph==0.6.8
|
| 111 |
-
Requires-Dist: langgraph-api==0.4.46
|
| 112 |
-
Requires-Dist: langgraph-checkpoint==2.1.1
|
| 113 |
-
Requires-Dist: langgraph-cli==0.4.4
|
| 114 |
-
Requires-Dist: langgraph-prebuilt==0.6.4
|
| 115 |
-
Requires-Dist: langgraph-runtime-inmem==0.14.1
|
| 116 |
-
Requires-Dist: langgraph-sdk==0.2.9
|
| 117 |
-
Requires-Dist: langsmith==0.4.32
|
| 118 |
-
Requires-Dist: lazy-object-proxy==1.12.0
|
| 119 |
-
Requires-Dist: litellm==1.77.7
|
| 120 |
-
Requires-Dist: livekit==1.0.13
|
| 121 |
-
Requires-Dist: livekit-agents==1.2.14
|
| 122 |
-
Requires-Dist: livekit-api==1.0.6
|
| 123 |
-
Requires-Dist: livekit-blingfire==1.0.0
|
| 124 |
-
Requires-Dist: livekit-plugins-cartesia==1.2.14
|
| 125 |
-
Requires-Dist: livekit-plugins-openai==1.2.14
|
| 126 |
-
Requires-Dist: livekit-plugins-silero==1.2.14
|
| 127 |
-
Requires-Dist: livekit-protocol==1.0.7
|
| 128 |
-
Requires-Dist: llm==0.27.1
|
| 129 |
-
Requires-Dist: llm-openrouter==0.5
|
| 130 |
-
Requires-Dist: lxml==5.4.0
|
| 131 |
-
Requires-Dist: lxml-html-clean==0.4.3
|
| 132 |
-
Requires-Dist: magicattr==0.1.6
|
| 133 |
-
Requires-Dist: mako==1.3.10
|
| 134 |
-
Requires-Dist: markdown-it-py==4.0.0
|
| 135 |
-
Requires-Dist: markupsafe==3.0.3
|
| 136 |
-
Requires-Dist: marshmallow==3.26.1
|
| 137 |
-
Requires-Dist: matplotlib==3.10.6
|
| 138 |
-
Requires-Dist: mcp==1.16.0
|
| 139 |
-
Requires-Dist: mdurl==0.1.2
|
| 140 |
-
Requires-Dist: mlflow==3.4.0
|
| 141 |
-
Requires-Dist: mlflow-skinny==3.4.0
|
| 142 |
-
Requires-Dist: mlflow-tracing==3.4.0
|
| 143 |
-
Requires-Dist: more-itertools==10.8.0
|
| 144 |
-
Requires-Dist: mpmath==1.3.0
|
| 145 |
-
Requires-Dist: multidict==6.6.4
|
| 146 |
-
Requires-Dist: mypy-extensions==1.1.0
|
| 147 |
-
Requires-Dist: nest-asyncio==1.6.0
|
| 148 |
-
Requires-Dist: numpy==2.3.3
|
| 149 |
-
Requires-Dist: ollama==0.6.0
|
| 150 |
-
Requires-Dist: onnxruntime==1.23.0
|
| 151 |
-
Requires-Dist: openai==2.3.0
|
| 152 |
-
Requires-Dist: openapi-core==0.19.5
|
| 153 |
-
Requires-Dist: openapi-pydantic==0.5.1
|
| 154 |
-
Requires-Dist: openapi-schema-validator==0.6.3
|
| 155 |
-
Requires-Dist: openapi-spec-validator==0.7.2
|
| 156 |
-
Requires-Dist: openevals==0.1.0
|
| 157 |
-
Requires-Dist: opentelemetry-api==1.37.0
|
| 158 |
-
Requires-Dist: opentelemetry-exporter-otlp==1.37.0
|
| 159 |
-
Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.37.0
|
| 160 |
-
Requires-Dist: opentelemetry-exporter-otlp-proto-grpc==1.37.0
|
| 161 |
-
Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.37.0
|
| 162 |
-
Requires-Dist: opentelemetry-proto==1.37.0
|
| 163 |
-
Requires-Dist: opentelemetry-sdk==1.37.0
|
| 164 |
-
Requires-Dist: opentelemetry-semantic-conventions==0.58b0
|
| 165 |
-
Requires-Dist: optuna==4.5.0
|
| 166 |
-
Requires-Dist: orjson==3.11.3
|
| 167 |
-
Requires-Dist: ormsgpack==1.10.0
|
| 168 |
-
Requires-Dist: packaging==25.0
|
| 169 |
-
Requires-Dist: pandas==2.3.3
|
| 170 |
-
Requires-Dist: parse==1.20.2
|
| 171 |
-
Requires-Dist: pathable==0.4.4
|
| 172 |
-
Requires-Dist: pillow==11.3.0
|
| 173 |
-
Requires-Dist: pip==25.2
|
| 174 |
-
Requires-Dist: playwright==1.55.0
|
| 175 |
-
Requires-Dist: pluggy==1.6.0
|
| 176 |
-
Requires-Dist: poetry>=2.2.1
|
| 177 |
-
Requires-Dist: prometheus-client==0.23.1
|
| 178 |
-
Requires-Dist: propcache==0.4.0
|
| 179 |
-
Requires-Dist: protobuf==6.32.1
|
| 180 |
-
Requires-Dist: psutil==7.1.0
|
| 181 |
-
Requires-Dist: puremagic==1.30
|
| 182 |
-
Requires-Dist: pyarrow==21.0.0
|
| 183 |
-
Requires-Dist: pyasn1==0.6.1
|
| 184 |
-
Requires-Dist: pyasn1-modules==0.4.2
|
| 185 |
-
Requires-Dist: pycparser==2.23
|
| 186 |
-
Requires-Dist: pydantic==2.12.0
|
| 187 |
-
Requires-Dist: pydantic-core==2.41.1
|
| 188 |
-
Requires-Dist: pydantic-settings==2.11.0
|
| 189 |
-
Requires-Dist: pyee==13.0.0
|
| 190 |
-
Requires-Dist: pygments==2.19.2
|
| 191 |
-
Requires-Dist: pyjwt==2.10.1
|
| 192 |
-
Requires-Dist: pyparsing==3.2.5
|
| 193 |
-
Requires-Dist: pypdf==6.1.1
|
| 194 |
-
Requires-Dist: pyperclip==1.11.0
|
| 195 |
-
Requires-Dist: python-dateutil==2.9.0.post0
|
| 196 |
-
Requires-Dist: python-dotenv==1.1.1
|
| 197 |
-
Requires-Dist: python-multipart==0.0.20
|
| 198 |
-
Requires-Dist: python-ulid==3.1.0
|
| 199 |
-
Requires-Dist: pytz==2025.2
|
| 200 |
-
Requires-Dist: pyyaml==6.0.3
|
| 201 |
-
Requires-Dist: referencing==0.36.2
|
| 202 |
-
Requires-Dist: regex==2025.9.18
|
| 203 |
-
Requires-Dist: requests==2.32.5
|
| 204 |
-
Requires-Dist: requests-toolbelt==1.0.0
|
| 205 |
-
Requires-Dist: rfc3339-validator==0.1.4
|
| 206 |
-
Requires-Dist: rich==14.1.0
|
| 207 |
-
Requires-Dist: rich-rst==1.3.1
|
| 208 |
-
Requires-Dist: rpds-py==0.27.1
|
| 209 |
-
Requires-Dist: rsa==4.9.1
|
| 210 |
-
Requires-Dist: scikit-learn==1.7.2
|
| 211 |
-
Requires-Dist: scipy==1.16.2
|
| 212 |
-
Requires-Dist: setuptools==80.9.0
|
| 213 |
-
Requires-Dist: six==1.17.0
|
| 214 |
-
Requires-Dist: smmap==5.0.2
|
| 215 |
-
Requires-Dist: sniffio==1.3.1
|
| 216 |
-
Requires-Dist: sounddevice==0.5.2
|
| 217 |
-
Requires-Dist: soupsieve==2.8
|
| 218 |
-
Requires-Dist: sqlalchemy==2.0.43
|
| 219 |
-
Requires-Dist: sqlite-fts4==1.0.3
|
| 220 |
-
Requires-Dist: sqlite-migrate==0.1b0
|
| 221 |
-
Requires-Dist: sqlite-utils==3.38
|
| 222 |
-
Requires-Dist: sqlparse==0.5.3
|
| 223 |
-
Requires-Dist: sse-starlette==2.1.3
|
| 224 |
-
Requires-Dist: starlette==0.48.0
|
| 225 |
-
Requires-Dist: structlog==25.4.0
|
| 226 |
-
Requires-Dist: sympy==1.14.0
|
| 227 |
-
Requires-Dist: tabulate==0.9.0
|
| 228 |
-
Requires-Dist: tenacity==9.1.2
|
| 229 |
-
Requires-Dist: threadpoolctl==3.6.0
|
| 230 |
-
Requires-Dist: tiktoken==0.11.0
|
| 231 |
-
Requires-Dist: tld==0.13.1
|
| 232 |
-
Requires-Dist: tokenizers==0.22.1
|
| 233 |
-
Requires-Dist: tqdm==4.67.1
|
| 234 |
-
Requires-Dist: trafilatura==2.0.0
|
| 235 |
-
Requires-Dist: truststore==0.10.4
|
| 236 |
-
Requires-Dist: types-protobuf==6.32.1.20250918
|
| 237 |
-
Requires-Dist: typing-extensions==4.15.0
|
| 238 |
-
Requires-Dist: typing-inspect==0.9.0
|
| 239 |
-
Requires-Dist: typing-inspection==0.4.2
|
| 240 |
-
Requires-Dist: tzdata==2025.2
|
| 241 |
-
Requires-Dist: tzlocal==5.3.1
|
| 242 |
-
Requires-Dist: urllib3==2.5.0
|
| 243 |
-
Requires-Dist: uvicorn==0.37.0
|
| 244 |
-
Requires-Dist: watchfiles==1.1.0
|
| 245 |
-
Requires-Dist: websockets==15.0.1
|
| 246 |
-
Requires-Dist: werkzeug==3.1.1
|
| 247 |
-
Requires-Dist: wrapt==1.17.3
|
| 248 |
-
Requires-Dist: xxhash==3.6.0
|
| 249 |
-
Requires-Dist: yarl==1.21.0
|
| 250 |
-
Requires-Dist: zipp==3.23.0
|
| 251 |
-
Requires-Dist: zstandard==0.25.0
|
| 252 |
-
|
| 253 |
-
# Job Writer Module
|
| 254 |
-
|
| 255 |
-
A modular, well-structured package for creating tailored job applications using LangChain and LangGraph with LangSmith observability.
|
| 256 |
-
|
| 257 |
-
## Features
|
| 258 |
-
|
| 259 |
-
- Creates personalized job application materials based on resumes and job descriptions
|
| 260 |
-
- Supports multiple application types: cover letters, bullet points, and LinkedIn messages
|
| 261 |
-
- Uses RAG for personalization and web search for company research
|
| 262 |
-
- Provides human-in-the-loop feedback integration
|
| 263 |
-
- Implements self-consistency voting for quality control
|
| 264 |
-
|
| 265 |
-
## Installation
|
| 266 |
-
|
| 267 |
-
```bash
|
| 268 |
-
# Install the package and its dependencies
|
| 269 |
-
pip install -e .
|
| 270 |
-
|
| 271 |
-
# Install development dependencies (including linting tools)
|
| 272 |
-
pip install -r requirements-dev.txt
|
| 273 |
-
```
|
| 274 |
-
|
| 275 |
-
## Code Standards and Linting
|
| 276 |
-
|
| 277 |
-
This project uses several tools to ensure code quality:
|
| 278 |
-
|
| 279 |
-
1. **Black** - Code formatter that enforces consistent style
|
| 280 |
-
2. **isort** - Sorts imports according to best practices
|
| 281 |
-
3. **Flake8** - Style guide enforcement
|
| 282 |
-
4. **mypy** - Static type checking
|
| 283 |
-
|
| 284 |
-
### Running the Linters
|
| 285 |
-
|
| 286 |
-
```bash
|
| 287 |
-
# Format code with Black
|
| 288 |
-
black job_writer/
|
| 289 |
-
|
| 290 |
-
# Sort imports
|
| 291 |
-
isort job_writer/
|
| 292 |
-
|
| 293 |
-
# Check style with Flake8
|
| 294 |
-
flake8 job_writer/
|
| 295 |
-
|
| 296 |
-
# Type checking with mypy
|
| 297 |
-
mypy job_writer/
|
| 298 |
-
```
|
| 299 |
-
|
| 300 |
-
### Pre-commit Hooks
|
| 301 |
-
|
| 302 |
-
We use pre-commit hooks to automatically run linters before each commit:
|
| 303 |
-
|
| 304 |
-
```bash
|
| 305 |
-
# Install the pre-commit hooks
|
| 306 |
-
pip install pre-commit
|
| 307 |
-
pre-commit install
|
| 308 |
-
|
| 309 |
-
# You can also run the hooks manually
|
| 310 |
-
pre-commit run --all-files
|
| 311 |
-
```
|
| 312 |
-
|
| 313 |
-
## Usage Example
|
| 314 |
-
|
| 315 |
-
```python
|
| 316 |
-
import asyncio
|
| 317 |
-
from job_writer.workflow import run_job_application_writer
|
| 318 |
-
|
| 319 |
-
# Run the job application writer
|
| 320 |
-
result = asyncio.run(run_job_application_writer(
|
| 321 |
-
resume_path="path/to/resume.pdf",
|
| 322 |
-
job_desc_path="https://example.com/job-posting",
|
| 323 |
-
content="cover_letter"
|
| 324 |
-
))
|
| 325 |
-
|
| 326 |
-
print(result["final"])
|
| 327 |
-
```
|
| 328 |
-
|
| 329 |
-
Alternatively, you can use the command-line interface:
|
| 330 |
-
|
| 331 |
-
```bash
|
| 332 |
-
python -m job_writer.workflow --resume path/to/resume.pdf --job https://example.com/job-posting --type cover_letter
|
| 333 |
-
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
job_writing_agent.egg-info/SOURCES.txt
DELETED
|
@@ -1,40 +0,0 @@
|
|
| 1 |
-
README.md
|
| 2 |
-
pyproject.toml
|
| 3 |
-
src/job_writing_agent/__init__.py
|
| 4 |
-
src/job_writing_agent/langgraph_init.py
|
| 5 |
-
src/job_writing_agent/workflow.py
|
| 6 |
-
src/job_writing_agent.egg-info/PKG-INFO
|
| 7 |
-
src/job_writing_agent.egg-info/SOURCES.txt
|
| 8 |
-
src/job_writing_agent.egg-info/dependency_links.txt
|
| 9 |
-
src/job_writing_agent.egg-info/requires.txt
|
| 10 |
-
src/job_writing_agent.egg-info/top_level.txt
|
| 11 |
-
src/job_writing_agent/agents/__init__.py
|
| 12 |
-
src/job_writing_agent/agents/nodes.py
|
| 13 |
-
src/job_writing_agent/agents/output_schema.py
|
| 14 |
-
src/job_writing_agent/classes/__init__.py
|
| 15 |
-
src/job_writing_agent/classes/classes.py
|
| 16 |
-
src/job_writing_agent/nodes/__init__.py
|
| 17 |
-
src/job_writing_agent/nodes/createdraft.py
|
| 18 |
-
src/job_writing_agent/nodes/initializing.py
|
| 19 |
-
src/job_writing_agent/nodes/research_workflow.py
|
| 20 |
-
src/job_writing_agent/nodes/selfconsistency.py
|
| 21 |
-
src/job_writing_agent/nodes/test_workflow.py
|
| 22 |
-
src/job_writing_agent/nodes/variations.py
|
| 23 |
-
src/job_writing_agent/prompts/__init__.py
|
| 24 |
-
src/job_writing_agent/prompts/templates.py
|
| 25 |
-
src/job_writing_agent/tools/SearchTool.py
|
| 26 |
-
src/job_writing_agent/tools/__init__.py
|
| 27 |
-
src/job_writing_agent/tools/test_llm.py
|
| 28 |
-
src/job_writing_agent/tools/test_tavily.py
|
| 29 |
-
src/job_writing_agent/utils/__init__.py
|
| 30 |
-
src/job_writing_agent/utils/application_cli_interface.py
|
| 31 |
-
src/job_writing_agent/utils/config.py
|
| 32 |
-
src/job_writing_agent/utils/config_utils.py
|
| 33 |
-
src/job_writing_agent/utils/document_processing.py
|
| 34 |
-
src/job_writing_agent/utils/dspy_job_extract.py
|
| 35 |
-
src/job_writing_agent/utils/errors.py
|
| 36 |
-
src/job_writing_agent/utils/langfuse_handler.py
|
| 37 |
-
src/job_writing_agent/utils/llm_client.py
|
| 38 |
-
src/job_writing_agent/utils/llm_provider_factory.py
|
| 39 |
-
src/job_writing_agent/utils/result_utils.py
|
| 40 |
-
src/job_writing_agent/utils/vector_store.py
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
job_writing_agent.egg-info/dependency_links.txt
DELETED
|
@@ -1 +0,0 @@
|
|
| 1 |
-
|
|
|
|
|
|
job_writing_agent.egg-info/top_level.txt
DELETED
|
@@ -1 +0,0 @@
|
|
| 1 |
-
job_writing_agent
|
|
|
|
|
|
langgraph.json
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"dependencies": [
|
| 3 |
+
"nodes"
|
| 4 |
+
],
|
| 5 |
+
"graphs": {
|
| 6 |
+
"research_workflow": "./src/job_writing_agent/nodes/research_workflow.py:research_workflow"
|
| 7 |
+
},
|
| 8 |
+
"env": "./job_writer_env",
|
| 9 |
+
"python_version": "3.12"
|
| 10 |
+
}
|
pyproject.toml
ADDED
|
@@ -0,0 +1,260 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[build-system]
|
| 2 |
+
requires = ["setuptools>=61.0"]
|
| 3 |
+
build-backend = "setuptools.build_meta"
|
| 4 |
+
|
| 5 |
+
[project]
|
| 6 |
+
name = "job_writing_agent"
|
| 7 |
+
version = "1.0.0"
|
| 8 |
+
description = "This module can run an agent which is capable of running langgraph agent sing tools like tavily search"
|
| 9 |
+
readme = "README.md"
|
| 10 |
+
requires-python = ">=3.11"
|
| 11 |
+
dependencies = [
|
| 12 |
+
"aiofiles==24.1.0",
|
| 13 |
+
"aiohappyeyeballs==2.6.1",
|
| 14 |
+
"aiohttp==3.12.15",
|
| 15 |
+
"aiosignal==1.4.0",
|
| 16 |
+
"alembic==1.16.5",
|
| 17 |
+
"annotated-types==0.7.0",
|
| 18 |
+
"anyio==4.11.0",
|
| 19 |
+
"asyncer==0.0.8",
|
| 20 |
+
"attrs==25.3.0",
|
| 21 |
+
"authlib==1.6.5",
|
| 22 |
+
"av==15.1.0",
|
| 23 |
+
"babel==2.17.0",
|
| 24 |
+
"backoff==2.2.1",
|
| 25 |
+
"beautifulsoup4==4.14.2",
|
| 26 |
+
"blinker==1.9.0",
|
| 27 |
+
"blockbuster==1.5.25",
|
| 28 |
+
"bs4==0.0.2",
|
| 29 |
+
"cachetools==6.2.0",
|
| 30 |
+
"certifi==2025.10.5",
|
| 31 |
+
"cffi==2.0.0",
|
| 32 |
+
"charset-normalizer==3.4.3",
|
| 33 |
+
"click==8.3.0",
|
| 34 |
+
"click-default-group==1.2.4",
|
| 35 |
+
"cloudpickle==3.1.1",
|
| 36 |
+
"colorama==0.4.6",
|
| 37 |
+
"coloredlogs==15.0.1",
|
| 38 |
+
"colorlog==6.9.0",
|
| 39 |
+
"condense-json==0.1.3",
|
| 40 |
+
"contourpy==1.3.3",
|
| 41 |
+
"courlan==1.3.2",
|
| 42 |
+
"cryptography==44.0.3",
|
| 43 |
+
"cycler==0.12.1",
|
| 44 |
+
"cyclopts==3.24.0",
|
| 45 |
+
"databricks-sdk==0.67.0",
|
| 46 |
+
"dataclasses-json==0.6.7",
|
| 47 |
+
"dateparser==1.2.2",
|
| 48 |
+
"diskcache==5.6.3",
|
| 49 |
+
"distro==1.9.0",
|
| 50 |
+
"dnspython==2.8.0",
|
| 51 |
+
"docker==7.1.0",
|
| 52 |
+
"docstring-parser==0.17.0",
|
| 53 |
+
"docutils==0.22.2",
|
| 54 |
+
"dspy==3.0.3",
|
| 55 |
+
"dspy-ai==3.0.3",
|
| 56 |
+
"email-validator==2.3.0",
|
| 57 |
+
"eval-type-backport==0.2.2",
|
| 58 |
+
"exceptiongroup==1.3.0",
|
| 59 |
+
"fastapi==0.118.0",
|
| 60 |
+
"fastmcp==2.12.4",
|
| 61 |
+
"fastuuid==0.13.5",
|
| 62 |
+
"filelock==3.19.1",
|
| 63 |
+
"flask==3.1.2",
|
| 64 |
+
"flatbuffers==25.9.23",
|
| 65 |
+
"fonttools==4.60.1",
|
| 66 |
+
"forbiddenfruit==0.1.4",
|
| 67 |
+
"frozenlist==1.7.0",
|
| 68 |
+
"fsspec==2025.9.0",
|
| 69 |
+
"gepa==0.0.7",
|
| 70 |
+
"gitdb==4.0.12",
|
| 71 |
+
"gitpython==3.1.45",
|
| 72 |
+
"google-auth==2.41.1",
|
| 73 |
+
"googleapis-common-protos==1.70.0",
|
| 74 |
+
"graphene==3.4.3",
|
| 75 |
+
"graphql-core==3.2.6",
|
| 76 |
+
"graphql-relay==3.2.0",
|
| 77 |
+
"greenlet==3.2.4",
|
| 78 |
+
"grpcio==1.76.0",
|
| 79 |
+
"grpcio-tools==1.76.0",
|
| 80 |
+
"gunicorn==23.0.0",
|
| 81 |
+
"h11==0.16.0",
|
| 82 |
+
"hf-xet==1.1.10",
|
| 83 |
+
"html2text==2025.4.15",
|
| 84 |
+
"htmldate==1.9.3",
|
| 85 |
+
"httpcore==1.0.9",
|
| 86 |
+
"httpx==0.28.1",
|
| 87 |
+
"httpx-sse==0.4.1",
|
| 88 |
+
"huggingface-hub==0.35.3",
|
| 89 |
+
"humanfriendly==10.0",
|
| 90 |
+
"idna==3.10",
|
| 91 |
+
"importlib-metadata==8.7.0",
|
| 92 |
+
"isodate==0.7.2",
|
| 93 |
+
"itsdangerous==2.2.0",
|
| 94 |
+
"jinja2==3.1.6",
|
| 95 |
+
"jiter==0.11.0",
|
| 96 |
+
"joblib==1.5.2",
|
| 97 |
+
"json-repair==0.52.0",
|
| 98 |
+
"jsonpatch==1.33",
|
| 99 |
+
"jsonpointer==3.0.0",
|
| 100 |
+
"jsonschema==4.25.1",
|
| 101 |
+
"jsonschema-path==0.3.4",
|
| 102 |
+
"jsonschema-rs==0.29.1",
|
| 103 |
+
"jsonschema-specifications==2025.9.1",
|
| 104 |
+
"justext==3.0.2",
|
| 105 |
+
"kiwisolver==1.4.9",
|
| 106 |
+
"langchain==0.3.27",
|
| 107 |
+
"langchain-cerebras==0.5.0",
|
| 108 |
+
"langchain-community==0.3.30",
|
| 109 |
+
"langchain-core==0.3.78",
|
| 110 |
+
"langchain-ollama==0.3.10",
|
| 111 |
+
"langchain-openai==0.3.34",
|
| 112 |
+
"langchain-tavily==0.2.12",
|
| 113 |
+
"langchain-text-splitters==0.3.11",
|
| 114 |
+
"langfuse==3.6.1",
|
| 115 |
+
"langgraph==0.6.8",
|
| 116 |
+
"langgraph-api==0.4.46",
|
| 117 |
+
"langgraph-checkpoint==2.1.1",
|
| 118 |
+
"langgraph-cli==0.4.4",
|
| 119 |
+
"langgraph-prebuilt==0.6.4",
|
| 120 |
+
"langgraph-runtime-inmem==0.14.1",
|
| 121 |
+
"langgraph-sdk==0.2.9",
|
| 122 |
+
"langsmith==0.4.32",
|
| 123 |
+
"lazy-object-proxy==1.12.0",
|
| 124 |
+
"litellm==1.77.7",
|
| 125 |
+
"livekit==1.0.13",
|
| 126 |
+
"livekit-agents==1.2.14",
|
| 127 |
+
"livekit-api==1.0.6",
|
| 128 |
+
"livekit-blingfire==1.0.0",
|
| 129 |
+
"livekit-plugins-cartesia==1.2.14",
|
| 130 |
+
"livekit-plugins-openai==1.2.14",
|
| 131 |
+
"livekit-plugins-silero==1.2.14",
|
| 132 |
+
"livekit-protocol==1.0.7",
|
| 133 |
+
"llm==0.27.1",
|
| 134 |
+
"llm-openrouter==0.5",
|
| 135 |
+
"lxml==5.4.0",
|
| 136 |
+
"lxml-html-clean==0.4.3",
|
| 137 |
+
"magicattr==0.1.6",
|
| 138 |
+
"mako==1.3.10",
|
| 139 |
+
"markdown-it-py==4.0.0",
|
| 140 |
+
"markupsafe==3.0.3",
|
| 141 |
+
"marshmallow==3.26.1",
|
| 142 |
+
"matplotlib==3.10.6",
|
| 143 |
+
"mcp==1.16.0",
|
| 144 |
+
"mdurl==0.1.2",
|
| 145 |
+
"mlflow==3.4.0",
|
| 146 |
+
"mlflow-skinny==3.4.0",
|
| 147 |
+
"mlflow-tracing==3.4.0",
|
| 148 |
+
"more-itertools==10.8.0",
|
| 149 |
+
"mpmath==1.3.0",
|
| 150 |
+
"multidict==6.6.4",
|
| 151 |
+
"mypy-extensions==1.1.0",
|
| 152 |
+
"nest-asyncio==1.6.0",
|
| 153 |
+
"numpy==2.3.3",
|
| 154 |
+
"ollama==0.6.0",
|
| 155 |
+
"onnxruntime==1.23.0",
|
| 156 |
+
"openai==2.3.0",
|
| 157 |
+
"openapi-core==0.19.5",
|
| 158 |
+
"openapi-pydantic==0.5.1",
|
| 159 |
+
"openapi-schema-validator==0.6.3",
|
| 160 |
+
"openapi-spec-validator==0.7.2",
|
| 161 |
+
"openevals==0.1.0",
|
| 162 |
+
"opentelemetry-api==1.37.0",
|
| 163 |
+
"opentelemetry-exporter-otlp==1.37.0",
|
| 164 |
+
"opentelemetry-exporter-otlp-proto-common==1.37.0",
|
| 165 |
+
"opentelemetry-exporter-otlp-proto-grpc==1.37.0",
|
| 166 |
+
"opentelemetry-exporter-otlp-proto-http==1.37.0",
|
| 167 |
+
"opentelemetry-proto==1.37.0",
|
| 168 |
+
"opentelemetry-sdk==1.37.0",
|
| 169 |
+
"opentelemetry-semantic-conventions==0.58b0",
|
| 170 |
+
"optuna==4.5.0",
|
| 171 |
+
"orjson==3.11.3",
|
| 172 |
+
"ormsgpack==1.10.0",
|
| 173 |
+
"packaging==25.0",
|
| 174 |
+
"pandas==2.3.3",
|
| 175 |
+
"parse==1.20.2",
|
| 176 |
+
"pathable==0.4.4",
|
| 177 |
+
"pillow==11.3.0",
|
| 178 |
+
"pip==25.2",
|
| 179 |
+
"playwright==1.55.0",
|
| 180 |
+
"pluggy==1.6.0",
|
| 181 |
+
"poetry>=2.2.1",
|
| 182 |
+
"prometheus-client==0.23.1",
|
| 183 |
+
"propcache==0.4.0",
|
| 184 |
+
"protobuf==6.32.1",
|
| 185 |
+
"psutil==7.1.0",
|
| 186 |
+
"puremagic==1.30",
|
| 187 |
+
"pyarrow==21.0.0",
|
| 188 |
+
"pyasn1==0.6.1",
|
| 189 |
+
"pyasn1-modules==0.4.2",
|
| 190 |
+
"pycparser==2.23",
|
| 191 |
+
"pydantic==2.12.0",
|
| 192 |
+
"pydantic-core==2.41.1",
|
| 193 |
+
"pydantic-settings==2.11.0",
|
| 194 |
+
"pyee==13.0.0",
|
| 195 |
+
"pygments==2.19.2",
|
| 196 |
+
"pyjwt==2.10.1",
|
| 197 |
+
"pyparsing==3.2.5",
|
| 198 |
+
"pypdf==6.1.1",
|
| 199 |
+
"pyperclip==1.11.0",
|
| 200 |
+
"python-dateutil==2.9.0.post0",
|
| 201 |
+
"python-dotenv==1.1.1",
|
| 202 |
+
"python-multipart==0.0.20",
|
| 203 |
+
"python-ulid==3.1.0",
|
| 204 |
+
"pytz==2025.2",
|
| 205 |
+
"pyyaml==6.0.3",
|
| 206 |
+
"referencing==0.36.2",
|
| 207 |
+
"regex==2025.9.18",
|
| 208 |
+
"requests==2.32.5",
|
| 209 |
+
"requests-toolbelt==1.0.0",
|
| 210 |
+
"rfc3339-validator==0.1.4",
|
| 211 |
+
"rich==14.1.0",
|
| 212 |
+
"rich-rst==1.3.1",
|
| 213 |
+
"rpds-py==0.27.1",
|
| 214 |
+
"rsa==4.9.1",
|
| 215 |
+
"scikit-learn==1.7.2",
|
| 216 |
+
"scipy==1.16.2",
|
| 217 |
+
"setuptools==80.9.0",
|
| 218 |
+
"six==1.17.0",
|
| 219 |
+
"smmap==5.0.2",
|
| 220 |
+
"sniffio==1.3.1",
|
| 221 |
+
"sounddevice==0.5.2",
|
| 222 |
+
"soupsieve==2.8",
|
| 223 |
+
"sqlalchemy==2.0.43",
|
| 224 |
+
"sqlite-fts4==1.0.3",
|
| 225 |
+
"sqlite-migrate==0.1b0",
|
| 226 |
+
"sqlite-utils==3.38",
|
| 227 |
+
"sqlparse==0.5.3",
|
| 228 |
+
"sse-starlette==2.1.3",
|
| 229 |
+
"starlette==0.48.0",
|
| 230 |
+
"structlog==25.4.0",
|
| 231 |
+
"sympy==1.14.0",
|
| 232 |
+
"tabulate==0.9.0",
|
| 233 |
+
"tenacity==9.1.2",
|
| 234 |
+
"threadpoolctl==3.6.0",
|
| 235 |
+
"tiktoken==0.11.0",
|
| 236 |
+
"tld==0.13.1",
|
| 237 |
+
"tokenizers==0.22.1",
|
| 238 |
+
"tqdm==4.67.1",
|
| 239 |
+
"trafilatura==2.0.0",
|
| 240 |
+
"truststore==0.10.4",
|
| 241 |
+
"types-protobuf==6.32.1.20250918",
|
| 242 |
+
"typing-extensions==4.15.0",
|
| 243 |
+
"typing-inspect==0.9.0",
|
| 244 |
+
"typing-inspection==0.4.2",
|
| 245 |
+
"tzdata==2025.2",
|
| 246 |
+
"tzlocal==5.3.1",
|
| 247 |
+
"urllib3==2.5.0",
|
| 248 |
+
"uvicorn==0.37.0",
|
| 249 |
+
"watchfiles==1.1.0",
|
| 250 |
+
"websockets==15.0.1",
|
| 251 |
+
"werkzeug==3.1.1",
|
| 252 |
+
"wrapt==1.17.3",
|
| 253 |
+
"xxhash==3.6.0",
|
| 254 |
+
"yarl==1.21.0",
|
| 255 |
+
"zipp==3.23.0",
|
| 256 |
+
"zstandard==0.25.0",
|
| 257 |
+
]
|
| 258 |
+
|
| 259 |
+
[tool.setuptools.packages.find]
|
| 260 |
+
where = ["src"]
|
job_writing_agent.egg-info/requires.txt β requirements.txt
RENAMED
|
@@ -167,7 +167,6 @@ pillow==11.3.0
|
|
| 167 |
pip==25.2
|
| 168 |
playwright==1.55.0
|
| 169 |
pluggy==1.6.0
|
| 170 |
-
poetry>=2.2.1
|
| 171 |
prometheus-client==0.23.1
|
| 172 |
propcache==0.4.0
|
| 173 |
protobuf==6.32.1
|
|
|
|
| 167 |
pip==25.2
|
| 168 |
playwright==1.55.0
|
| 169 |
pluggy==1.6.0
|
|
|
|
| 170 |
prometheus-client==0.23.1
|
| 171 |
propcache==0.4.0
|
| 172 |
protobuf==6.32.1
|
{job_writing_agent β src/job_writing_agent}/__init__.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/agents/__init__.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/agents/nodes.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/agents/output_schema.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/classes/__init__.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/classes/classes.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/langgraph_init.py
RENAMED
|
File without changes
|
src/job_writing_agent/logs/job_writer.log
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
{job_writing_agent β src/job_writing_agent}/nodes/__init__.py
RENAMED
|
File without changes
|
job_writing_agent/utils/langfuse_handler.py β src/job_writing_agent/nodes/createdraft.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/nodes/initializing.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/nodes/research_workflow.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/nodes/selfconsistency.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/nodes/test_workflow.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/nodes/variations.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/prompts.md
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/prompts/__init__.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/prompts/templates.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/tools/SearchTool.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/tools/__init__.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/utils/__init__.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/utils/application_cli_interface.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/utils/config.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/utils/config_utils.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/utils/document_processing.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/utils/dspy_job_extract.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/utils/errors.py
RENAMED
|
File without changes
|
src/job_writing_agent/utils/langfuse_handler.py
ADDED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/utils/llm_client.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/utils/llm_provider_factory.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/utils/result_utils.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/utils/vector_store.py
RENAMED
|
File without changes
|
{job_writing_agent β src/job_writing_agent}/workflow.py
RENAMED
|
File without changes
|
uv.lock
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|