test2 / PROJECT_TECHNICAL_SPEC.md
Martechsol
Update from backup state - 2026-05-06
cb79a0a
|
Raw
History Blame Contribute Delete
4.98 kB
# Martechsol HR Assistant: Project Technical Specification & Workflow
This document provides a comprehensive overview of the **Martechsol HR Assistant**, covering its architecture, the models used, API integrations, and the end-to-end data workflow.
---
## 1. Project Architecture Overview
The system is a high-performance **Retrieval-Augmented Generation (RAG)** application designed to provide precise, grounded answers based on employee handbooks and HR documents.
### High-Level Stack:
- **Language**: Python 3.10+
- **API Framework**: FastAPI
- **Server**: Uvicorn
- **UI**: Gradio (for direct testing/Hugging Face Spaces)
- **Web Integration**: Custom HTML/CSS/JS "Floating Icon" for WordPress/External sites.
- **Persistence**: FAISS (Vector DB) & Local Session Storage.
---
## 2. Models & API Infrastructure
The project utilizes 4 distinct models to ensure a balance between speed, reasoning capability, and accuracy.
| Model Component | Model Name / ID | Provider / Engine | Purpose |
| :--- | :--- | :--- | :--- |
| **Main LLM (Brain)** | `qwen/qwen3-32b` | **Groq** | Reasoning, formatting, and generating the final response. |
| **Query Rewriter** | `llama-3.1-8b-instant` | **Groq** | Expanding user queries into multiple search terms (used as fallback). |
| **Embedding Model** | `BAAI/bge-small-en-v1.5` | Sentence Transformers | Converting text chunks into mathematical vectors for search. |
| **Reranker** | `ms-marco-MiniLM-L-6-v2` | Cross-Encoder | Deeply evaluating the relevance of retrieved document chunks. |
### APIs Connected:
1. **Groq API**: Powers the LLM inference (Qwen3 and Llama 3.1). Groq is chosen for its extreme speed (LPUs).
2. **SMTP (Gmail/Custom)**: Used for sending OTPs or notifications (if configured).
3. **Hugging Face**: Used for hosting the Gradio interface and downloading model weights for Embeddings/Reranking.
---
## 3. The RAG Pipeline Workflow
When a user sends a message, the system follows this exact sequence:
### Phase 1: Query Processing
1. **Normalization**: The message is cleaned and converted to a cache key (MD5 hash).
2. **Cache Lookup**: If the exact question was asked recently, the answer is returned instantly from an in-memory LRU cache.
3. **Local Expansion**: The query is expanded into up to 3 targeted search queries using a deterministic keyword map (e.g., "timing" → "office hours", "workday schedule"). This saves 3-5 seconds of LLM latency.
### Phase 2: Retrieval (Search)
1. **Vector Search**: The system uses **FAISS** to find the most mathematically similar text chunks in the `docs/` folder.
2. **Keyword Search (BM25)**: Complements vector search by finding exact word matches.
3. **Hybrid Filtering**: Chunks are initially filtered by a relevance threshold (RRF).
### Phase 3: Intelligence & Reranking
1. **Cross-Encoding**: The top retrieved chunks are sent to the **Reranker model**. Unlike standard search, the reranker looks at the *actual meaning* of the chunk relative to the question.
2. **Context Construction**: The most relevant chunks (capped at 1500 words to avoid token limits) are assembled into a context block.
### Phase 4: Generation (The Final Answer)
1. **Prompt Injection**: The question, context, and a pruned chat history (last 2 turns) are wrapped in a strict **Master System Prompt**.
2. **LLM Execution**: The request is sent to `qwen/qwen3-32b`.
- *Optimization*: The instruction `/no_think` is added to skip internal chain-of-thought, reducing response time by 40-60%.
3. **Post-Processing**:
- Strips `<think>` tags.
- Removes conversational filler (e.g., "Based on the documents provided...").
- Enforces HTML formatting (bolding key terms, `<br>` for lists).
---
## 4. Backend Components & Directory Structure
### Core Files:
- `app/main.py`: Entry point for the FastAPI application.
- `app/core/config.py`: Centralized configuration (API keys, model names, chunk sizes).
- `app/services/rag_pipeline.py`: Orchestrates the flow from query to final answer.
- `app/services/llm.py`: Handles communication with Groq and prompt engineering.
- `app/services/vector_store.py`: Manages FAISS indexing and retrieval.
- `app/services/session_store.py`: Manages user history and OTP sessions.
### Data Flow:
1. **Input**: User Query (HTTP POST to `/chat` or Gradio WebSocket).
2. **Processing**: FastAPI → RAG Pipeline Service → LLM Service.
3. **Output**: JSON Response with `reply` and `retrieved_chunks` (metadata).
---
## 5. Summary of Key Features
- **Deterministic Intent Detection**: Instantly recognizes topics like "leaves" or "salary" to pull the right data without LLM delay.
- **Thinking Model Suppression**: Uses the power of Qwen3/DeepSeek while disabling their slow "thinking" phase for the final user response.
- **Hybrid Search**: Combines the precision of keywords with the "vibe" search of vectors.
- **Strict Formatting**: Enforces list styles and word counts to ensure a professional HR tone.