| --- |
| title: ROGLAG Threat Console |
| emoji: 🛡️ |
| colorFrom: blue |
| colorTo: purple |
| sdk: docker |
| app_port: 7860 |
| pinned: false |
| --- |
| |
| # ROGLAG Demo |
|
|
| AI RAG demo สำหรับตรวจความเสี่ยงจาก security log: |
|
|
| - Monitor dashboard แยก category/severity/source |
| - Critical alert center พร้อม badge/banner/toast ในหน้าเว็บ |
| - Rule classifier สำหรับ pattern ชัดเจน เช่น brute force, port scan, SQLi/XSS, C2 beacon |
| - Local RAG retrieval จาก `Data/files/security_logs.jsonl` |
| - Q&A ภาษาไทยแบบ local fallback |
| - Optional OpenRouter API สำหรับ LLM answer |
|
|
| ## Run |
|
|
| ```bash |
| cd "/Volumes/Drive D/Code/Work/Work/LAGROG" |
| python3 server.py |
| ``` |
|
|
| เปิด: |
|
|
| ```text |
| http://127.0.0.1:8765 |
| ``` |
|
|
| ## Use OpenRouter |
|
|
| Local mode ใช้ได้ทันที ไม่ต้องมี key. ถ้าจะให้ LLM ช่วยสรุป: |
|
|
| ```bash |
| export OPENROUTER_API_KEY="your_key_here" |
| export OPENROUTER_MODEL="openrouter/free" |
| python3 server.py |
| ``` |
|
|
| หน้าเว็บจะใช้ local fallback ได้ทันที และจะเรียก LLM อัตโนมัติเมื่อมี key |
|
|
| โปรเจกต์อ่าน `.env` อัตโนมัติด้วย key เหล่านี้: |
|
|
| ```text |
| OPENROUTER_API_KEY=... |
| OPENROUTER_MODEL=openrouter/free |
| OPENROUTER_EMBED_MODEL=nvidia/llama-nemotron-embed-vl-1b-v2:free |
| ``` |
|
|
| ## Build Vector Index |
|
|
| ตัว demo ใช้ keyword retrieval ได้ทันที แต่ถ้าจะใช้ embedding/vector RAG จริง ให้ build index ก่อน: |
|
|
| ```bash |
| python3 build_vector_index.py --limit 10000 --batch-size 32 |
| python3 server.py |
| ``` |
|
|
| ไฟล์ vector DB จะถูกสร้างที่: |
|
|
| ```text |
| Data/files/lograg_vectors.sqlite |
| ``` |
|
|
| ถ้าไฟล์นี้มีอยู่ server จะใช้ vector retrieval อัตโนมัติ และ fallback เป็น keyword retrieval เมื่อ OpenRouter rate-limit หรือ vector index ยังไม่มี |
|
|
| ## Production Vector RAG |
|
|
| ผล RAG บน local กับ Vercel จะไม่เหมือนกันถ้า local ใช้ `Data/files/lograg_vectors.sqlite` แต่ Vercel ใช้ keyword fallback เพราะไฟล์ SQLite vector ขนาดใหญ่ถูก exclude จาก deploy. |
|
|
| แนะนำสำหรับ production demo: |
|
|
| - ใช้ **Qdrant Cloud** เป็น vector DB ภายนอก |
| - ใช้ `OPENROUTER_EMBED_MODEL` ตัวเดียวกับตอนสร้าง index |
| - ตั้ง env บน Vercel ให้ครบ แล้ว API จะใช้ `retrieval=vector_db` อัตโนมัติ |
|
|
| Env ที่ต้องเพิ่มบน Vercel: |
|
|
| ```text |
| OPENROUTER_API_KEY=... |
| OPENROUTER_MODEL=openrouter/free |
| OPENROUTER_EMBED_MODEL=nvidia/llama-nemotron-embed-vl-1b-v2:free |
| QDRANT_URL=https://xxxxx.qdrant.io |
| QDRANT_API_KEY=... |
| QDRANT_COLLECTION=roglag_logs |
| ``` |
|
|
| Upload vector index เข้า Qdrant: |
|
|
| ```bash |
| python3 upload_qdrant_index.py --limit 10000 --batch-size 32 |
| ``` |
|
|
| เพิ่ม env บน Vercel: |
|
|
| ```bash |
| vercel env add QDRANT_URL production |
| vercel env add QDRANT_API_KEY production |
| vercel env add QDRANT_COLLECTION production |
| vercel env add OPENROUTER_EMBED_MODEL production |
| vercel --prod |
| ``` |
|
|
| ## Model notes |
|
|
| สำหรับ demo ฟรี แนะนำเริ่มที่: |
|
|
| - `openrouter/free` - ง่ายสุด ให้ OpenRouter route ไป free model ที่ใช้ได้ตอนนั้น |
| - `openai/gpt-oss-120b:free` - reasoning/Q&A ดี เหมาะกับสรุป incident |
| - `nvidia/nemotron-3-ultra:free` - context ใหญ่ เหมาะกับ log context ยาว |
| - `google/gemma-4-31b:free` - multilingual/doc understanding ดี |
| - `nvidia/llama-nemotron-embed-vl-1b-v2:free` - embedding ฟรีสำหรับ vector RAG |
|
|
| Free models มี rate limit และ availability เปลี่ยนได้ ควรมี local fallback เสมอ |
|
|
| ## Regenerate data |
|
|
| ```bash |
| cd Data/files |
| python3 gen_logs.py -n 10000 --profile mixed --seed 42 |
| python3 gen_logs.py -n 50000 --profile realistic --seed 42 |
| ``` |
|
|
| ไฟล์ชุดใหญ่สำหรับ train/eval แยกไว้แล้ว: |
|
|
| ```text |
| Data/files/security_logs_extended_50k.jsonl |
| Data/files/security_logs_extended_sample_2k.jsonl |
| ``` |
|
|
| ถ้าจะรัน local server กับชุด 50k: |
|
|
| ```bash |
| LOGRAG_DATA_FILE=Data/files/security_logs_extended_50k.jsonl python3 server.py |
| ``` |
|
|
| ## Critical Alerts |
|
|
| Local และ Vercel API มี endpoint เดียวกัน: |
|
|
| ```text |
| GET /api/alerts?limit=20 |
| ``` |
|
|
| หน้าเว็บจะ poll ทุก 15 วินาที ถ้าเจอ critical alert ใหม่จะขึ้น toast และกด badge บน navbar เพื่อเปิด Incident queue ที่ filter เป็น Critical ทันที |
|
|
| ## Deploy on Vercel |
|
|
| โปรเจกต์มี `vercel.json` และ `api/*.py` แล้ว ดังนั้น deploy เป็น static frontend + Python Functions ได้เลย: |
|
|
| ```bash |
| npm i -g vercel |
| vercel login |
| vercel env add OPENROUTER_API_KEY |
| vercel --prod |
| ``` |
|
|
| บน Vercel จะใช้ `Data/files/security_logs.jsonl` ชุด 10k เพื่อให้ bundle เล็กและ cold start เร็ว ส่วน vector SQLite และไฟล์ 50k ถูก exclude จาก deployment. Local ยังใช้ vector index ได้ตามเดิม. |
|
|