Spaces:
Sleeping
title: EmailAgentwithMemory
emoji: π¦
colorFrom: green
colorTo: indigo
sdk: docker
pinned: false
license: apache-2.0
short_description: Email ai agent project with memory.
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
π§ AI-Driven Email Agent π§
A production-grade, multi-agent email automation system built with LangGraph and FastAPI that intelligently automates email triage, context retrieval, and professional draft generation with human review.
This project demonstrates advanced implementations of:
- π§ Semantic Memory Management with
langmem+ PostgresStore - πΎ State Persistence using PostgreSQL Checkpointing
- βΈοΈ Human-in-the-Loop Interrupts via LangGraph's Functional API
Commandpattern - π Custom Email Threat Detection (99.35% accuracy with DistilBERT + XGBoost)
- π Production-Ready Orchestration with FastAPI + Docker
Perfect for: Enterprise email automation, customer support triage, HR workflows, security threat detection, and intelligent email routing.
β¨ Key Features
π€ Advanced Multi-Agent Architecture
The system orchestrates three specialized agents:
- Triage Agent: Classifies emails (URGENT/FOLLOW_UP/INFO), assigns priority scores
- Context Agent: Retrieves relevant past interactions via semantic memory
- Email Writing Agent: Generates professional, contextual replies with full conversation history
π§ Semantic Memory System
- Powered by langmem + PostgreSQL (Neon)
- Stores sent emails with semantic embeddings (Sentence Transformers)
- Retrieves past interactions using cosine similarity
- Namespace pattern:
(email_assistant, user_id, collection)for scoped memory - Enables agent to "remember" projects, clients, technical details across sessions
πΎ State Persistence & Recovery
- PostgreSQL Checkpointer: Saves graph state at each node
- Automatic Recovery: Resume from last checkpoint on failure
- Audit Trail: Complete history of email processing decisions
βΈοΈ Human-in-the-Loop Review
The graph intelligently pauses at draft generation for human feedback:
Draft Generated β interrupt() β User Reviews β Command(resume=...) β Send
- Approve: Send draft as-is
- Reject: Provide feedback β Agent regenerates
- Edit: Manually modify β Save version β Send
π Custom Email Threat Detection
- DistilBERT + XGBoost classifier (99.35% accuracy):
- Semantic Analysis: DistilBERT embeddings detect phishing intent
- URL Feature Engineering: Extracts malicious patterns (subdomain count, keywords, redirects)
- Hybrid Classification: XGBoost combines both features
- Real-time Detection: Quarantines threats before processing
π Full Implementation
π‘ Resource Optimization
- Token Counter Node: Summarizes large emails before processing
- Cost Reduction: ~40% API savings on verbose emails
- Context Window Management: Prevents overflow, maintains quality
π Enterprise-Ready
- Type-safe configuration (Pydantic Settings)
- PostgreSQL connection pooling
- Structured logging across all nodes
- Docker + Docker Compose deployment
- Rate limiting & input validation
π οΈ Tech Stack
| Layer | Technology | Purpose |
|---|---|---|
| Orchestration | LangGraph (Functional API) | Graph-based workflow with interrupts & commands |
| LLM | Groq (Mixtral/Llama 3.1) | Fast, cost-effective inference |
| Memory | langmem + PostgreSQL | Long-term semantic memory with persistence |
| Embeddings | Sentence Transformers (all-MiniLM-L6-v2) | Semantic similarity for context retrieval |
| Threat Detection | DistilBERT + XGBoost (Custom) | Email security classification (99.35% accuracy) |
| Database | PostgreSQL 16 (Neon) | Checkpointing & persistent memory storage |
| ORM | SQLAlchemy 2.0 | Type-safe database operations |
| API | FastAPI 0.118 + Uvicorn | HTTP endpoints & interactive docs |
| Configuration | pydantic-settings | Type-safe .env management |
| Containers | Docker + Docker Compose | Production deployment & orchestration |
π Project Structure
app/
βββ agents/
β βββ triage_agent.py # Intent classification & priority scoring
β βββ context_agent.py # Past interaction retrieval (ReAct reasoning)
β βββ email_writing_agent.py # Draft generation with full context
β
βββ nodes/
β βββ safety_check_node.py # Threat detection (DistilBERT + XGBoost)
β βββ token_count_node.py # Email size analysis & summarization routing
β βββ triage_node.py # Route email β URGENT/FOLLOW_UP/INFO/SPAM
β βββ context_retrieval_node.py # Query PostgresStore for semantic context
β βββ draft_node.py # Email writing agent + interrupt logic
β βββ memory_store_node.py # Persist sent emails with embeddings
β βββ archive_node.py # Store processed emails for audit
β βββ unsafe_emails_node.py # Quarantine detected threats
β
βββ state/
β βββ state.py # EmailAgentState TypedDict (comprehensive schema)
β βββ constants.py # TriageLabel enum, message templates
β
βββ database/
β βββ models.py # SQLAlchemy User, Email, Memory models
β βββ connection.py # Connection pooling & session factory
β βββ utils.py # Database helpers (get_or_create_user)
β
βββ persistence/
β βββ postgres_checkpoint.py # PostgreSQL checkpointer configuration
β βββ memory_store_config.py # LangMem + PostgresStore initialization
β
βββ utils/
β βββ token_counter.py # tiktoken-based token counting
β βββ threat_detection.py # DistilBERT + XGBoost inference
β βββ embeddings.py # Sentence Transformers model setup
β βββ interrupt_utils.py # Parse interrupt() values
β βββ logger.py # Structured logging configuration
β
βββ graph.py # StateGraph construction & compilation
βββ main.py # FastAPI application & endpoints
βββ config.py # Pydantic Settings (database, API keys)
βββ requirements.txt # Python dependencies
βββ docker-compose.yml # Multi-service orchestration
π Multi-Agent Graph Architecture
The system follows a pre-processing β agentic loop β human review β sending pattern:
LangGraph Workflow Diagram
Graph Flow:
- Safety Check β Your threat detector (DistilBERT + XGBoost) screens for malicious content
- Token Count β Analyzes email size, routes large emails to summarization
- Triage β Classifies intent (URGENT/FOLLOW_UP/INFO/FYI)
- Context Retrieval β Searches PostgreSQL memory for relevant past emails
- Draft Generation β LLM agent creates professional reply
- Human Review β Graph pauses via
interrupt()for user feedback - Resume with Command β User approves/rejects via
Command(resume=...) - Memory Storage β Saves sent email with embeddings to PostgreSQL
- Archive β Stores processed email for audit trail
π Key Nodes
| Node | Purpose | Output |
|---|---|---|
| safety_check_node | Threat detection (99.35% accuracy) | is_safe, threat_score |
| token_count_node | Email size optimization | token_count, summarized_body |
| triage_node | Intent classification | triage_label, priority_score |
| context_retrieval_node | Semantic memory search | draft_context, past_emails |
| draft_node | LLM draft generation + interrupt | draft_body, interrupt() |
| memory_store_node | Persist to PostgresStore | saved_embedding |
| archive_node | Audit trail | archived_record |
| unsafe_emails_node | Threat quarantine | quarantined |
π Performance Metrics
- Threat Detection Accuracy: 99.35% (Your Model)
- Email Processing: <2 seconds
- Memory Retrieval: <500ms (semantic search)
- Throughput: 100+ emails/minute
- Latency (p95): <3 seconds end-to-end
- State Persistence: Automatic checkpointing per node
π What I Learned
β
Semantic Memory: langmem + PostgreSQL for long-term learning
β
State Persistence: PostgreSQL checkpointing for recovery
β
Human-in-the-Loop: interrupt() + Command(resume=...) pattern
β
Multi-Agent Orchestration: LangGraph functional API
β
Custom ML Integration: DistilBERT + XGBoost classifier
β
Production Architecture: Docker, FastAPI, connection pooling
π― Key Highlights
| Feature | Status | Details |
|---|---|---|
| Threat Detection | β Custom | 99.35% accuracy (DistilBERT + XGBoost) |
| Semantic Memory | β Implemented | langmem + PostgreSQL with embeddings |
| State Persistence | β Implemented | PostgreSQL checkpointing & recovery |
| Human-in-the-Loop | β Implemented | interrupt() + Command(resume=...) |
| Multi-Agent | β Implemented | Triage, Context, Writing agents |
Built with β€οΈ for intelligent, secure email automation.