autoapply-ai / memory.py
Faraz618's picture
Create memory.py
c148715 verified
Raw
History Blame Contribute Delete
3.93 kB
import json
import os
from datetime import datetime
DATA_FILE = "data.json"
def _load() -> dict:
"""Load data.json, create if missing."""
if not os.path.exists(DATA_FILE):
default = {
"resume": {"raw_text": "", "last_updated": ""},
"applications": [],
"job_cache": [],
"settings": {
"preferred_roles": [],
"preferred_keywords": [],
"groq_model": "llama-3.1-8b-instant"
},
"chat_history": []
}
_save(default)
return default
with open(DATA_FILE, "r", encoding="utf-8") as f:
return json.load(f)
def _save(data: dict):
"""Write dict back to data.json."""
with open(DATA_FILE, "w", encoding="utf-8") as f:
json.dump(data, f, indent=2, ensure_ascii=False)
# ── Resume ────────────────────────────────────────────
def save_resume(text: str):
data = _load()
data["resume"]["raw_text"] = text.strip()
data["resume"]["last_updated"] = datetime.now().isoformat()
_save(data)
def load_resume() -> str:
return _load()["resume"]["raw_text"]
def resume_last_updated() -> str:
return _load()["resume"].get("last_updated", "")
# ── Applications ──────────────────────────────────────
def save_application(app: dict):
data = _load()
# Avoid duplicate by job_id
existing_ids = [a["job_id"] for a in data["applications"]]
if app["job_id"] not in existing_ids:
data["applications"].append(app)
_save(data)
return True
return False # Already applied
def load_applications() -> list:
return _load()["applications"]
def update_application_status(job_id: str, new_status: str):
data = _load()
for app in data["applications"]:
if app["job_id"] == job_id:
app["status"] = new_status
break
_save(data)
def delete_application(job_id: str):
data = _load()
data["applications"] = [
a for a in data["applications"] if a["job_id"] != job_id
]
_save(data)
# ── Job Cache ─────────────────────────────────────────
def save_job_cache(jobs: list):
data = _load()
data["job_cache"] = jobs
_save(data)
def load_job_cache() -> list:
return _load()["job_cache"]
# ── Settings ──────────────────────────────────────────
def load_settings() -> dict:
return _load()["settings"]
def save_settings(settings: dict):
data = _load()
data["settings"].update(settings)
_save(data)
# ── Chat History ──────────────────────────────────────
def save_chat_message(role: str, content: str):
data = _load()
data["chat_history"].append({
"role": role,
"content": content,
"timestamp": datetime.now().isoformat()
})
# Keep last 50 messages only
data["chat_history"] = data["chat_history"][-50:]
_save(data)
def load_chat_history() -> list:
return _load()["chat_history"]
def clear_chat_history():
data = _load()
data["chat_history"] = []
_save(data)
# ── Stats ─────────────────────────────────────────────
def get_stats() -> dict:
apps = load_applications()
return {
"total": len(apps),
"applied": len([a for a in apps if a["status"] == "Applied"]),
"pending": len([a for a in apps if a["status"] == "Pending"]),
"skipped": len([a for a in apps if a["status"] == "Skipped"]),
}