# Diagram Agent (LangGraph 2-Agent)

**Diagram Agent** là một hệ thống AI tạo sơ đồ (Flowchart, Sequence, Class...) bằng cú pháp **Mermaid** với kiến trúc 2-Agent (Planner và Responder).

## 1. Kiến trúc LangGraph (DiagramGraph)

Sử dụng framework `langgraph` để chia nhỏ nhiệm vụ, đảm bảo sơ đồ được sinh ra có độ chính xác cao về cú pháp, đồng thời có phần giải thích tự nhiên.

```mermaid
sequenceDiagram
    participant U as User / API
    participant R as Redis Cache
    participant P as Planner Node
    participant T as Tool Node (generate_diagram)
    participant E as Responder Node
    
    U->>R: Load lịch sử chat (TTL 30 phút)
    U->>P: Gửi yêu cầu vẽ sơ đồ
    Note over P: LLM (max_tokens=4000) gọi Tool
    P->>T: Dữ liệu Mermaid Code
    T-->>P: Trả về trạng thái & JSON Data
    P->>E: Chuyển tiếp lịch sử & Tool Result
    Note over E: LLM (max_tokens=1500) giải thích
    E-->>U: Response Text + Mermaid Diagram
    U->>R: Lưu lịch sử chat
```

## 2. Chi tiết luồng thực thi

- **Quản lý ngữ cảnh (Session):** Lịch sử chat được lưu tại Redis (`redis_cache`) với tiền tố `diagram:hist:` và tự động xóa sau 30 phút. 
- **Planner Node:** Sử dụng mô hình `gpt-5.4-nano` (context window mở rộng với 4000 tokens) gắn kèm tool `generate_diagram`. Node này chuyên trách viết cú pháp Mermaid.
- **Tool (`generate_diagram`):** Hàm Python thuần bắt cú pháp Mermaid, kiểm tra chuỗi rỗng và chuẩn hóa dữ liệu thành định dạng JSON trả về cho Frontend (bao gồm `mermaid_code`, `title`, `diagram_type`).
- **Responder Node:** Dùng chung mô hình nhưng context ngắn hơn (1500 tokens). Nhiệm vụ của Agent này không phải là sinh code mà là giải nghĩa, tóm tắt nội dung sơ đồ cho người dùng.
- **Router Edge:** Biến lưu chuyển có điều kiện `_after_planner`. Nếu Planner gọi tool, biểu đồ chuyển hướng sang `tools`, nếu không (trường hợp user chỉ trò chuyện), biểu đồ nhảy đến `END` và kết thúc luôn.
