graph TB
subgraph Client["Client / AI Agent"]
C1["π€ AI Agent"]
C2["π± App"]
end
subgraph Gateway["AI-Guard Gateway"]
AUTH["π Auth Middleware<br/>API Key β SHA256 Hash"]
QUOTA_PRE["π Quota Pre-Check<br/>Redis Lua Atomic"]
FW_IN["π‘οΈ Inbound Firewall<br/>KEYWORD / REGEX / MASK / DENY"]
PROXY["π Proxy Service<br/>Stream + Non-Stream"]
FW_OUT["π‘οΈ Outbound Firewall<br/>Response Sanitization"]
QUOTA_POST["π Quota Deduct<br/>Atomic Adjust"]
AUDIT["π Audit Logger<br/>Two-Phase Write"]
end
subgraph Upstream["LLM Providers"]
OAI["OpenAI<br/>GPT-4o"]
ANT["Anthropic<br/>Claude"]
ZHIPU["ζΊθ°±<br/>GLM"]
end
subgraph Storage["Data Layer"]
PG["π PostgreSQL<br/>Tenants / Agents / Policies<br/>Audit Logs / Quotas"]
RD["β‘ Redis<br/>Quota Counter<br/>Policy Cache"]
ADMIN["π₯οΈ Admin Dashboard<br/>Next.js + Shadcn/UI"]
end
C1 -->|POST /v1/chat/completions| AUTH
C2 -->|API Request| AUTH
AUTH --> QUOTA_PRE
QUOTA_PRE --> FW_IN
FW_IN -->|DENY β 403| C1
FW_IN -->|ALLOW / MASK| PROXY
PROXY -->|SSRF Check + DNS Verify| OAI
PROXY -->|SSRF Check + DNS Verify| ANT
PROXY -->|SSRF Check + DNS Verify| ZHIPU
PROXY --> FW_OUT
FW_OUT --> QUOTA_POST
QUOTA_POST --> AUDIT
AUDIT --> PG
QUOTA_PRE -.->|Atomic Deduct| RD
QUOTA_POST -.->|Adjust| RD
QUOTA_POST -.->|syncToDb| PG
ADMIN -->|/api/admin/*| PG
ADMIN -->|Policy CRUD| PG
style Gateway fill:#1a1a2e,stroke:#e94560,color:#fff
style Storage fill:#16213e,stroke:#0f3460,color:#fff
style Upstream fill:#0f3460,stroke:#533483,color:#fff