Instructions to use Petanque/flow-forge-mermaid-th with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use Petanque/flow-forge-mermaid-th with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-1.5B-Instruct") model = PeftModel.from_pretrained(base_model, "Petanque/flow-forge-mermaid-th") - Notebooks
- Google Colab
- Kaggle
Flow Forge — Thai prompt → Mermaid (fine-tuned)
LoRA adapter สำหรับ Qwen2.5-1.5B-Instruct ที่ fine-tune ให้แปลง คำอธิบายภาษาไทย → โค้ด Mermaid
โมเดลเลือก ชนิดไดอะแกรม ให้เหมาะกับเนื้อหา รองรับ 8 ชนิด:
flowchart · sequenceDiagram · classDiagram · erDiagram · stateDiagram-v2 · mindmap · pie · gantt
เทรนด้วย QLoRA 4-bit (NF4) + bf16 บน RTX 2060 Mobile (6GB) — ส่วนหนึ่งของโปรเจกต์ Flow Forge (เว็บวาดไดอะแกรมโทนพาสเทล)
วิธีใช้
โมเดลนี้เป็น LoRA adapter — ต้องโหลดคู่กับ base Qwen/Qwen2.5-1.5B-Instruct
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import PeftModel
BASE = "Qwen/Qwen2.5-1.5B-Instruct"
ADAPTER = "Petanque/flow-forge-mermaid-th"
SYSTEM = (
"คุณเป็นผู้ช่วยแปลงคำอธิบายภาษาไทยเป็นไดอะแกรม Mermaid "
"เลือกชนิดไดอะแกรมให้เหมาะกับเนื้อหา "
"(flowchart, sequenceDiagram, classDiagram, erDiagram, stateDiagram-v2, mindmap, pie, gantt) "
"ตอบเป็นโค้ด Mermaid เท่านั้น "
"ข้อความในไดอะแกรมให้ใช้ภาษาไทยเป็นหลัก "
"ห้ามใช้ภาษาจีนหรือตัวอักษรต่างประเทศอื่น และห้ามแปลข้อความทั้งประโยคเป็นภาษาอังกฤษ "
"(ใช้คำทับศัพท์อังกฤษเฉพาะศัพท์เทคนิคที่จำเป็น)"
)
bnb = BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16, bnb_4bit_use_double_quant=True)
tok = AutoTokenizer.from_pretrained(BASE)
model = AutoModelForCausalLM.from_pretrained(BASE, quantization_config=bnb, device_map="auto",
dtype=torch.bfloat16)
model = PeftModel.from_pretrained(model, ADAPTER).eval()
def generate(prompt):
msgs = [{"role": "system", "content": SYSTEM}, {"role": "user", "content": prompt}]
enc = tok.apply_chat_template(msgs, add_generation_prompt=True, return_tensors="pt",
return_dict=True).to(model.device)
out = model.generate(**enc, max_new_tokens=256, do_sample=False,
pad_token_id=tok.pad_token_id or tok.eos_token_id)
return tok.decode(out[0][enc["input_ids"].shape[1]:], skip_special_tokens=True)
print(generate("ลูกค้าสั่งอาหาร ถ้ามีวัตถุดิบให้ทำ ถ้าไม่มีให้แนะนำเมนูอื่น"))
# → flowchart TD ... (โค้ด Mermaid ภาษาไทย)
สำคัญ: ต้องใช้
SYSTEMprompt ข้างบนแบบเป๊ะ ตอน inference — พฤติกรรม (การเลือกชนิด + บังคับไทย) ผูกกับ system prompt นี้ ถ้าเปลี่ยน คุณภาพจะตก
คำใบ้ชนิด: ถ้า prompt ไม่มีคำใบ้ → โมเดลตอบ flowchart เป็นค่าเริ่มต้น; ใส่คำใบ้เพื่อสลับชนิด เช่น
"sequence การสื่อสาร…", "pie chart สัดส่วน…", "มายด์แมป…", "gantt แผนงาน…"
Serving (สัญญา API)
repo หลักมี serve.py ที่ห่อโมเดลเป็น HTTP + แปลง Mermaid เป็น JSON โครงสร้าง:
POST /generate {"prompt": "..."} → {"mermaid": "...", "diagram": {...}}
POST /parse {"mermaid": "..."} → {"diagram": {...}}
diagram เป็น JSON machine-readable (flowchart: nodes/edges, sequence: participants/messages,
pie: slices, gantt: tasks, mindmap: tree, ฯลฯ) สำหรับระบบอื่นเอาไปต่อยอด
การเทรน
- Base: Qwen/Qwen2.5-1.5B-Instruct · Method: QLoRA (r=16, α=32, all attn+MLP proj)
- Data: 679 ตัวอย่าง / 113 scenarios (flowchart 427 + อีก 7 ชนิด ชนิดละ 36) เขียนมือ ตรวจ syntax ทุกตัว
- Recipe: 4-bit NF4, bf16, batch 1 × grad-accum 8, cosine LR 2e-4, early stopping บน eval_loss
ผล (eval 19 prompt ที่ไม่เคยเห็น): base 9/19 (47%) → fine-tuned 18/19 (95%) parse-rate
ข้อจำกัด
- ภาษาหลุด (tail): บาง prompt นอกโดเมน โดยเฉพาะชนิด sparse (sequence/mindmap) อาจมีอักษร
จีน/ญี่ปุ่นหลุด 1–2 ตัวใน label —
serve.pyมี CJK guard (regenerate แล้วตัดทิ้ง) กันปลายทางให้ - แม่นสุดกับ flowchart (ข้อมูลเยอะสุด); ชนิดอื่นดีเมื่อ prompt มีคำใบ้ชัด
classDiagram: ใช้ id ละติน + label ไทยใน[](เช่นclass Animal["สัตว์"])
License
Apache-2.0 (สอดคล้องกับ base model Qwen2.5-1.5B-Instruct)
- Downloads last month
- 28