Metadata-Version: 2.2
Name: smithers-llm
Version: 1.0.10
Summary: An LLM-powered CLI that simulates job interviews based on your resume.
Project-URL: GitHub, https://github.com/Wenceslauu/smithers
Requires-Python: >=3.13
Description-Content-Type: text/markdown
Requires-Dist: langchain-community>=0.3.13
Requires-Dist: langchain>=0.3.13
Requires-Dist: langchain-core>=0.3.28
Requires-Dist: langchain-ollama>=0.2.2
Requires-Dist: langgraph>=0.2.60
Requires-Dist: pypdf>=5.1.0
Requires-Dist: ipykernel>=6.29.5
Requires-Dist: python-dotenv>=1.0.1
Requires-Dist: click>=8.1.8
Requires-Dist: setuptools>=75.8.0
Requires-Dist: httpx>=0.27.2
Requires-Dist: halo>=0.0.31
Requires-Dist: build>=1.2.2.post1

# Smithers

An LLM-powered CLI that simulates job interviews based on your resume.

## Example

```bash
pipx run smithers-llm [RESUME_PATH] --role=[ROLE]
```

## Installation

With pip:

```bash
pip install -g smithers-llm
```

With pipx (automatically adds smithers to PATH):

```bash
pipx install smithers-llm
```
 
Please notice that the user is expected to run the model separately as well.

So far the only model supported is Llama3.1

You can easily self-host it with [Ollama](https://ollama.com). After installing it, pull the model and keep it running on the background with the command below:

```bash
ollama run llama3.1
```

## Usage

With smithers installed on the current env:

```bash
python -m smithers-llm [RESUME_PATH] --role=[ROLE]
```

With smithers installed globally and defined on PATH:

```bash
smithers-llm [RESUME_PATH] --role=[ROLE]
```

With pipx:

```bash
pipx run smithers-llm [RESUME_PATH] --role=[ROLE]
```

## Learnings

- LangChain
  - Structured Outputs
- LangGraph
  - Human in the Loop
  - Checkpointer
- Python packaging with SetupTools and Build
  - Differences between project configurations files such as the modern pyproject.toml and the battle-tested setup.py and setup.cfg
- Publishing to PyPI and TestPyPI with Twine
- Creating CLIs with Click
  - Handling different kinds of options: parameters and arguments
- Experimenting with Jupyter Notebooks
  - Research whether it was worth commiting the notebooks, although they might be reasonable for documentation purposes, they weren't for the way I used them in this project, to scratch the general ideas up right in the beginning
- Self-reflection if RAG was necessary here, the answer I came to was NO. The files are too small.
- Creating a GitHub Pages workflow to publish project to PyPI on pushing tagged commits to GH.

## Fun fact

The repo was named after a character from the show "The Simpsons".

Smithers conducts a job interview with Homer on the episode ["I Married Marge"](https://www.youtube.com/watch?v=rG6w0IAoT4U).
