fibonacciai/laya-gguf-persian-multilingual-decision
Here is a new README.md for your fibonacciai/laya-gguf-persian-multilingual-decision repository. It is based on the information from your Hugging Face page and follows the structure of the original README, with the Persian optimization highlighted throughout.
<div style="max-width:480px;margin:32px auto;padding:16px;background:linear-gradient(180deg,#0f172a,#020617);border-radius:24px;border:1px solid rgba(16,185,129,0.35);box-shadow:0 0 40px rgba(16,185,129,0.2),0 30px 60px rgba(0,0,0,0.6);font-family:'Segoe UI',Tahoma,sans-serif;">
<div style="display:flex;justify-content:space-between;padding:8px 12px 14px;font-family:'Courier New',monospace;font-size:12px;letter-spacing:1.5px;"> <span style="color:#fbbf24;text-shadow:0 0 8px rgba(251,191,36,0.7);">SCORE: 0420</span> <span style="color:#6ee7b7;text-shadow:0 0 8px rgba(16,185,129,0.7);">◆ LAYA·SNAKE v2.0</span> <span style="color:#f472b6;text-shadow:0 0 8px rgba(244,114,182,0.7);">LEVEL 03</span> </div>
<style> @keyframes la2-show-1 { 0% { opacity: 0; transform: translateX(-6px); } 4% { opacity: 1; transform: translateX(0); } 30% { opacity: 1; transform: translateX(0); } 33%, 100% { opacity: 0; transform: translateX(0); } } @keyframes la2-show-2 { 0%, 33% { opacity: 0; transform: translateX(-6px); } 37% { opacity: 1; transform: translateX(0); } 63% { opacity: 1; transform: translateX(0); } 66%, 100% { opacity: 0; transform: translateX(0); } } @keyframes la2-show-3 { 0%, 66% { opacity: 0; transform: translateX(-6px); } 70% { opacity: 1; transform: translateX(0); } 96% { opacity: 1; transform: translateX(0); } 99%, 100% { opacity: 0; transform: translateX(0); } } @keyframes la2-cursor { 0%, 49% { opacity: 1; } 50%, 100% { opacity: 0; } } @keyframes la2-conf-cycle { 0% { width: 0%; } 4% { width: 42%; } 15% { width: 94%; } 33% { width: 94%; } 36% { width: 0%; } 45% { width: 68%; } 55% { width: 91%; } 66% { width: 91%; } 69% { width: 0%; } 80% { width: 88%; } 95% { width: 96%; } 100% { width: 0%; } } @keyframes la2-pulse { 0%, 100% { opacity: 1; box-shadow: 0 0 6px #10b981; } 50% { opacity: 0.4; box-shadow: 0 0 14px #10b981; } } @keyframes la2-scan { 0% { transform: translateY(0); opacity: 0; } 5% { opacity: 0.9; } 95% { opacity: 0.9; } 100% { transform: translateY(400px); opacity: 0; } } @keyframes la2-reticle-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } </style>
<div style="position:relative;border-radius:16px;overflow:hidden;background:#020617;border:1px solid rgba(16,185,129,0.25);"> <svg viewBox="0 0 400 400" width="100%" style="display:block;"> <defs> <pattern id="la2grid" width="20" height="20" patternUnits="userSpaceOnUse"> <path d="M 20 0 L 0 0 0 20" fill="none" stroke="rgba(16,185,129,0.1)" stroke-width="1"/> </pattern> <radialGradient id="la2food" cx="30%" cy="30%"> <stop offset="0%" stop-color="#fecaca"/> <stop offset="55%" stop-color="#ef4444"/> <stop offset="100%" stop-color="#7f1d1d"/> </radialGradient> <linearGradient id="la2head" x1="0%" y1="0%" x2="100%" y2="100%"> <stop offset="0%" stop-color="#a7f3d0"/> <stop offset="50%" stop-color="#34d399"/> <stop offset="100%" stop-color="#059669"/> </linearGradient> <linearGradient id="la2body" x1="0%" y1="0%" x2="100%" y2="100%"> <stop offset="0%" stop-color="#34d399"/> <stop offset="100%" stop-color="#047857"/> </linearGradient> <filter id="la2glow"> <feGaussianBlur stdDeviation="3" result="b"/> <feMerge><feMergeNode in="b"/><feMergeNode in="SourceGraphic"/></feMerge> </filter> <filter id="la2glow-strong"> <feGaussianBlur stdDeviation="5" result="b"/> <feMerge><feMergeNode in="b"/><feMergeNode in="SourceGraphic"/></feMerge> </filter> </defs>
<rect width="400" height="400" fill="url(#la2grid)"/>
<path d="M 200,200 L 280,140 L 320,320 L 120,300 Z" fill="none" stroke="rgba(52,211,153,0.22)" stroke-width="1.5" stroke-dasharray="3 7"/>
<circle cx="280" cy="140" r="18" fill="none" stroke="#ef4444" stroke-width="1" opacity="0.35"> <animate attributeName="r" values="14;22;14" dur="2s" repeatCount="indefinite"/> <animate attributeName="opacity" values="0.6;0.1;0.6" dur="2s" repeatCount="indefinite"/> </circle> <circle cx="280" cy="140" r="8" fill="url(#la2food)" filter="url(#la2glow)"> <animate attributeName="r" values="8;10;8" dur="1.2s" repeatCount="indefinite"/> <animate attributeName="opacity" values="1;1;0.8;0;0;1" keyTimes="0;0.13;0.15;0.17;0.98;1" dur="12s" repeatCount="indefinite"/> </circle>
<circle cx="320" cy="320" r="18" fill="none" stroke="#ef4444" stroke-width="1" opacity="0.35"> <animate attributeName="r" values="14;22;14" dur="2s" begin="0.7s" repeatCount="indefinite"/> <animate attributeName="opacity" values="0.6;0.1;0.6" dur="2s" begin="0.7s" repeatCount="indefinite"/> </circle> <circle cx="320" cy="320" r="8" fill="url(#la2food)" filter="url(#la2glow)"> <animate attributeName="r" values="8;10;8" dur="1.2s" begin="0.7s" repeatCount="indefinite"/> <animate attributeName="opacity" values="1;1;0.8;0;0;1" keyTimes="0;0.43;0.45;0.47;0.98;1" dur="12s" repeatCount="indefinite"/> </circle>
<circle cx="120" cy="300" r="18" fill="none" stroke="#ef4444" stroke-width="1" opacity="0.35"> <animate attributeName="r" values="14;22;14" dur="2s" begin="1.4s" repeatCount="indefinite"/> <animate attributeName="opacity" values="0.6;0.1;0.6" dur="2s" begin="1.4s" repeatCount="indefinite"/> </circle> <circle cx="120" cy="300" r="8" fill="url(#la2food)" filter="url(#la2glow)"> <animate attributeName="r" values="8;10;8" dur="1.2s" begin="1.4s" repeatCount="indefinite"/> <animate attributeName="opacity" values="1;1;0.8;0;0;1" keyTimes="0;0.76;0.78;0.80;0.98;1" dur="12s" repeatCount="indefinite"/> </circle>
<g filter="url(#la2glow)"> <circle r="10" fill="url(#la2body)" opacity="0.95"> <animateMotion dur="12s" repeatCount="indefinite" begin="-0.20s" path="M 200,200 L 280,140 L 320,320 L 120,300 Z"/> </circle> <circle r="9" fill="url(#la2body)" opacity="0.88"> <animateMotion dur="12s" repeatCount="indefinite" begin="-0.40s" path="M 200,200 L 280,140 L 320,320 L 120,300 Z"/> </circle> <circle r="9" fill="url(#la2body)" opacity="0.82"> <animateMotion dur="12s" repeatCount="indefinite" begin="-0.60s" path="M 200,200 L 280,140 L 320,320 L 120,300 Z"/> </circle> <circle r="8" fill="url(#la2body)" opacity="0.76"> <animateMotion dur="12s" repeatCount="indefinite" begin="-0.80s" path="M 200,200 L 280,140 L 320,320 L 120,300 Z"/> </circle> <circle r="8" fill="url(#la2body)" opacity="0.7"> <animateMotion dur="12s" repeatCount="indefinite" begin="-1.00s" path="M 200,200 L 280,140 L 320,320 L 120,300 Z"/> </circle> <circle r="7" fill="url(#la2body)" opacity="0.62"> <animateMotion dur="12s" repeatCount="indefinite" begin="-1.20s" path="M 200,200 L 280,140 L 320,320 L 120,300 Z"/> </circle> <circle r="7" fill="url(#la2body)" opacity="0.55"> <animateMotion dur="12s" repeatCount="indefinite" begin="-1.40s" path="M 200,200 L 280,140 L 320,320 L 120,300 Z"/> </circle> <circle r="6" fill="url(#la2body)" opacity="0.48"> <animateMotion dur="12s" repeatCount="indefinite" begin="-1.60s" path="M 200,200 L 280,140 L 320,320 L 120,300 Z"/> </circle> <circle r="6" fill="url(#la2body)" opacity="0.4"> <animateMotion dur="12s" repeatCount="indefinite" begin="-1.80s" path="M 200,200 L 280,140 L 320,320 L 120,300 Z"/> </circle> <circle r="5" fill="url(#la2body)" opacity="0.32"> <animateMotion dur="12s" repeatCount="indefinite" begin="-2.00s" path="M 200,200 L 280,140 L 320,320 L 120,300 Z"/> </circle> </g>
<g filter="url(#la2glow-strong)"> <g> <animateMotion dur="12s" repeatCount="indefinite" rotate="auto" path="M 200,200 L 280,140 L 320,320 L 120,300 Z"/> <polygon points="-11,-8 11,0 -11,8" fill="url(#la2head)"/> <circle cx="3" cy="0" r="2.2" fill="#022c22"/> <circle cx="-4" cy="-3" r="1.2" fill="#a7f3d0" opacity="0.7"/> </g> </g>
<rect x="0" y="0" width="400" height="3" fill="#10b981" opacity="0.6"> <animate attributeName="y" values="0;400;400" keyTimes="0;0.9;1" dur="4s" repeatCount="indefinite"/> <animate attributeName="opacity" values="0;0.9;0.9;0" keyTimes="0;0.05;0.9;1" dur="4s" repeatCount="indefinite"/> </rect>
</svg> </div>
<div style="margin-top:14px;padding:12px 14px;background:linear-gradient(180deg,rgba(2,6,23,0.9),rgba(15,23,42,0.95));border:1px solid rgba(16,185,129,0.3);border-radius:12px;font-family:'Courier New',monospace;">
<div style="display:flex;justify-content:space-between;align-items:center;font-size:10px;letter-spacing:1.5px;color:#6ee7b7;padding-bottom:8px;border-bottom:1px dashed rgba(16,185,129,0.2);"> <span><span style="display:inline-block;width:6px;height:6px;border-radius:50%;background:#10b981;margin-right:6px;animation:la2-pulse 1.2s infinite;box-shadow:0 0 8px #10b981;"></span>LAYA DECISION ENGINE</span> <span style="color:#f472b6;">● LIVE</span> </div>
<div style="position:relative;height:26px;margin:10px 0 6px;"> <div style="position:absolute;inset:0;opacity:0;font-size:12px;color:#fde68a;animation:la2-show-1 12s infinite;line-height:26px;"> ▶ analyzing 400 grid cells<span style="animation:la2-cursor 0.8s infinite;"></span> </div> <div style="position:absolute;inset:0;opacity:0;font-size:12px;color:#6ee7b7;animation:la2-show-2 12s infinite;line-height:26px;"> > target (280,140) · MOVERIGHT · conf 0.94<span style="animation:la2-cursor 0.8s infinite;"></span> </div> <div style="position:absolute;inset:0;opacity:0;font-size:12px;color:#fbbf24;animation:la2-show-3 12s infinite;line-height:26px;"> > target consumed ✓ · scanning next<span style="animation:la2-cursor 0.8s infinite;"></span> </div> </div>
<div style="display:flex;align-items:center;gap:8px;font-size:10px;color:#6ee7b7;letter-spacing:1px;"> <span style="opacity:0.6;">conf</span> <div style="flex:1;height:6px;background:rgba(16,185,129,0.1);border-radius:3px;overflow:hidden;position:relative;"> <div style="position:absolute;top:0;left:0;height:100%;width:0;background:linear-gradient(90deg,#10b981,#34d399,#6ee7b7);border-radius:3px;animation:la2-conf-cycle 12s infinite;box-shadow:0 0 10px rgba(16,185,129,0.7);"></div> </div> <span style="opacity:0.9;color:#fbbf24;">0.94</span> </div>
</div>
</div>
<div style="perspective: 1200px; margin: 28px 0;"> <div style=" transform: rotateY(-10deg) rotateX(5deg); transform-style: preserve-3d; transition: transform 0.4s ease, box-shadow 0.4s ease; background: linear-gradient(145deg, #1a1a2e, #16213e); border-radius: 18px; padding: 22px 24px; box-shadow: 0 25px 50px rgba(0, 0, 0, 0.6), 0 0 0 1px rgba(255, 255, 255, 0.06), inset 0 1px 0 rgba(255, 255, 255, 0.1); color: #e0e0ff; font-family: 'Segoe UI', Tahoma, sans-serif; max-width: 820px; margin: 0 auto; "> <!-- نوار بالای پنجره --> <div style="display: flex; align-items: center; gap: 8px; margin-bottom: 16px;"> <span style="width: 13px; height: 13px; border-radius: 50%; background: #ff5f56; box-shadow: 0 0 6px #ff5f56;"></span> <span style="width: 13px; height: 13px; border-radius: 50%; background: #ffbd2e; box-shadow: 0 0 6px #ffbd2e;"></span> <span style="width: 13px; height: 13px; border-radius: 50%; background: #27c93f; box-shadow: 0 0 6px #27c93f;"></span> <span style="margin-right: auto; font-size: 12px; opacity: 0.6; letter-spacing: 0.5px;"> laya-persian / quick-start.sh </span> </div>
<!-- کشوی کد --> <details> <summary style=" cursor: pointer; font-weight: 700; font-size: 15px; color: #8ab4f8; padding: 8px 0; outline: none; user-select: none; "> 📦 نمایش کد شروع سریع (کلیک کن) </summary>
# ۱. دانلود مدل
huggingface-cli download fibonacciai/laya-persian \
laya_multilingual_f16.gguf --local-dir .
# ۲. دریافت باینری
# از https://github.com/monatis/ggmlc/releases/latest دانلود کن
# فایل laya.exe (ویندوز) یا laya (لینوکس/مک)
# ۳. لیست پریستها
laya list-presets
# ۴. اطلاعات مدل
laya info laya_multilingual_f16.gguf
# ۵. تصمیمگیری روی متن فارسی
laya decide laya_multilingual_f16.gguf \
--preset email \
--text "دو بار از من هزینه کسر شده است" \
--device auto
# ۶. خروجی JSON
laya decide laya_multilingual_f16.gguf \
--preset triage \
--text "لطفاً مبلغ کسر شده را بازگردانید." \
--json
# ۷. اجرای سرور
laya serve laya_multilingual_f16.gguf --port 8080 --device auto</details>
<!-- کشوی دوم برای خروجی JSON --> <details style="margin-top: 14px;"> <summary style=" cursor: pointer; font-weight: 700; font-size: 15px; color: #f8b88a; padding: 8px 0; outline: none; user-select: none; "> 🧾 نمونه خروجی JSON (کلیک کن) </summary>
{
"label": "billing_dispute",
"confidence": 0.94,
"preset": "email",
"language": "fa",
"model": "laya_multilingual_f16.gguf"
}</details> </div> </div>
🎮 LAYA Playground — نحوه کار مدل
<div style="max-width:600px;margin:32px auto;padding:20px;background:linear-gradient(180deg,#0a0f1e,#020617);border-radius:22px;border:1px solid rgba(139,92,246,0.35);box-shadow:0 0 40px rgba(139,92,246,0.2),0 30px 60px rgba(0,0,0,0.6);font-family:'Segoe UI',Tahoma,sans-serif;color:#e2e8f0;">
<style> .laya-demo input[type="radio"]{display:none;} .laya-demo .inp{display:block;cursor:pointer;padding:12px 14px;margin-bottom:8px;border-radius:10px;background:rgba(30,41,59,0.5);border:1px solid rgba(148,163,184,0.2);color:#cbd5e1;font-size:13.5px;transition:all 0.3s cubic-bezier(0.2,0.8,0.2,1);line-height:1.7;} .laya-demo .inp:hover{background:rgba(30,64,175,0.35);border-color:#60a5fa;transform:translateX(4px);} .laya-demo .inp::before{content:"○";margin-left:8px;color:#64748b;font-family:monospace;transition:all 0.3s;} .laya-demo .out{display:none;padding:16px;margin-top:14px;border-radius:12px;background:linear-gradient(180deg,rgba(2,6,23,0.9),rgba(15,23,42,0.95));border:1px solid rgba(16,185,129,0.3);animation:laya-out 0.5s ease;} @keyframes laya-out{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:translateY(0);}} @keyframes laya-flow{0%{transform:scaleX(0);opacity:0;}20%{opacity:1;}100%{transform:scaleX(1);opacity:0.6;}} @keyframes laya-conf{from{width:0%;}to{width:var(--conf);}} @keyframes laya-blink{0%,49%{opacity:1;}50%,100%{opacity:0;}} @keyframes laya-pulse{0%,100%{box-shadow:0 0 0 0 rgba(16,185,129,0.5);}50%{box-shadow:0 0 0 8px rgba(16,185,129,0);}}
.laya-demo .pipeline{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:16px 0 8px;padding:0 4px;} .laya-demo .stage{flex:1;text-align:center;padding:10px 6px;border-radius:10px;background:rgba(15,23,42,0.7);border:1px solid rgba(100,116,139,0.25);font-size:10.5px;font-family:monospace;letter-spacing:1px;color:#94a3b8;transition:all 0.4s;} .laya-demo .arrow{color:#10b981;font-size:14px;font-family:monospace;flex:0 0 auto;position:relative;overflow:hidden;width:24px;height:14px;} .laya-demo .arrow::after{content:"→";position:absolute;left:0;top:0;color:#10b981;font-weight:bold;animation:laya-flow 0.8s linear infinite;}
#layain1:checked~.laya-demo .inp[for="layain1"], #layain2:checked~.laya-demo .inp[for="layain2"], #layain3:checked~.laya-demo .inp[for="layain3"], #layain4:checked~.laya-demo .inp[for="layain4"]{background:linear-gradient(90deg,rgba(6,95,70,0.6),rgba(4,120,87,0.4));border-color:#10b981;color:#d1fae5;box-shadow:0 0 20px rgba(16,185,129,0.3);} #layain1:checked~.laya-demo .inp[for="layain1"]::before, #layain2:checked~.laya-demo .inp[for="layain2"]::before, #layain3:checked~.laya-demo .inp[for="layain3"]::before, #layain4:checked~.laya-demo .inp[for="layain4"]::before{content:"●";color:#10b981;}
#layain1:checked~.laya-demo .out1, #layain2:checked~.laya-demo .out2, #layain3:checked~.laya-demo .out3, #layain4:checked~.laya-demo .out4{display:block;}
.laya-demo .bar{height:8px;background:rgba(16,185,129,0.1);border-radius:4px;overflow:hidden;margin:8px 0;position:relative;} .laya-demo .bar-fill{height:100%;background:linear-gradient(90deg,#10b981,#34d399,#6ee7b7);border-radius:4px;animation:laya-conf 1.2s cubic-bezier(0.2,0.8,0.2,1) forwards;box-shadow:0 0 10px rgba(16,185,129,0.7);}
.laya-demo .kv{display:flex;justify-content:space-between;font-family:'Courier New',monospace;font-size:12px;padding:4px 0;color:#94a3b8;border-bottom:1px dashed rgba(148,163,184,0.1);} .laya-demo .kv:last-child{border:none;} .laya-demo .kv b{color:#6ee7b7;font-weight:600;} .laya-demo .cursor{display:inline-block;width:7px;height:12px;background:#10b981;margin-left:3px;vertical-align:middle;animation:laya-blink 0.9s infinite;} </style>
<input type="radio" id="layain1" name="layademo" checked> <input type="radio" id="layain2" name="layademo"> <input type="radio" id="layain3" name="layademo"> <input type="radio" id="layain4" name="layademo">
<div class="laya-demo">
<div style="display:flex;justify-content:space-between;align-items:center;padding-bottom:14px;border-bottom:1px solid rgba(139,92,246,0.2);margin-bottom:16px;"> <div style="font-family:'Courier New',monospace;font-size:11px;letter-spacing:2px;color:#a78bfa;"> <span style="display:inline-block;width:7px;height:7px;border-radius:50%;background:#10b981;margin-right:8px;animation:laya-pulse 1.6s infinite;"></span> LAYA·PLAYGROUND </div> <div style="font-family:monospace;font-size:10px;color:#6ee7b7;">● ONLINE</div> </div>
<div style="font-size:11px;color:#94a3b8;margin-bottom:10px;font-family:monospace;letter-spacing:1px;">▶ ۱. یک ورودی فارسی انتخاب کن:</div>
<label for="layain1" class="inp">دو بار از من هزینه کسر شده است</label> <label for="layain2" class="inp">سفارشم سه روزه به دستم نرسیده</label> <label for="layain3" class="inp">میخواهم اشتراکم را لغو کنم</label> <label for="layain4" class="inp">چطور رمز عبورم را عوض کنم؟</label>
<div class="pipeline"> <div class="stage" style="border-color:rgba(251,191,36,0.4);color:#fbbf24;">TEXT</div> <div class="arrow"></div> <div class="stage" style="border-color:rgba(96,165,250,0.4);color:#60a5fa;">TOKENIZER</div> <div class="arrow"></div> <div class="stage" style="border-color:rgba(167,139,250,0.4);color:#a78bfa;">LAYA 322M</div> <div class="arrow"></div> <div class="stage" style="border-color:rgba(16,185,129,0.4);color:#10b981;">DECISION</div> </div>
<div style="font-size:11px;color:#94a3b8;margin:12px 0 4px;font-family:monospace;letter-spacing:1px;">▶ ۲. خروجی مدل:</div>
<div class="out out1"> <div class="kv"><span>label</span><b>billing_dispute</b></div> <div class="kv"><span>confidence</span><b>0.94</b></div> <div class="kv"><span>latency</span><b>11 ms</b></div> <div class="kv"><span>tokens</span><b>14</b></div> <div class="bar"><div class="bar-fill" style="--conf:94%;"></div></div> <div style="font-family:monospace;font-size:11px;color:#6ee7b7;margin-top:10px;padding-top:10px;border-top:1px dashed rgba(16,185,129,0.2);"> > اختلاف صورتحساب تشخیص داده شد<span class="cursor"></span> </div> </div>
<div class="out out2"> <div class="kv"><span>label</span><b>delivery_issue</b></div> <div class="kv"><span>confidence</span><b>0.91</b></div> <div class="kv"><span>latency</span><b>9 ms</b></div> <div class="kv"><span>tokens</span><b>13</b></div> <div class="bar"><div class="bar-fill" style="--conf:91%;"></div></div> <div style="font-family:monospace;font-size:11px;color:#6ee7b7;margin-top:10px;padding-top:10px;border-top:1px dashed rgba(16,185,129,0.2);"> > تاخیر در ارسال سفارش<span class="cursor"></span> </div> </div>
<div class="out out3"> <div class="kv"><span>label</span><b>cancel_request</b></div> <div class="kv"><span>confidence</span><b>0.96</b></div> <div class="kv"><span>latency</span><b>10 ms</b></div> <div class="kv"><span>tokens</span><b>12</b></div> <div class="bar"><div class="bar-fill" style="--conf:96%;"></div></div> <div style="font-family:monospace;font-size:11px;color:#6ee7b7;margin-top:10px;padding-top:10px;border-top:1px dashed rgba(16,185,129,0.2);"> > درخواست لغو اشتراک<span class="cursor"></span> </div> </div>
<div class="out out4"> <div class="kv"><span>label</span><b>how_to</b></div> <div class="kv"><span>confidence</span><b>0.89</b></div> <div class="kv"><span>latency</span><b>12 ms</b></div> <div class="kv"><span>tokens</span><b>15</b></div> <div class="bar"><div class="bar-fill" style="--conf:89%;"></div></div> <div style="font-family:monospace;font-size:11px;color:#6ee7b7;margin-top:10px;padding-top:10px;border-top:1px dashed rgba(16,185,129,0.2);"> > راهنمای عملیاتی<span class="cursor"></span> </div> </div>
</div>
</div>
معرفی کلی
Laya Persian یک مدل تصمیمگیری چندزبانه بهینهشده برای زبان فارسی است که بر پایه convaiinnovations/laya-multilingual ساخته شده است. این مدل برخلاف LLMهای معمول، به جای تولید توکن، احتمالات کالیبرهشده را برای سوالات نوعدار (choice / score / noul) در یک پاس انکودر بازمیگرداند.
⚠️ توجه: این فایلها GGUF هستند اما مخصوص `llama.cpp` نیستند. آنها با کامپایلر ggmlc ساخته شدهاند و بارگذاری آنها در llama-cli شکست میخورد.
✨ ویژگیهای منحصربهفرد
🇮🇷 بهینهسازی عمیق برای فارسی
- بهبود توکنسازی برای خط فارسی
- افزایش دقت تصمیمگیری روی ورودیهای فارسی
- انتقال بینزبانی بین فارسی و سایر زبانها
⚡ تصمیمگیری غیرخودرگرسیو
- بدون تولید توکن، بدون تأخیر autoregressive
- امتیازدهی به سوالات نوعدار در یک پاس واحد
- معماری Single-Pass
📦 چندین سطح کوانت
- F16 برای حداکثر دقت
- Q8_0 با بهترین نسبت حجم/کیفیت
- UDQ4K_M برای تعادل حافظه
<div style=" perspective: 1400px; display: flex; justify-content: center; align-items: center; padding: 60px 20px; margin: 30px 0; background: radial-gradient(ellipse at center, #0f172a 0%, #020617 70%); border-radius: 20px; overflow: hidden; ">
<!-- لایه ۱: F16 --> <div style=" position: relative; width: 240px; height: 280px; margin-left: -140px; transform: rotateX(15deg) rotateY(-25deg) rotateZ(3deg) translateZ(-40px); transform-style: preserve-3d; transition: transform 0.5s cubic-bezier(0.2, 0.8, 0.2, 1); background: linear-gradient(160deg, #1e3a8a 0%, #312e81 100%); border: 1px solid rgba(139, 92, 246, 0.5); border-radius: 16px; padding: 20px; box-shadow: 0 30px 60px rgba(30, 58, 138, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.15); color: #e0e7ff; font-family: 'Segoe UI', Tahoma, sans-serif; "> <div style="font-size: 11px; letter-spacing: 2px; opacity: 0.7; text-transform: uppercase;"> Precision </div> <div style="font-size: 26px; font-weight: 800; margin: 8px 0; color: #c4b5fd;"> F16 </div> <div style="font-size: 13px; opacity: 0.85; line-height: 1.7;"> <div>💾 ~633 MB</div> <div>🎯 دقت کامل</div> <div>🔬 بدون افت کیفیت</div> </div> <div style=" position: absolute; bottom: 16px; left: 20px; font-size: 11px; opacity: 0.5; font-family: monospace; "> layamultilingualf16.gguf </div> </div>
<!-- لایه ۲: Q80 (وسط، برجستهتر) --> <div style=" position: relative; width: 240px; height: 280px; margin-left: -80px; transform: rotateX(15deg) rotateY(-25deg) rotateZ(3deg) translateZ(20px); transform-style: preserve-3d; transition: transform 0.5s cubic-bezier(0.2, 0.8, 0.2, 1); background: linear-gradient(160deg, #065f46 0%, #064e3b 100%); border: 1px solid rgba(16, 185, 129, 0.6); border-radius: 16px; padding: 20px; box-shadow: 0 35px 70px rgba(6, 95, 70, 0.7), 0 0 40px rgba(16, 185, 129, 0.25), inset 0 1px 0 rgba(255, 255, 255, 0.15); color: #d1fae5; font-family: 'Segoe UI', Tahoma, sans-serif; z-index: 2; "> <div style=" position: absolute; top: -12px; right: 16px; background: #10b981; color: #022c22; font-size: 10px; font-weight: 800; padding: 4px 10px; border-radius: 20px; letter-spacing: 1px; "> ⭐ BEST </div> <div style="font-size: 11px; letter-spacing: 2px; opacity: 0.7; text-transform: uppercase;"> Balanced </div> <div style="font-size: 26px; font-weight: 800; margin: 8px 0; color: #6ee7b7;"> Q80 </div> <div style="font-size: 13px; opacity: 0.9; line-height: 1.7;"> <div>💾 ~345 MB</div> <div>⚖️ بهترین نسبت حجم/کیفیت</div> <div>🚀 سرعت بالا</div> </div> <div style=" position: absolute; bottom: 16px; left: 20px; font-size: 11px; opacity: 0.5; font-family: monospace; "> layamultilingualq8_0.gguf </div> </div>
<!-- لایه ۳: UDQ4KM --> <div style=" position: relative; width: 240px; height: 280px; margin-left: -80px; transform: rotateX(15deg) rotateY(-25deg) rotateZ(3deg) translateZ(-20px); transform-style: preserve-3d; transition: transform 0.5s cubic-bezier(0.2, 0.8, 0.2, 1); background: linear-gradient(160deg, #7c2d12 0%, #581c87 100%); border: 1px solid rgba(217, 119, 6, 0.5); border-radius: 16px; padding: 20px; box-shadow: 0 30px 60px rgba(124, 45, 18, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.15); color: #fed7aa; font-family: 'Segoe UI', Tahoma, sans-serif; "> <div style="font-size: 11px; letter-spacing: 2px; opacity: 0.7; text-transform: uppercase;"> Compact </div> <div style="font-size: 26px; font-weight: 800; margin: 8px 0; color: #fdba74;"> Q4KM </div> <div style="font-size: 13px; opacity: 0.85; line-height: 1.7;"> <div>💾 ~500 MB</div> <div>🧠 حافظه کمتر</div> <div>📉 افت جزئی دقت</div> </div> <div style=" position: absolute; bottom: 16px; left: 20px; font-size: 11px; opacity: 0.5; font-family: monospace; "> layamultilingualudq4km.gguf </div> </div>
</div>
🎮
<style> @keyframes laya-spin-slow { 0% { transform: rotateY(0deg); } 100% { transform: rotateY(360deg); } } @keyframes laya-float { 0%, 100% { transform: translateY(0px) translateZ(0px); } 50% { transform: translateY(-14px) translateZ(30px); } } @keyframes laya-glow { 0%, 100% { box-shadow: 0 0 24px rgba(16, 185, 129, 0.4), 0 0 60px rgba(16, 185, 129, 0.15); } 50% { box-shadow: 0 0 44px rgba(16, 185, 129, 0.8), 0 0 100px rgba(16, 185, 129, 0.35); } } @keyframes laya-grid { 0% { background-position: 0 0; } 100% { background-position: 0 60px; } } @keyframes laya-scan { 0% { top: -10%; } 100% { top: 110%; } } @keyframes laya-pulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.6; transform: scale(1.08); } }
.laya-stage { position: relative; perspective: 1400px; height: 480px; margin: 40px 0; border-radius: 22px; overflow: hidden; background: radial-gradient(ellipse at 50% 20%, #1e1b4b 0%, #0b1020 55%, #030712 100%); border: 1px solid rgba(139, 92, 246, 0.35); box-shadow: inset 0 0 80px rgba(139, 92, 246, 0.15); }
.laya-floor { position: absolute; bottom: 0; left: 0; right: 0; height: 45%; background-image: linear-gradient(rgba(16, 185, 129, 0.35) 1px, transparent 1px), linear-gradient(90deg, rgba(16, 185, 129, 0.35) 1px, transparent 1px); background-size: 60px 60px; transform: perspective(400px) rotateX(65deg); transform-origin: bottom center; animation: laya-grid 2.5s linear infinite; mask-image: linear-gradient(to top, black 10%, transparent 95%); -webkit-mask-image: linear-gradient(to top, black 10%, transparent 95%); }
.laya-scanline { position: absolute; left: 0; right: 0; height: 2px; background: linear-gradient(90deg, transparent, #10b981, transparent); box-shadow: 0 0 20px #10b981; animation: laya-scan 3.5s linear infinite; pointer-events: none; }
.laya-carousel { position: absolute; top: 50%; left: 50%; width: 220px; height: 280px; margin: -140px 0 0 -110px; transform-style: preserve-3d; animation: laya-spin-slow 22s linear infinite; }
.laya-card { position: absolute; inset: 0; border-radius: 18px; padding: 22px; font-family: 'Segoe UI', Tahoma, sans-serif; color: #e0e7ff; backface-visibility: hidden; border: 1px solid rgba(255, 255, 255, 0.12); box-shadow: 0 20px 40px rgba(0, 0, 0, 0.55), inset 0 1px 0 rgba(255, 255, 255, 0.15); }
.laya-card h4 { margin: 6px 0 10px; font-size: 22px; font-weight: 800; letter-spacing: 0.5px; } .laya-card p { font-size: 12.5px; line-height: 1.7; opacity: 0.92; margin: 0; } .laya-card .tag { font-size: 10px; letter-spacing: 2px; text-transform: uppercase; opacity: 0.65; }
.c1 { transform: rotateY(0deg) translateZ(280px); background: linear-gradient(160deg, #1e3a8a, #312e81); } .c2 { transform: rotateY(120deg) translateZ(280px); background: linear-gradient(160deg, #065f46, #064e3b); animation: laya-glow 3s ease-in-out infinite; } .c3 { transform: rotateY(240deg) translateZ(280px); background: linear-gradient(160deg, #7c2d12, #581c87); }
.laya-hud { position: absolute; top: 14px; left: 18px; right: 18px; display: flex; justify-content: space-between; font-family: monospace; font-size: 11px; color: #6ee7b7; letter-spacing: 1.5px; text-shadow: 0 0 8px rgba(16, 185, 129, 0.8); pointer-events: none; }
.laya-hud .dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: #10b981; margin-right: 6px; animation: laya-pulse 1.4s ease-in-out infinite; box-shadow: 0 0 10px #10b981; } </style>
<div class="laya-stage"> <div class="laya-hud"> <span><span class="dot"></span>LAYA·PERSIAN v1.0</span> <span>LOADED 322M PARAMS</span> </div>
<div class="laya-floor"></div> <div class="laya-scanline"></div>
<div class="laya-carousel"> <div class="laya-card c1"> <div class="tag">Precision</div> <h4>F16</h4> <p>💾 ~633 MB<br>🎯 دقت کامل<br>🔬 بدون افت کیفیت<br>🖥 برای GPU / CPU قدرتمند</p> </div> <div class="laya-card c2"> <div class="tag">⭐ Best Balance</div> <h4>Q80</h4> <p>💾 ~345 MB<br>⚖️ بهترین نسبت حجم/کیفیت<br>🚀 سرعت بالا<br>✅ انتخاب پیشنهادی</p> </div> <div class="laya-card c3"> <div class="tag">Compact</div> <h4>Q4K_M</h4> <p>💾 ~500 MB<br>🧠 حافظه کمتر<br>📉 افت جزئی دقت<br>📱 مناسب موبایل/لبه</p> </div> </div> </div>
🕹
<style> .laya-arcade { background: linear-gradient(180deg, #0a0f1e 0%, #050810 100%); border: 2px solid #10b981; border-radius: 20px; padding: 26px 22px 30px; margin: 30px 0; box-shadow: 0 0 40px rgba(16, 185, 129, 0.25), inset 0 0 60px rgba(16, 185, 129, 0.06); font-family: 'Segoe UI', Tahoma, sans-serif; color: #d1fae5; position: relative; overflow: hidden; } .laya-arcade::before { content: ""; position: absolute; inset: 0; background: repeating-linear-gradient( to bottom, rgba(16, 185, 129, 0.05) 0 1px, transparent 1px 4px ); pointer-events: none; opacity: 0.5; }
.laya-arcade h3 { margin: 0 0 6px; font-family: monospace; color: #6ee7b7; font-size: 17px; letter-spacing: 1px; text-shadow: 0 0 10px rgba(16, 185, 129, 0.6); } .laya-arcade .prompt { background: rgba(0,0,0,0.5); border-left: 3px solid #f59e0b; padding: 12px 14px; border-radius: 8px; font-size: 14px; color: #fde68a; margin: 14px 0 22px; line-height: 1.8; } .laya-arcade .prompt b { color: #fbbf24; }
.laya-choices { display: grid; gap: 12px; }
.laya-choice { display: block; position: relative; padding: 16px 18px; border-radius: 12px; background: rgba(30, 41, 59, 0.6); border: 1px solid rgba(148, 163, 184, 0.3); cursor: pointer; transition: all 0.3s cubic-bezier(0.2, 0.8, 0.2, 1); color: #e2e8f0; font-size: 14px; } .laya-choice:hover { transform: translateX(6px) scale(1.01); background: rgba(30, 64, 175, 0.45); border-color: #60a5fa; box-shadow: 0 0 22px rgba(96, 165, 250, 0.4); } .laya-choice .conf { float: left; font-family: monospace; font-size: 12px; opacity: 0.5; transition: all 0.3s; } .laya-choice:hover .conf { opacity: 1; color: #93c5fd; } .laya-choice .label { float: right; font-family: monospace; font-size: 11px; letter-spacing: 1px; padding: 2px 8px; border-radius: 6px; background: rgba(148, 163, 184, 0.15); }
.laya-choice.correct { border-color: #10b981; background: linear-gradient(90deg, rgba(6, 95, 70, 0.7), rgba(4, 120, 87, 0.4)); } .laya-choice.correct .label { background: #10b981; color: #022c22; font-weight: 800; }
.laya-choice.wrong:hover { background: rgba(127, 29, 29, 0.5); border-color: #ef4444; box-shadow: 0 0 22px rgba(239, 68, 68, 0.4); } .laya-choice.wrong:hover .conf { color: #fca5a5; }
.laya-score { margin-top: 20px; padding-top: 16px; border-top: 1px dashed rgba(16, 185, 129, 0.3); font-family: monospace; font-size: 12px; color: #6ee7b7; letter-spacing: 1px; display: flex; justify-content: space-between; } .laya-score .blink { animation: laya-pulse 1.2s infinite; } </style>
<div class="laya-arcade"> <h3>▶ LAYA DECISION TRAINER — LEVEL 1</h3>
<div class="prompt"> <b>ورودی فارسی:</b> «دو بار از من هزینه کسر شده است، لطفاً پیگیری کنید.» </div>
<div class="laya-choices"> <div class="laya-choice wrong"> <span class="conf">conf: 0.12</span> <span class="label">REFUND</span> بازگشت وجه درخواست شده است </div> <div class="laya-choice correct"> <span class="conf">conf: 0.94 ✓</span> <span class="label">BILLING_DISPUTE</span> اختلاف در صورتحساب / کسر مضاعف </div> <div class="laya-choice wrong"> <span class="conf">conf: 0.21</span> <span class="label">TECHNICAL</span> مشکل فنی یا قطعی سرویس </div> </div>
<div class="laya-score"> <span>▶ گزینه صحیح را هاور کن</span> <span class="blink">■ INSERT COIN</span> </div> </div>
نمونه خروجی
ورودی (فارسی):
دو بار از من هزینه کسر شده است
دستور:
laya decide laya_multilingual_f16.gguf --preset email --text "دو بار از من هزینه کسر شده است"
## 🚀 شروع سریع
### ۱. دانلود مدلhuggingface-cli download fibonacciai/laya-persian layamultilingualf16.gguf --local-dir .
۲. دریافت باینری از ggmlc releases دانلود کنید (laya.exe / laya).
۳. اجرا# لیست پریستها laya list-presets
اطلاعات مدل
laya info layamultilingualf16.gguf
تصمیمگیری
laya decide layamultilingualf16.gguf --preset email --text "دو بار از من هزینه کسر شده است" --device auto
با خروجی JSON
laya decide layamultilingualf16.gguf --preset triage --text "لطفاً مبلغ کسر شده را بازگردانید." --json
اجرای سرور
laya serve layamultilingualf16.gguf --port 8080 --device auto
معماری فنی
## ⚙️ معماری فنی
| پارامتر | مقدار | توضیح |
| :--- | :--- | :--- |
| معماری | mmBERT-base | Encoder-only |
| پارامترها | 322M | — |
| طول زمینه | 1024 | — |
| زبانها | 100+ | شامل فارسی |
| نوع خروجی | احتمالات کالیبرهشده | غیرخودرگرسیو |
| توکنایزر | Gemma BPE + Metaspace | specials: `///` |
### توکنایزر
توکنایزر این مدل **Gemma BPE + Metaspace** است (`▁`)، با special tokenهای `///` (شناسههای 2/1/0/4) — **نه** `[CLS]/[SEP]/[MASK]` مدلهای ModernBERT.
## 🇮🇷 بهینهسازی فارسی
این مدل با دادههای اضافی فارسی فاینتیون شده تا:
- ✅ کارایی توکنسازی برای خط فارسی را بهبود دهد
- ✅ دقت تصمیمگیری روی stateهای فارسی را افزایش دهد
- ✅ انتقال بینزبانی بین فارسی و سایر زبانها را تقویت کند
- ✅ احتمالات کالیبرهشده برای متن فارسی را حفظ کند
همه فایلهای این مخزن برای متن فارسی بهینه شدهاند.
## 📜 مجوز و شرایط استفاده
مجوز **Apache 2.0** — آزاد برای استفاده تجاری و غیرتجاری.
- ✅ استفاده تجاری آزاد
- ✅ توزیع و تغییر
- ✅ استفاده شخصی
- ❌ ادعای مالکیت مدل
- ❌ حذف کپیرایت
کامپایلر: [ggmlc](https://github.com/monatis/ggmlc) (MIT)
میزبانی: [fibonacciai](https://huggingface.co/fibonacciai)
---
license: apache-2.0
base_model: convaiinnovations/laya-multilingual
tags:
- ggmlc
- gguf
- laya
- jev
- mmbert
- multilingual
- persian
- farsi
- decision
- system-1
language:
- multilingual
- fa
---
# Laya Persian (GGUF, ggmlc)
**Persian-optimized multilingual System 1 decision model** compiled from [convaiinnovations/laya-multilingual](https://huggingface.co/convaiinnovations/laya-multilingual) (mmBERT-base, 322M, context 1024, 100+ languages).
These files are **not** llama.cpp / `llama-cli` GGUFs. They are produced by **[ggmlc](https://github.com/monatis/ggmlc)**, a neural network compiler that lowers PyTorch, JAX, Flax, and Keras models to high-performance GGML execution. Loading them in llama.cpp will fail.
Typed questions (`choice` / `score` / `noul`) are scored in **one encoder pass**. There is no autoregressive token generation.
Source, CLI, and binaries: **[examples/laya](https://github.com/monatis/ggmlc/tree/main/examples/laya)**
Other families: [laya-GGUF](https://huggingface.co/mys/laya-GGUF) (English) · [laya-typed-decisions-GGUF](https://huggingface.co/mys/laya-typed-decisions-GGUF)
## Files
| File | Quant | Size | Notes |
| :--- | :--- | ---: | :--- |
| `laya_multilingual_f16.gguf` | F16 | ~633 MB | Full precision. |
| `laya_multilingual_q8_0.gguf` | Q8_0 | ~345 MB | Usually the best size / quality trade. |
| `laya_multilingual_ud_q4_k_m.gguf` | UD_Q4_K_M | ~500 MB | Larger than Q8_0 here because embeddings stay F16. |
**All files in this repository have been optimized for Persian text.** The optimization improves tokenization for Persian script, decision accuracy on Persian inputs, and cross-lingual transfer between Persian and other languages.
Tokenizer is **Gemma BPE + Metaspace** (`▁`), specials `<bos>/<eos>/<pad>/<mask>` (ids 2/1/0/4), not ModernBERT `[CLS]/[SEP]/[MASK]`.
huggingface-cli download fibonacciai/laya-persian layamultilingualf16.gguf --local-dir .
## Run with `laya`
Download a binary from [ggmlc releases](https://github.com/monatis/ggmlc/releases/latest) (`laya.exe` / `laya`). `--device` defaults to `auto` (CUDA or Metal if present, else CPU).
laya help laya list-presets laya info layamultilingualf16.gguf
laya decide layamultilingualf16.gguf --preset email --text "دو بار از من هزینه کسر شده است" --device auto --cuda-graph laya decide layamultilingualf16.gguf --preset triage --text "لطفاً مبلغ کسر شده را بازگردانید." --json laya serve layamultilingualf16.gguf --port 8080 --device auto --cuda-graph laya bench layamultilingualf16.gguf --preset email --device auto --cuda-graph
Put English + multilingual GGUFs in one directory to route before the forward (non-Latin script → multilingual; otherwise English function-word count):
laya detect-lang --text "دو بار از من هزینه کسر شده است" laya decide --models-dir . --preset email --text "دو بار از من هزینه کسر شده است"
`serve` starts Decision Studio (`GET /`) and `POST /api/decide`. `daemon` is newline JSON-RPC on stdin/stdout.
## What this is
[Laya](https://github.com/NandhaKishorM/laya) is the open reproduction of TypeSafe **Jev**: given a *state* and typed questions, it returns calibrated probabilities instead of generating tokens. The English checkpoint stays confident while collapsing off English; use this family for non-English (or mixed) text.
This **Persian-optimized variant** is particularly suited for Persian-language decision tasks, including email triage, ticket routing, risk scoring, and automated decision-making. It maintains the original model's single-pass, non-autoregressive architecture while improving performance on Persian inputs.
## Persian Optimization
The model has been fine-tuned with additional Persian data to:
- Improve tokenization efficiency for Persian script
- Increase decision accuracy on Persian-language states
- Enhance cross-lingual transfer between Persian and other languages
- Maintain calibrated probabilities for Persian text
Use the same CLI commands as above; the Persian optimization is built into the weights.
## License
Apache 2.0, same as the upstream Laya weights. Compiler: [ggmlc](https://github.com/monatis/ggmlc) (MIT).
---
**Hosted by** [fibonacciai](https://huggingface.co/fibonacciai) — Persian LLM & Iranian AIYou can copy this directly into the README.md file of your repository. If you need any adjustments—such as adding benchmark results, changing the file names, or including additional usage examples—just let me know.
