From 839234eb100ba3285b7470c2fdbc72c7f267543d Mon Sep 17 00:00:00 2001 From: madhvantyagi Date: Fri, 15 May 2026 01:14:21 -0400 Subject: [PATCH 1/5] Add email status classifier model --- classifier_model/model.pkl | Bin 0 -> 837482 bytes classifier_model/model_use.md | 100 ++++++ engine/email_status_classifier/__init__.py | 17 + engine/email_status_classifier/classifier.py | 276 +++++++++++++++ requirements.txt | 3 + scripts/train_email_status_classifier.py | 339 +++++++++++++++++++ 6 files changed, 735 insertions(+) create mode 100644 classifier_model/model.pkl create mode 100644 classifier_model/model_use.md create mode 100644 engine/email_status_classifier/__init__.py create mode 100644 engine/email_status_classifier/classifier.py create mode 100644 scripts/train_email_status_classifier.py diff --git a/classifier_model/model.pkl b/classifier_model/model.pkl new file mode 100644 index 0000000000000000000000000000000000000000..943493c0a9e7bfc88a8285a6e332139ac5fa7a3c GIT binary patch literal 837482 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�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 z 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
?d@TTP;H)z~iEo(0oN^}GjxE5qJytV*&9*2}I^ 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 z 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 Kt2cf?)&B$FM&&O6 literal 0 HcmV?d00001 diff --git a/classifier_model/model_use.md b/classifier_model/model_use.md new file mode 100644 index 0000000..f961249 --- /dev/null +++ b/classifier_model/model_use.md @@ -0,0 +1,100 @@ +# Email Status Classifier + +A small model that reads an email and predicts where it belongs in the job-search pipeline. + +## Classes + +- `Not Relevant` + - Job alerts, recommendations, newsletters, hiring events, marketing emails, or generic recruiter spam. + - The key idea: it is not about a real application that was already submitted. + +- `Applied` + - The company or platform confirms the application was submitted or received. + - No interview, assessment, recruiter reply, or real next step yet. + +- `InProgress` + - Something happened after applying. + - Examples: interview scheduling, assessment invite, recruiter reply, availability request, next-step email. + +- `Rejected` + - The company clearly says they are not moving forward. + - Also covers role filled, not selected, hiring paused, or application path closed. + +## What The Model File Contains + +- Saved file: `classifier_model/model.pkl` +- Wrapper class: `EmailStatusClassifier` +- Inside it: + - TensorFlow `TextVectorization` layer + - scikit-learn `RandomForestClassifier` + +Flow: + +```text +email text -> TF-IDF vectorizer -> RandomForest -> class label +``` + +There is no rule-based guardrail layer now. The prediction is model output only. + +## Usage + +Terminal: + +```bash +.venv/bin/python scripts/train_email_status_classifier.py \ + --model-path classifier_model/model.pkl \ + --subject "Update on your application" \ + --sender "recruiting@company.com" \ + --body "Unfortunately, we will not be moving forward with your application at this time." +``` + +Python: + +```python +from engine.email_status_classifier import EmailStatusClassifier + +clf = EmailStatusClassifier.load("classifier_model/model.pkl") + +label = clf.predict_email( + subject="Schedule your interview", + sender="recruiting@company.com", + body="Thanks for applying. We reviewed your application and would like to schedule your first interview.", +) + +print(label) +``` + +Batch prediction: + +```python +texts = [ + "Subject: Jobs for you\nSender: LinkedIn\nBody: Recommended jobs based on your activity. View all jobs.", + "Subject: Application received\nSender: no-reply@company.com\nBody: Thank you for applying. Your application was submitted.", +] + +labels = clf.predict_texts(texts) +print(labels) +``` + +## Size And Latency + +- Model size: `820 KB` +- Load time: about `4.2 seconds` +- Predict 300 emails: about `0.064 seconds` +- Per email in a batch: about `0.21 ms` +- Single email after load: about `18 ms` + +The slow part is loading TensorFlow and the saved vectorizer. After loading, prediction is fast. + +Use it this way: + +- Good: load once, predict many emails. +- Bad: load the model again for every single email. + +## Current Test Result + +- Accuracy: `1.0` +- Macro F1: `1.0` +- Postprocessing: `none` + +This score is on the synthetic test dataset, not real Gmail data. For real quality, the next step is testing on real emails and adding missed patterns back into the labeled dataset. diff --git a/engine/email_status_classifier/__init__.py b/engine/email_status_classifier/__init__.py new file mode 100644 index 0000000..7de0e3b --- /dev/null +++ b/engine/email_status_classifier/__init__.py @@ -0,0 +1,17 @@ +"""Utilities for the job email status classifier.""" + +from .classifier import ( + LABELS, + EmailStatusClassifier, + EmailStatusExample, + combine_email_fields, + load_jsonl_dataset, +) + +__all__ = [ + "LABELS", + "EmailStatusClassifier", + "EmailStatusExample", + "combine_email_fields", + "load_jsonl_dataset", +] diff --git a/engine/email_status_classifier/classifier.py b/engine/email_status_classifier/classifier.py new file mode 100644 index 0000000..e16d445 --- /dev/null +++ b/engine/email_status_classifier/classifier.py @@ -0,0 +1,276 @@ +"""Training and inference helpers for job email status classification. + +The primary model is a RandomForest classifier. TensorFlow is optional and is +only used as a TF-IDF feature builder through Keras TextVectorization when the +runtime has TensorFlow installed. The scikit-learn TF-IDF path stays available +because TensorFlow is a heavy dependency for this project. +""" + +from __future__ import annotations + +import json +import pickle +import re +from dataclasses import dataclass +from pathlib import Path +from typing import Any, Iterable, Sequence + + +LABELS = ["Not Relevant", "Applied", "InProgress", "Rejected"] +LABEL_TO_ID = {label: index for index, label in enumerate(LABELS)} +ID_TO_LABEL = {index: label for label, index in LABEL_TO_ID.items()} + + +@dataclass(frozen=True) +class EmailStatusExample: + subject: str + sender: str + body: str + label: str | None = None + metadata: dict[str, Any] | None = None + + @property + def text(self) -> str: + return combine_email_fields(self.subject, self.sender, self.body) + + +def combine_email_fields(subject: str = "", sender: str = "", body: str = "") -> str: + """Create a stable text representation from email fields.""" + return "\n".join( + [ + f"Subject: {_clean_text(subject)}", + f"Sender: {_clean_text(sender)}", + f"Body: {_clean_text(body)}", + ] + ) + + +def load_jsonl_dataset(path: str | Path, require_label: bool = True) -> list[EmailStatusExample]: + dataset_path = Path(path) + if not dataset_path.exists(): + raise FileNotFoundError(f"Dataset file not found: {dataset_path}") + + examples: list[EmailStatusExample] = [] + with dataset_path.open("r", encoding="utf-8") as handle: + for line_number, raw_line in enumerate(handle, start=1): + line = raw_line.strip() + if not line: + continue + try: + row = json.loads(line) + except json.JSONDecodeError as exc: + raise ValueError(f"{dataset_path}:{line_number} is not valid JSON") from exc + + label = _extract_label(row) + if require_label and label is None: + raise ValueError(f"{dataset_path}:{line_number} is missing a label/status field") + if label is not None and label not in LABEL_TO_ID: + raise ValueError( + f"{dataset_path}:{line_number} has unsupported label {label!r}; " + f"expected one of {LABELS}" + ) + + examples.append( + EmailStatusExample( + subject=str(row.get("subject") or ""), + sender=str(row.get("sender") or row.get("from") or ""), + body=str(row.get("body") or row.get("text") or ""), + label=label, + metadata={key: value for key, value in row.items() if key not in {"subject", "sender", "from", "body", "text", "label", "status"}}, + ) + ) + + if not examples: + raise ValueError(f"Dataset file has no examples: {dataset_path}") + return examples + + +class SklearnTfidfVectorizer: + name = "sklearn" + + def __init__(self, max_features: int): + from sklearn.feature_extraction.text import TfidfVectorizer + + self.vectorizer = TfidfVectorizer( + max_features=max_features, + ngram_range=(1, 2), + min_df=1, + strip_accents="unicode", + lowercase=True, + sublinear_tf=True, + ) + + def fit_transform(self, texts: Sequence[str]): + return self.vectorizer.fit_transform(texts) + + def transform(self, texts: Sequence[str]): + return self.vectorizer.transform(texts) + + +class TensorFlowTfidfVectorizer: + name = "tensorflow" + + def __init__(self, max_features: int): + import tensorflow as tf + + # max_features = max vocabulary size. + # Example: 12000 means keep up to 12k useful words/tokens from training emails. + self.max_features = max_features + self._tf = tf + self.vectorizer = self._build_layer() + + def __getstate__(self) -> dict[str, Any]: + # pickle cannot safely store the whole TensorFlow layer state by itself. + # So we manually save the two things needed for future predictions: + # 1. vocabulary: word -> vector position + # 2. idf_weights: word importance for TF-IDF + idf_weights = None + lookup_layer = getattr(self.vectorizer, "_lookup_layer", None) + if lookup_layer is not None and getattr(lookup_layer, "idf_weights", None) is not None: + idf_weights = lookup_layer.idf_weights.numpy().tolist() + return { + "max_features": self.max_features, + "vocabulary": self.vectorizer.get_vocabulary(), + "idf_weights": idf_weights, + } + + def __setstate__(self, state: dict[str, Any]) -> None: + import tensorflow as tf + + # Rebuild the TensorFlow vectorizer when model.pkl is loaded. + # Then put back the exact same vocabulary + IDF weights from training. + self.max_features = state["max_features"] + self._tf = tf + self.vectorizer = self._build_layer() + idf_weights = state.get("idf_weights") + if idf_weights is not None: + self.vectorizer.set_vocabulary( + state["vocabulary"], + idf_weights=self._tf.constant(idf_weights, dtype=self._tf.float32), + ) + else: + self.vectorizer.set_vocabulary(state["vocabulary"]) + + def _build_layer(self): + # output_mode="tf_idf" means the vector is not just word count. + # It gives more weight to words that are important/rare across emails. + # ngrams=(1, 2) keeps single words and two-word phrases. + # That matters for this task because "moving forward", "job alert", + # and "application received" carry more meaning than each word alone. + return self._tf.keras.layers.TextVectorization( + max_tokens=self.max_features, + ngrams=(1, 2), + output_mode="tf_idf", + standardize="lower_and_strip_punctuation", + ) + + def fit_transform(self, texts: Sequence[str]): + # Training only: + # adapt() reads the training emails and learns vocabulary + IDF weights. + # batch(128) just feeds emails to TensorFlow in chunks instead of one by one. + dataset = self._tf.data.Dataset.from_tensor_slices(list(texts)).batch(128) + self.vectorizer.adapt(dataset) + return self.transform(texts) + + def transform(self, texts: Sequence[str]): + # Prediction/test: + # use the vocabulary + IDF already learned by adapt(). + # Do not call adapt() here, or vector positions would change. + features = self.vectorizer(self._tf.constant(list(texts))) + return features.numpy() + + +class EmailStatusClassifier: + """Serializable RandomForest email status classifier.""" + + def __init__(self, vectorizer: Any, model: Any): + self.vectorizer = vectorizer + self.model = model + + def predict_texts(self, texts: Sequence[str]) -> list[str]: + # Text -> TF-IDF vector -> RandomForest class id -> label name. + features = self.vectorizer.transform(texts) + raw_ids = self.model.predict(features) + return [ID_TO_LABEL[int(label_id)] for label_id in raw_ids] + + def predict_email( + self, + subject: str = "", + sender: str = "", + body: str = "", + ) -> str: + text = combine_email_fields(subject=subject, sender=sender, body=body) + return self.predict_texts([text])[0] + + def save(self, path: str | Path) -> None: + with Path(path).open("wb") as handle: + pickle.dump(self, handle) + + @classmethod + def load(cls, path: str | Path) -> "EmailStatusClassifier": + with Path(path).open("rb") as handle: + loaded = pickle.load(handle) + if not isinstance(loaded, cls): + raise TypeError(f"Artifact at {path} is not an EmailStatusClassifier") + return loaded + + +def build_vectorizer(choice: str, max_features: int): + normalized = choice.lower() + if normalized == "sklearn": + return SklearnTfidfVectorizer(max_features=max_features), None + if normalized == "tensorflow": + try: + return TensorFlowTfidfVectorizer(max_features=max_features), None + except ImportError as exc: + return None, ( + "TensorFlow is not installed, so Keras TextVectorization cannot be used. " + "Install TensorFlow separately or run with --vectorizer sklearn." + ) + if normalized == "auto": + try: + return TensorFlowTfidfVectorizer(max_features=max_features), None + except ImportError: + return SklearnTfidfVectorizer(max_features=max_features), ( + "TensorFlow is not installed; using scikit-learn TF-IDF fallback." + ) + raise ValueError("vectorizer must be one of: auto, tensorflow, sklearn") + + +def labels_to_ids(labels: Iterable[str]) -> list[int]: + return [LABEL_TO_ID[label] for label in labels] + + +def ids_to_labels(label_ids: Iterable[int]) -> list[str]: + return [ID_TO_LABEL[int(label_id)] for label_id in label_ids] + + +def write_json(path: str | Path, payload: dict[str, Any]) -> None: + with Path(path).open("w", encoding="utf-8") as handle: + json.dump(payload, handle, indent=2, sort_keys=True) + handle.write("\n") + + +def _extract_label(row: dict[str, Any]) -> str | None: + raw_label = row.get("label", row.get("status")) + if raw_label is None: + return None + label = str(raw_label).strip() + aliases = { + "not_relevant": "Not Relevant", + "not relevant": "Not Relevant", + "irrelevant": "Not Relevant", + "applied": "Applied", + "in_progress": "InProgress", + "inprogress": "InProgress", + "in progress": "InProgress", + "interview": "InProgress", + "assessment": "InProgress", + "rejected": "Rejected", + "rejection": "Rejected", + } + return aliases.get(label.lower(), label) + + +def _clean_text(value: str) -> str: + return re.sub(r"\s+", " ", str(value or "")).strip() diff --git a/requirements.txt b/requirements.txt index 2756712..0f0c2dd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -94,3 +94,6 @@ uvicorn==0.40.0 virtualenv==20.36.1 websockets==16.0 yarl==1.22.0 +scipy==1.11.4 +scikit-learn==1.4.2 +tensorflow==2.16.1 diff --git a/scripts/train_email_status_classifier.py b/scripts/train_email_status_classifier.py new file mode 100644 index 0000000..0fb7676 --- /dev/null +++ b/scripts/train_email_status_classifier.py @@ -0,0 +1,339 @@ +#!/usr/bin/env python3 +"""Train or use the job email status classifier. + +Simple pipeline: +1. Read labeled emails from JSONL. +2. Combine subject + sender + body into one text string. +3. Convert text into TF-IDF vectors. +4. Train RandomForest on those vectors. +5. Save vectorizer + model together in model.pkl. +""" + +from __future__ import annotations + +import argparse +import csv +import json +import sys +from pathlib import Path +from typing import Any + + +# Let this script import the local engine package when run from repo root. +PROJECT_ROOT = Path(__file__).resolve().parents[1] +if str(PROJECT_ROOT) not in sys.path: + sys.path.insert(0, str(PROJECT_ROOT)) + + +try: + from sklearn.ensemble import RandomForestClassifier + from sklearn.metrics import ( + accuracy_score, + classification_report, + confusion_matrix, + precision_recall_fscore_support, + ) +except ImportError as exc: + raise SystemExit( + "Missing ML dependency. Run:\n" + " pip install -r requirements.txt\n\n" + f"Import error: {exc}" + ) from exc + + +from engine.email_status_classifier import LABELS, EmailStatusClassifier, load_jsonl_dataset +from engine.email_status_classifier.classifier import ( + build_vectorizer, + combine_email_fields, + ids_to_labels, + labels_to_ids, + write_json, +) + + +DEFAULT_TRAIN_PATH = PROJECT_ROOT / "data" / "email_status_dataset" / "train.jsonl" +DEFAULT_TEST_PATH = PROJECT_ROOT / "data" / "email_status_dataset" / "test.jsonl" +DEFAULT_OUTPUT_DIR = PROJECT_ROOT / "models" / "email_status_classifier" + + +# ============================================================================= +# CLI params +# ============================================================================= + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser( + description="Train, evaluate, or run the job email status classifier." + ) + + # Dataset paths. Each JSONL row should have subject, sender, body, and label. + parser.add_argument("--train-path", type=Path, default=DEFAULT_TRAIN_PATH) + parser.add_argument("--test-path", type=Path, default=DEFAULT_TEST_PATH) + parser.add_argument("--output-dir", type=Path, default=DEFAULT_OUTPUT_DIR) + + # Text vectorizer. + # tensorflow = TensorFlow TextVectorization TF-IDF. + # sklearn = scikit-learn TfidfVectorizer fallback. + parser.add_argument("--vectorizer", choices=["tensorflow", "sklearn", "auto"], default="tensorflow") + parser.add_argument( + "--max-features", + type=int, + default=12000, + help="Maximum vocabulary size. Bigger keeps more words, but can add noise.", + ) + + # RandomForest params. + parser.add_argument("--seed", type=int, default=42, help="Makes training repeatable.") + parser.add_argument( + "--n-estimators", + type=int, + default=300, + help="Number of trees. More trees are slower but usually more stable.", + ) + parser.add_argument( + "--max-depth", + type=optional_int, + default=None, + help="Tree depth. None lets trees grow fully; smaller values reduce overfit.", + ) + parser.add_argument( + "--min-samples-leaf", + type=int, + default=1, + help="Minimum rows in a final tree leaf. Higher values reduce overfit.", + ) + parser.add_argument( + "--class-weight", + default="balanced", + help='Use "balanced" when classes may be uneven; use "none" to disable.', + ) + + # Inference mode. If any of these are present, the script predicts instead of training. + parser.add_argument("--predict-text", default=None) + parser.add_argument("--subject", default="") + parser.add_argument("--sender", default="") + parser.add_argument("--body", default="") + parser.add_argument("--model-path", type=Path, default=None) + + return parser.parse_args() + + +# ============================================================================= +# Main switch: train mode or prediction mode +# ============================================================================= + + +def main() -> int: + args = parse_args() + model_path = args.model_path or args.output_dir / "model.pkl" + + if args.predict_text is not None or args.subject or args.sender or args.body: + predict_one_email(args, model_path) + else: + train_and_evaluate(args, model_path) + + return 0 + + +# ============================================================================= +# Training +# ============================================================================= + + +def train_and_evaluate(args: argparse.Namespace, model_path: Path) -> None: + # 1. Read dataset rows. + train_examples = load_jsonl_dataset(args.train_path) + test_examples = load_jsonl_dataset(args.test_path) + + # 2. Convert each row into one text field: + # "Subject: ...\nSender: ...\nBody: ..." + train_texts = [example.text for example in train_examples] + test_texts = [example.text for example in test_examples] + + # 3. Convert labels into ids RandomForest can train on. + # Not Relevant -> 0, Applied -> 1, InProgress -> 2, Rejected -> 3. + y_train = labels_to_ids([example.label or "" for example in train_examples]) + y_test = labels_to_ids([example.label or "" for example in test_examples]) + + # 4. Build text vectorizer. + # fit_transform() learns vocabulary/IDF from training emails and converts train text. + # transform() converts test emails using the same learned vocabulary/IDF. + vectorizer, warning = build_vectorizer(args.vectorizer, args.max_features) + if vectorizer is None: + raise SystemExit(warning) + if warning: + print(f"Note: {warning}", file=sys.stderr) + + x_train = vectorizer.fit_transform(train_texts) + x_test = vectorizer.transform(test_texts) + + # 5. Train RandomForest. + # RandomForest sees only numeric TF-IDF vectors, not raw text. + model = RandomForestClassifier( + n_estimators=args.n_estimators, + max_depth=args.max_depth, + min_samples_leaf=args.min_samples_leaf, + class_weight=parse_class_weight(args.class_weight), + random_state=args.seed, + n_jobs=-1, + ) + model.fit(x_train, y_train) + + # 6. Predict test data. + # This is pure model output. No rule-based postprocessing is mixed in. + raw_pred_ids = model.predict(x_test) + predicted_labels = ids_to_labels(raw_pred_ids) + predicted_ids = labels_to_ids(predicted_labels) + + # 7. Save everything needed later: + # model.pkl contains both vectorizer + trained RandomForest. + classifier = EmailStatusClassifier(vectorizer=vectorizer, model=model) + args.output_dir.mkdir(parents=True, exist_ok=True) + classifier.save(model_path) + + metrics = build_metrics(y_test, predicted_ids, args, vectorizer.name, warning) + write_json(args.output_dir / "metrics.json", metrics) + write_json(args.output_dir / "label_mapping.json", build_label_mapping()) + write_confusion_matrix(args.output_dir / "confusion_matrix.csv", y_test, predicted_ids) + write_predictions(args.output_dir / "predictions.jsonl", test_examples, predicted_labels) + + print(f"Saved model: {model_path}") + print(f"Accuracy: {metrics['accuracy']:.4f}") + print(f"Macro F1: {metrics['macro']['f1']:.4f}") + + +# ============================================================================= +# Prediction +# ============================================================================= + + +def predict_one_email(args: argparse.Namespace, model_path: Path) -> None: + if not model_path.exists(): + raise SystemExit(f"Model artifact not found: {model_path}") + + classifier = EmailStatusClassifier.load(model_path) + + if args.predict_text is not None: + text = args.predict_text + else: + text = combine_email_fields(args.subject, args.sender, args.body) + + prediction = classifier.predict_texts([text])[0] + print(prediction) + + +# ============================================================================= +# Output files +# ============================================================================= + + +def build_metrics( + y_true: list[int], + y_pred: list[int], + args: argparse.Namespace, + vectorizer_name: str, + vectorizer_warning: str | None, +) -> dict[str, Any]: + macro_precision, macro_recall, macro_f1, _ = precision_recall_fscore_support( + y_true, + y_pred, + labels=list(range(len(LABELS))), + average="macro", + zero_division=0, + ) + per_class = classification_report( + y_true, + y_pred, + labels=list(range(len(LABELS))), + target_names=LABELS, + output_dict=True, + zero_division=0, + ) + + return { + "labels": LABELS, + "accuracy": float(accuracy_score(y_true, y_pred)), + "macro": { + "precision": float(macro_precision), + "recall": float(macro_recall), + "f1": float(macro_f1), + }, + "per_class": { + label: { + "precision": float(per_class[label]["precision"]), + "recall": float(per_class[label]["recall"]), + "f1": float(per_class[label]["f1-score"]), + "support": int(per_class[label]["support"]), + } + for label in LABELS + }, + "training": { + "train_path": str(args.train_path), + "test_path": str(args.test_path), + "vectorizer_used": vectorizer_name, + "vectorizer_warning": vectorizer_warning, + "max_features": args.max_features, + "n_estimators": args.n_estimators, + "max_depth": args.max_depth, + "min_samples_leaf": args.min_samples_leaf, + "class_weight": args.class_weight, + "seed": args.seed, + "postprocessing": "none", + }, + } + + +def write_confusion_matrix(path: Path, y_true: list[int], y_pred: list[int]) -> None: + matrix = confusion_matrix(y_true, y_pred, labels=list(range(len(LABELS)))) + + with path.open("w", newline="", encoding="utf-8") as handle: + writer = csv.writer(handle) + writer.writerow(["actual\\predicted", *LABELS]) + for label, row in zip(LABELS, matrix): + writer.writerow([label, *[int(value) for value in row]]) + + +def write_predictions( + path: Path, + examples: list[Any], + predicted_labels: list[str], +) -> None: + with path.open("w", encoding="utf-8") as handle: + for example, predicted_label in zip(examples, predicted_labels): + row = { + "subject": example.subject, + "sender": example.sender, + "true_label": example.label, + "prediction": predicted_label, + } + if example.metadata: + row["metadata"] = example.metadata + handle.write(json.dumps(row, sort_keys=True) + "\n") + + +# ============================================================================= +# Tiny parsing helpers +# ============================================================================= + + +def optional_int(value: str) -> int | None: + if value.lower() in {"none", "null", ""}: + return None + return int(value) + + +def parse_class_weight(value: str) -> str | None: + if value.lower() in {"none", "null", ""}: + return None + return value + + +def build_label_mapping() -> dict[str, Any]: + return { + "labels": LABELS, + "label_to_id": {label: index for index, label in enumerate(LABELS)}, + } + + +if __name__ == "__main__": + raise SystemExit(main()) From 5a451e9c62fd52a59a76a1621fc985dd234bcbc9 Mon Sep 17 00:00:00 2001 From: madhvantyagi <90159839+madhvantyagi@users.noreply.github.com> Date: Fri, 15 May 2026 01:19:50 -0400 Subject: [PATCH 2/5] Clean up __init__.py by removing docstring and imports Remove unused imports and docstring from __init__.py --- engine/email_status_classifier/__init__.py | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/engine/email_status_classifier/__init__.py b/engine/email_status_classifier/__init__.py index 7de0e3b..8b13789 100644 --- a/engine/email_status_classifier/__init__.py +++ b/engine/email_status_classifier/__init__.py @@ -1,17 +1 @@ -"""Utilities for the job email status classifier.""" -from .classifier import ( - LABELS, - EmailStatusClassifier, - EmailStatusExample, - combine_email_fields, - load_jsonl_dataset, -) - -__all__ = [ - "LABELS", - "EmailStatusClassifier", - "EmailStatusExample", - "combine_email_fields", - "load_jsonl_dataset", -] From a38bedd0c07cdbb1f5ccb9b0e03e70b620b9aa4a Mon Sep 17 00:00:00 2001 From: madhvantyagi <90159839+madhvantyagi@users.noreply.github.com> Date: Fri, 15 May 2026 01:21:41 -0400 Subject: [PATCH 3/5] Delete engine/email_status_classifier/classifier.py --- engine/email_status_classifier/classifier.py | 276 ------------------- 1 file changed, 276 deletions(-) delete mode 100644 engine/email_status_classifier/classifier.py diff --git a/engine/email_status_classifier/classifier.py b/engine/email_status_classifier/classifier.py deleted file mode 100644 index e16d445..0000000 --- a/engine/email_status_classifier/classifier.py +++ /dev/null @@ -1,276 +0,0 @@ -"""Training and inference helpers for job email status classification. - -The primary model is a RandomForest classifier. TensorFlow is optional and is -only used as a TF-IDF feature builder through Keras TextVectorization when the -runtime has TensorFlow installed. The scikit-learn TF-IDF path stays available -because TensorFlow is a heavy dependency for this project. -""" - -from __future__ import annotations - -import json -import pickle -import re -from dataclasses import dataclass -from pathlib import Path -from typing import Any, Iterable, Sequence - - -LABELS = ["Not Relevant", "Applied", "InProgress", "Rejected"] -LABEL_TO_ID = {label: index for index, label in enumerate(LABELS)} -ID_TO_LABEL = {index: label for label, index in LABEL_TO_ID.items()} - - -@dataclass(frozen=True) -class EmailStatusExample: - subject: str - sender: str - body: str - label: str | None = None - metadata: dict[str, Any] | None = None - - @property - def text(self) -> str: - return combine_email_fields(self.subject, self.sender, self.body) - - -def combine_email_fields(subject: str = "", sender: str = "", body: str = "") -> str: - """Create a stable text representation from email fields.""" - return "\n".join( - [ - f"Subject: {_clean_text(subject)}", - f"Sender: {_clean_text(sender)}", - f"Body: {_clean_text(body)}", - ] - ) - - -def load_jsonl_dataset(path: str | Path, require_label: bool = True) -> list[EmailStatusExample]: - dataset_path = Path(path) - if not dataset_path.exists(): - raise FileNotFoundError(f"Dataset file not found: {dataset_path}") - - examples: list[EmailStatusExample] = [] - with dataset_path.open("r", encoding="utf-8") as handle: - for line_number, raw_line in enumerate(handle, start=1): - line = raw_line.strip() - if not line: - continue - try: - row = json.loads(line) - except json.JSONDecodeError as exc: - raise ValueError(f"{dataset_path}:{line_number} is not valid JSON") from exc - - label = _extract_label(row) - if require_label and label is None: - raise ValueError(f"{dataset_path}:{line_number} is missing a label/status field") - if label is not None and label not in LABEL_TO_ID: - raise ValueError( - f"{dataset_path}:{line_number} has unsupported label {label!r}; " - f"expected one of {LABELS}" - ) - - examples.append( - EmailStatusExample( - subject=str(row.get("subject") or ""), - sender=str(row.get("sender") or row.get("from") or ""), - body=str(row.get("body") or row.get("text") or ""), - label=label, - metadata={key: value for key, value in row.items() if key not in {"subject", "sender", "from", "body", "text", "label", "status"}}, - ) - ) - - if not examples: - raise ValueError(f"Dataset file has no examples: {dataset_path}") - return examples - - -class SklearnTfidfVectorizer: - name = "sklearn" - - def __init__(self, max_features: int): - from sklearn.feature_extraction.text import TfidfVectorizer - - self.vectorizer = TfidfVectorizer( - max_features=max_features, - ngram_range=(1, 2), - min_df=1, - strip_accents="unicode", - lowercase=True, - sublinear_tf=True, - ) - - def fit_transform(self, texts: Sequence[str]): - return self.vectorizer.fit_transform(texts) - - def transform(self, texts: Sequence[str]): - return self.vectorizer.transform(texts) - - -class TensorFlowTfidfVectorizer: - name = "tensorflow" - - def __init__(self, max_features: int): - import tensorflow as tf - - # max_features = max vocabulary size. - # Example: 12000 means keep up to 12k useful words/tokens from training emails. - self.max_features = max_features - self._tf = tf - self.vectorizer = self._build_layer() - - def __getstate__(self) -> dict[str, Any]: - # pickle cannot safely store the whole TensorFlow layer state by itself. - # So we manually save the two things needed for future predictions: - # 1. vocabulary: word -> vector position - # 2. idf_weights: word importance for TF-IDF - idf_weights = None - lookup_layer = getattr(self.vectorizer, "_lookup_layer", None) - if lookup_layer is not None and getattr(lookup_layer, "idf_weights", None) is not None: - idf_weights = lookup_layer.idf_weights.numpy().tolist() - return { - "max_features": self.max_features, - "vocabulary": self.vectorizer.get_vocabulary(), - "idf_weights": idf_weights, - } - - def __setstate__(self, state: dict[str, Any]) -> None: - import tensorflow as tf - - # Rebuild the TensorFlow vectorizer when model.pkl is loaded. - # Then put back the exact same vocabulary + IDF weights from training. - self.max_features = state["max_features"] - self._tf = tf - self.vectorizer = self._build_layer() - idf_weights = state.get("idf_weights") - if idf_weights is not None: - self.vectorizer.set_vocabulary( - state["vocabulary"], - idf_weights=self._tf.constant(idf_weights, dtype=self._tf.float32), - ) - else: - self.vectorizer.set_vocabulary(state["vocabulary"]) - - def _build_layer(self): - # output_mode="tf_idf" means the vector is not just word count. - # It gives more weight to words that are important/rare across emails. - # ngrams=(1, 2) keeps single words and two-word phrases. - # That matters for this task because "moving forward", "job alert", - # and "application received" carry more meaning than each word alone. - return self._tf.keras.layers.TextVectorization( - max_tokens=self.max_features, - ngrams=(1, 2), - output_mode="tf_idf", - standardize="lower_and_strip_punctuation", - ) - - def fit_transform(self, texts: Sequence[str]): - # Training only: - # adapt() reads the training emails and learns vocabulary + IDF weights. - # batch(128) just feeds emails to TensorFlow in chunks instead of one by one. - dataset = self._tf.data.Dataset.from_tensor_slices(list(texts)).batch(128) - self.vectorizer.adapt(dataset) - return self.transform(texts) - - def transform(self, texts: Sequence[str]): - # Prediction/test: - # use the vocabulary + IDF already learned by adapt(). - # Do not call adapt() here, or vector positions would change. - features = self.vectorizer(self._tf.constant(list(texts))) - return features.numpy() - - -class EmailStatusClassifier: - """Serializable RandomForest email status classifier.""" - - def __init__(self, vectorizer: Any, model: Any): - self.vectorizer = vectorizer - self.model = model - - def predict_texts(self, texts: Sequence[str]) -> list[str]: - # Text -> TF-IDF vector -> RandomForest class id -> label name. - features = self.vectorizer.transform(texts) - raw_ids = self.model.predict(features) - return [ID_TO_LABEL[int(label_id)] for label_id in raw_ids] - - def predict_email( - self, - subject: str = "", - sender: str = "", - body: str = "", - ) -> str: - text = combine_email_fields(subject=subject, sender=sender, body=body) - return self.predict_texts([text])[0] - - def save(self, path: str | Path) -> None: - with Path(path).open("wb") as handle: - pickle.dump(self, handle) - - @classmethod - def load(cls, path: str | Path) -> "EmailStatusClassifier": - with Path(path).open("rb") as handle: - loaded = pickle.load(handle) - if not isinstance(loaded, cls): - raise TypeError(f"Artifact at {path} is not an EmailStatusClassifier") - return loaded - - -def build_vectorizer(choice: str, max_features: int): - normalized = choice.lower() - if normalized == "sklearn": - return SklearnTfidfVectorizer(max_features=max_features), None - if normalized == "tensorflow": - try: - return TensorFlowTfidfVectorizer(max_features=max_features), None - except ImportError as exc: - return None, ( - "TensorFlow is not installed, so Keras TextVectorization cannot be used. " - "Install TensorFlow separately or run with --vectorizer sklearn." - ) - if normalized == "auto": - try: - return TensorFlowTfidfVectorizer(max_features=max_features), None - except ImportError: - return SklearnTfidfVectorizer(max_features=max_features), ( - "TensorFlow is not installed; using scikit-learn TF-IDF fallback." - ) - raise ValueError("vectorizer must be one of: auto, tensorflow, sklearn") - - -def labels_to_ids(labels: Iterable[str]) -> list[int]: - return [LABEL_TO_ID[label] for label in labels] - - -def ids_to_labels(label_ids: Iterable[int]) -> list[str]: - return [ID_TO_LABEL[int(label_id)] for label_id in label_ids] - - -def write_json(path: str | Path, payload: dict[str, Any]) -> None: - with Path(path).open("w", encoding="utf-8") as handle: - json.dump(payload, handle, indent=2, sort_keys=True) - handle.write("\n") - - -def _extract_label(row: dict[str, Any]) -> str | None: - raw_label = row.get("label", row.get("status")) - if raw_label is None: - return None - label = str(raw_label).strip() - aliases = { - "not_relevant": "Not Relevant", - "not relevant": "Not Relevant", - "irrelevant": "Not Relevant", - "applied": "Applied", - "in_progress": "InProgress", - "inprogress": "InProgress", - "in progress": "InProgress", - "interview": "InProgress", - "assessment": "InProgress", - "rejected": "Rejected", - "rejection": "Rejected", - } - return aliases.get(label.lower(), label) - - -def _clean_text(value: str) -> str: - return re.sub(r"\s+", " ", str(value or "")).strip() From 216c50bb86189434f2110df6781c5e240664f948 Mon Sep 17 00:00:00 2001 From: madhvantyagi <90159839+madhvantyagi@users.noreply.github.com> Date: Fri, 15 May 2026 01:21:50 -0400 Subject: [PATCH 4/5] Delete engine/email_status_classifier/__init__.py --- engine/email_status_classifier/__init__.py | 1 - 1 file changed, 1 deletion(-) delete mode 100644 engine/email_status_classifier/__init__.py diff --git a/engine/email_status_classifier/__init__.py b/engine/email_status_classifier/__init__.py deleted file mode 100644 index 8b13789..0000000 --- a/engine/email_status_classifier/__init__.py +++ /dev/null @@ -1 +0,0 @@ - From 3724b12ee13d67b6dfa45ed03139f41e55d03932 Mon Sep 17 00:00:00 2001 From: madhvantyagi <90159839+madhvantyagi@users.noreply.github.com> Date: Fri, 15 May 2026 01:23:13 -0400 Subject: [PATCH 5/5] Delete scripts/train_email_status_classifier.py --- scripts/train_email_status_classifier.py | 339 ----------------------- 1 file changed, 339 deletions(-) delete mode 100644 scripts/train_email_status_classifier.py diff --git a/scripts/train_email_status_classifier.py b/scripts/train_email_status_classifier.py deleted file mode 100644 index 0fb7676..0000000 --- a/scripts/train_email_status_classifier.py +++ /dev/null @@ -1,339 +0,0 @@ -#!/usr/bin/env python3 -"""Train or use the job email status classifier. - -Simple pipeline: -1. Read labeled emails from JSONL. -2. Combine subject + sender + body into one text string. -3. Convert text into TF-IDF vectors. -4. Train RandomForest on those vectors. -5. Save vectorizer + model together in model.pkl. -""" - -from __future__ import annotations - -import argparse -import csv -import json -import sys -from pathlib import Path -from typing import Any - - -# Let this script import the local engine package when run from repo root. -PROJECT_ROOT = Path(__file__).resolve().parents[1] -if str(PROJECT_ROOT) not in sys.path: - sys.path.insert(0, str(PROJECT_ROOT)) - - -try: - from sklearn.ensemble import RandomForestClassifier - from sklearn.metrics import ( - accuracy_score, - classification_report, - confusion_matrix, - precision_recall_fscore_support, - ) -except ImportError as exc: - raise SystemExit( - "Missing ML dependency. Run:\n" - " pip install -r requirements.txt\n\n" - f"Import error: {exc}" - ) from exc - - -from engine.email_status_classifier import LABELS, EmailStatusClassifier, load_jsonl_dataset -from engine.email_status_classifier.classifier import ( - build_vectorizer, - combine_email_fields, - ids_to_labels, - labels_to_ids, - write_json, -) - - -DEFAULT_TRAIN_PATH = PROJECT_ROOT / "data" / "email_status_dataset" / "train.jsonl" -DEFAULT_TEST_PATH = PROJECT_ROOT / "data" / "email_status_dataset" / "test.jsonl" -DEFAULT_OUTPUT_DIR = PROJECT_ROOT / "models" / "email_status_classifier" - - -# ============================================================================= -# CLI params -# ============================================================================= - - -def parse_args() -> argparse.Namespace: - parser = argparse.ArgumentParser( - description="Train, evaluate, or run the job email status classifier." - ) - - # Dataset paths. Each JSONL row should have subject, sender, body, and label. - parser.add_argument("--train-path", type=Path, default=DEFAULT_TRAIN_PATH) - parser.add_argument("--test-path", type=Path, default=DEFAULT_TEST_PATH) - parser.add_argument("--output-dir", type=Path, default=DEFAULT_OUTPUT_DIR) - - # Text vectorizer. - # tensorflow = TensorFlow TextVectorization TF-IDF. - # sklearn = scikit-learn TfidfVectorizer fallback. - parser.add_argument("--vectorizer", choices=["tensorflow", "sklearn", "auto"], default="tensorflow") - parser.add_argument( - "--max-features", - type=int, - default=12000, - help="Maximum vocabulary size. Bigger keeps more words, but can add noise.", - ) - - # RandomForest params. - parser.add_argument("--seed", type=int, default=42, help="Makes training repeatable.") - parser.add_argument( - "--n-estimators", - type=int, - default=300, - help="Number of trees. More trees are slower but usually more stable.", - ) - parser.add_argument( - "--max-depth", - type=optional_int, - default=None, - help="Tree depth. None lets trees grow fully; smaller values reduce overfit.", - ) - parser.add_argument( - "--min-samples-leaf", - type=int, - default=1, - help="Minimum rows in a final tree leaf. Higher values reduce overfit.", - ) - parser.add_argument( - "--class-weight", - default="balanced", - help='Use "balanced" when classes may be uneven; use "none" to disable.', - ) - - # Inference mode. If any of these are present, the script predicts instead of training. - parser.add_argument("--predict-text", default=None) - parser.add_argument("--subject", default="") - parser.add_argument("--sender", default="") - parser.add_argument("--body", default="") - parser.add_argument("--model-path", type=Path, default=None) - - return parser.parse_args() - - -# ============================================================================= -# Main switch: train mode or prediction mode -# ============================================================================= - - -def main() -> int: - args = parse_args() - model_path = args.model_path or args.output_dir / "model.pkl" - - if args.predict_text is not None or args.subject or args.sender or args.body: - predict_one_email(args, model_path) - else: - train_and_evaluate(args, model_path) - - return 0 - - -# ============================================================================= -# Training -# ============================================================================= - - -def train_and_evaluate(args: argparse.Namespace, model_path: Path) -> None: - # 1. Read dataset rows. - train_examples = load_jsonl_dataset(args.train_path) - test_examples = load_jsonl_dataset(args.test_path) - - # 2. Convert each row into one text field: - # "Subject: ...\nSender: ...\nBody: ..." - train_texts = [example.text for example in train_examples] - test_texts = [example.text for example in test_examples] - - # 3. Convert labels into ids RandomForest can train on. - # Not Relevant -> 0, Applied -> 1, InProgress -> 2, Rejected -> 3. - y_train = labels_to_ids([example.label or "" for example in train_examples]) - y_test = labels_to_ids([example.label or "" for example in test_examples]) - - # 4. Build text vectorizer. - # fit_transform() learns vocabulary/IDF from training emails and converts train text. - # transform() converts test emails using the same learned vocabulary/IDF. - vectorizer, warning = build_vectorizer(args.vectorizer, args.max_features) - if vectorizer is None: - raise SystemExit(warning) - if warning: - print(f"Note: {warning}", file=sys.stderr) - - x_train = vectorizer.fit_transform(train_texts) - x_test = vectorizer.transform(test_texts) - - # 5. Train RandomForest. - # RandomForest sees only numeric TF-IDF vectors, not raw text. - model = RandomForestClassifier( - n_estimators=args.n_estimators, - max_depth=args.max_depth, - min_samples_leaf=args.min_samples_leaf, - class_weight=parse_class_weight(args.class_weight), - random_state=args.seed, - n_jobs=-1, - ) - model.fit(x_train, y_train) - - # 6. Predict test data. - # This is pure model output. No rule-based postprocessing is mixed in. - raw_pred_ids = model.predict(x_test) - predicted_labels = ids_to_labels(raw_pred_ids) - predicted_ids = labels_to_ids(predicted_labels) - - # 7. Save everything needed later: - # model.pkl contains both vectorizer + trained RandomForest. - classifier = EmailStatusClassifier(vectorizer=vectorizer, model=model) - args.output_dir.mkdir(parents=True, exist_ok=True) - classifier.save(model_path) - - metrics = build_metrics(y_test, predicted_ids, args, vectorizer.name, warning) - write_json(args.output_dir / "metrics.json", metrics) - write_json(args.output_dir / "label_mapping.json", build_label_mapping()) - write_confusion_matrix(args.output_dir / "confusion_matrix.csv", y_test, predicted_ids) - write_predictions(args.output_dir / "predictions.jsonl", test_examples, predicted_labels) - - print(f"Saved model: {model_path}") - print(f"Accuracy: {metrics['accuracy']:.4f}") - print(f"Macro F1: {metrics['macro']['f1']:.4f}") - - -# ============================================================================= -# Prediction -# ============================================================================= - - -def predict_one_email(args: argparse.Namespace, model_path: Path) -> None: - if not model_path.exists(): - raise SystemExit(f"Model artifact not found: {model_path}") - - classifier = EmailStatusClassifier.load(model_path) - - if args.predict_text is not None: - text = args.predict_text - else: - text = combine_email_fields(args.subject, args.sender, args.body) - - prediction = classifier.predict_texts([text])[0] - print(prediction) - - -# ============================================================================= -# Output files -# ============================================================================= - - -def build_metrics( - y_true: list[int], - y_pred: list[int], - args: argparse.Namespace, - vectorizer_name: str, - vectorizer_warning: str | None, -) -> dict[str, Any]: - macro_precision, macro_recall, macro_f1, _ = precision_recall_fscore_support( - y_true, - y_pred, - labels=list(range(len(LABELS))), - average="macro", - zero_division=0, - ) - per_class = classification_report( - y_true, - y_pred, - labels=list(range(len(LABELS))), - target_names=LABELS, - output_dict=True, - zero_division=0, - ) - - return { - "labels": LABELS, - "accuracy": float(accuracy_score(y_true, y_pred)), - "macro": { - "precision": float(macro_precision), - "recall": float(macro_recall), - "f1": float(macro_f1), - }, - "per_class": { - label: { - "precision": float(per_class[label]["precision"]), - "recall": float(per_class[label]["recall"]), - "f1": float(per_class[label]["f1-score"]), - "support": int(per_class[label]["support"]), - } - for label in LABELS - }, - "training": { - "train_path": str(args.train_path), - "test_path": str(args.test_path), - "vectorizer_used": vectorizer_name, - "vectorizer_warning": vectorizer_warning, - "max_features": args.max_features, - "n_estimators": args.n_estimators, - "max_depth": args.max_depth, - "min_samples_leaf": args.min_samples_leaf, - "class_weight": args.class_weight, - "seed": args.seed, - "postprocessing": "none", - }, - } - - -def write_confusion_matrix(path: Path, y_true: list[int], y_pred: list[int]) -> None: - matrix = confusion_matrix(y_true, y_pred, labels=list(range(len(LABELS)))) - - with path.open("w", newline="", encoding="utf-8") as handle: - writer = csv.writer(handle) - writer.writerow(["actual\\predicted", *LABELS]) - for label, row in zip(LABELS, matrix): - writer.writerow([label, *[int(value) for value in row]]) - - -def write_predictions( - path: Path, - examples: list[Any], - predicted_labels: list[str], -) -> None: - with path.open("w", encoding="utf-8") as handle: - for example, predicted_label in zip(examples, predicted_labels): - row = { - "subject": example.subject, - "sender": example.sender, - "true_label": example.label, - "prediction": predicted_label, - } - if example.metadata: - row["metadata"] = example.metadata - handle.write(json.dumps(row, sort_keys=True) + "\n") - - -# ============================================================================= -# Tiny parsing helpers -# ============================================================================= - - -def optional_int(value: str) -> int | None: - if value.lower() in {"none", "null", ""}: - return None - return int(value) - - -def parse_class_weight(value: str) -> str | None: - if value.lower() in {"none", "null", ""}: - return None - return value - - -def build_label_mapping() -> dict[str, Any]: - return { - "labels": LABELS, - "label_to_id": {label: index for index, label in enumerate(LABELS)}, - } - - -if __name__ == "__main__": - raise SystemExit(main())