41 lines
1.9 KiB
Markdown
41 lines
1.9 KiB
Markdown
# Manual Import Extractor (How It Works)
|
|
|
|
This is a walkthrough of the manual job import flow, which allows users to add jobs that aren't captured by automated scrapers.
|
|
|
|
## Big Picture
|
|
|
|
Instead of scraping a website, the manual extractor takes a raw job description (pasted text), parses the details (using AI), and allows the user to review and edit the data before importing it into the pipeline.
|
|
|
|
## 1) Input
|
|
|
|
The user provides input via the **Manual Import** sheet in the UI. They paste a full job description, copied from any source (job board, company site, email, etc.).
|
|
|
|
## 2) AI Inference
|
|
|
|
When the user clicks "Analyze JD", the orchestrator calls an internal endpoint (`/api/manual-jobs/infer`).
|
|
|
|
The server-side service (`orchestrator/src/server/services/manualJob.ts`) then:
|
|
- Sends the raw text to an LLM (via the configured provider; OpenRouter by default).
|
|
- Uses a specific prompt to extract structured data (title, employer, location, salary, etc.).
|
|
- Returns a JSON object containing the inferred fields.
|
|
|
|
If the LLM API key is not configured (e.g. `LLM_API_KEY` for OpenRouter/OpenAI/Gemini), the inference step skips and warns the user to fill details manually.
|
|
|
|
(`OPENROUTER_API_KEY` is deprecated and is automatically copied to `LLM_API_KEY` for compatibility.)
|
|
|
|
## 3) Review and Edit
|
|
|
|
The inferred data is populated into a form in the UI. The user can:
|
|
- Correct any mistakes made by the AI.
|
|
- Add missing information.
|
|
|
|
## 4) Storage and Scoring
|
|
|
|
Once the user clicks "Import Job", the data is sent to `/api/manual-jobs/import`.
|
|
|
|
The orchestrator:
|
|
- Generates a unique ID for the job if no URL is provided.
|
|
- Saves the job to the database with the source set to `manual`.
|
|
- **Asynchronously triggers scoring**: The job is immediately run through the suitability scorer (`orchestrator/src/server/services/scorer.ts`) against the user's current resume profile.
|
|
- Updates the job record with the suitability score and reason once complete.
|