mrrobot1024 commited on
Commit
6e2bf85
Β·
1 Parent(s): 3166780

Restructuring the application repo.

Browse files
Files changed (46) hide show
  1. .gitignore +4 -0
  2. .python-version +1 -0
  3. .vscode/settings.json +3 -0
  4. README.md +87 -0
  5. job_writing_agent/nodes/createdraft.py β†’ __init__.py +0 -0
  6. job_writing_agent.egg-info/PKG-INFO +0 -333
  7. job_writing_agent.egg-info/SOURCES.txt +0 -40
  8. job_writing_agent.egg-info/dependency_links.txt +0 -1
  9. job_writing_agent.egg-info/top_level.txt +0 -1
  10. langgraph.json +10 -0
  11. pyproject.toml +260 -0
  12. job_writing_agent.egg-info/requires.txt β†’ requirements.txt +0 -1
  13. {job_writing_agent β†’ src/job_writing_agent}/__init__.py +0 -0
  14. {job_writing_agent β†’ src/job_writing_agent}/agents/__init__.py +0 -0
  15. {job_writing_agent β†’ src/job_writing_agent}/agents/nodes.py +0 -0
  16. {job_writing_agent β†’ src/job_writing_agent}/agents/output_schema.py +0 -0
  17. {job_writing_agent β†’ src/job_writing_agent}/classes/__init__.py +0 -0
  18. {job_writing_agent β†’ src/job_writing_agent}/classes/classes.py +0 -0
  19. {job_writing_agent β†’ src/job_writing_agent}/langgraph_init.py +0 -0
  20. src/job_writing_agent/logs/job_writer.log +0 -0
  21. {job_writing_agent β†’ src/job_writing_agent}/nodes/__init__.py +0 -0
  22. job_writing_agent/utils/langfuse_handler.py β†’ src/job_writing_agent/nodes/createdraft.py +0 -0
  23. {job_writing_agent β†’ src/job_writing_agent}/nodes/initializing.py +0 -0
  24. {job_writing_agent β†’ src/job_writing_agent}/nodes/research_workflow.py +0 -0
  25. {job_writing_agent β†’ src/job_writing_agent}/nodes/selfconsistency.py +0 -0
  26. {job_writing_agent β†’ src/job_writing_agent}/nodes/test_workflow.py +0 -0
  27. {job_writing_agent β†’ src/job_writing_agent}/nodes/variations.py +0 -0
  28. {job_writing_agent β†’ src/job_writing_agent}/prompts.md +0 -0
  29. {job_writing_agent β†’ src/job_writing_agent}/prompts/__init__.py +0 -0
  30. {job_writing_agent β†’ src/job_writing_agent}/prompts/templates.py +0 -0
  31. {job_writing_agent β†’ src/job_writing_agent}/tools/SearchTool.py +0 -0
  32. {job_writing_agent β†’ src/job_writing_agent}/tools/__init__.py +0 -0
  33. {job_writing_agent β†’ src/job_writing_agent}/utils/__init__.py +0 -0
  34. {job_writing_agent β†’ src/job_writing_agent}/utils/application_cli_interface.py +0 -0
  35. {job_writing_agent β†’ src/job_writing_agent}/utils/config.py +0 -0
  36. {job_writing_agent β†’ src/job_writing_agent}/utils/config_utils.py +0 -0
  37. {job_writing_agent β†’ src/job_writing_agent}/utils/document_processing.py +0 -0
  38. {job_writing_agent β†’ src/job_writing_agent}/utils/dspy_job_extract.py +0 -0
  39. {job_writing_agent β†’ src/job_writing_agent}/utils/errors.py +0 -0
  40. src/job_writing_agent/utils/langfuse_handler.py +0 -0
  41. {job_writing_agent β†’ src/job_writing_agent}/utils/llm_client.py +0 -0
  42. {job_writing_agent β†’ src/job_writing_agent}/utils/llm_provider_factory.py +0 -0
  43. {job_writing_agent β†’ src/job_writing_agent}/utils/result_utils.py +0 -0
  44. {job_writing_agent β†’ src/job_writing_agent}/utils/vector_store.py +0 -0
  45. {job_writing_agent β†’ src/job_writing_agent}/workflow.py +0 -0
  46. 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