File size: 2,223 Bytes
8349858
 
 
 
 
 
 
 
c7be661
8349858
 
6e2bf85
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
---
title: Job Application Writer
emoji: 📝
colorFrom: blue
colorTo: purple
sdk: docker
app_port: 7860
pinned: false
python_version: 3.12.8
---

# Job Writer Module

A modular, well-structured package for creating tailored job applications using LangChain and LangGraph with LangSmith observability.

## Features

- Creates personalized job application materials based on resumes and job descriptions
- Supports multiple application types: cover letters, bullet points, and LinkedIn messages
- Uses RAG for personalization and web search for company research
- Provides human-in-the-loop feedback integration
- Implements self-consistency voting for quality control

## Installation

```bash
# Install the package and its dependencies
pip install -e .

# Install development dependencies (including linting tools)
pip install -r requirements-dev.txt
```

## Code Standards and Linting

This project uses several tools to ensure code quality:

1. **Black** - Code formatter that enforces consistent style
2. **isort** - Sorts imports according to best practices
3. **Flake8** - Style guide enforcement
4. **mypy** - Static type checking

### Running the Linters

```bash
# Format code with Black
black job_writer/

# Sort imports
isort job_writer/

# Check style with Flake8
flake8 job_writer/

# Type checking with mypy
mypy job_writer/
```

### Pre-commit Hooks

We use pre-commit hooks to automatically run linters before each commit:

```bash
# Install the pre-commit hooks
pip install pre-commit
pre-commit install

# You can also run the hooks manually
pre-commit run --all-files
```

## Usage Example

```python
import asyncio
from job_writer.workflow import run_job_application_writer

# Run the job application writer
result = asyncio.run(run_job_application_writer(
    resume_path="path/to/resume.pdf",
    job_desc_path="https://example.com/job-posting",
    content="cover_letter"
))

print(result["final"])
```

Alternatively, you can use the command-line interface:

```bash
python -m job_writer.workflow --resume path/to/resume.pdf --job https://example.com/job-posting --type cover_letter
```

Run with uv

```bash
uv run --active -m job_writing_agent.workflow --resume resumefilepath --job jobposturl
```