মূল কনটেন্টে যান
এআই টিউটোরিয়াল

Rizzo Flow দিয়ে দ্রুত, টাইপযুক্ত স্থানীয় LLM সিদ্ধান্ত তৈরি করুন

Rizzo Flow কীভাবে ইনস্টল করতে হয়, এর স্থানীয় llama.cpp সার্ভার চালাতে হয় এবং টাইপযুক্ত বুলিয়ান, পছন্দ, স্কোর ও সংখ্যাসূচক সিদ্ধান্ত পেতে হয় তা জানুন। এই টিউটোরিয়ালে প্লেগ্রাউন্ড, নেটিভ ও Jev-সামঞ্জস্যপূর্ণ API, হার্ডওয়্যার বিকল্প, সিদ্ধান্ত না দেওয়ার সুবিধা, ব্যাচিং, কনটেক্সট সীমা, নিরাপত্তা এবং ব্যবহারিক কর্মক্ষমতার গুরুত্বপূর্ণ বিষয়গুলো আলোচনা করা হয়েছে।

Rizzo Flow দিয়ে দ্রুত, টাইপযুক্ত স্থানীয় LLM সিদ্ধান্ত তৈরি করুন

Rizzo Flow কী?

Rizzo Flow একটি ওপেন-সোর্স, লোকাল-ফার্স্ট সিস্টেম, যা অসংগঠিত টেক্সট বা JSON স্টেটকে সম্ভাবনাসহ টাইপযুক্ত সিদ্ধান্তে রূপান্তর করে। কোনো ভাষা মডেলকে টোকেন ধরে ধরে গদ্য বা JSON তৈরি করতে বলার পরিবর্তে, এটি একটি ফরোয়ার্ড পাসের পর সীমাবদ্ধ উত্তর-অক্ষরগুলোর জন্য মডেলের সম্ভাবনা পড়ে।

এই নকশা নিম্নলিখিত ধরনের সিদ্ধান্ত সমর্থন করে:

  • true-এর সম্ভাবনাসহ একটি বুলিয়ান উত্তর।
  • নামযুক্ত বিকল্পগুলোর মধ্যে একটি নির্বাচন, যেখানে প্রতিটি বিকল্পের জন্য একটি সম্ভাবনা থাকে।
  • ক্রমিক রুব্রিক স্তরজুড়ে একটি স্কোর।
  • প্রতিনিধিত্বমূলক অ্যাঙ্করের ভিত্তিতে একটি সংখ্যাগত অনুমান।

Rizzo Flow আপনার নিজস্ব হার্ডওয়্যারে llama.cpp-এর মাধ্যমে চলে। এটি Apple Metal, NVIDIA CUDA, Vulkan, AMD ROCm, Intel SYCL বা CPU এক্সিকিউশন ব্যবহার করতে পারে। এটি Jev-সামঞ্জস্যপূর্ণ একটি HTTP ইন্টারফেসও দেয়, যার ফলে সামঞ্জস্যপূর্ণ অ্যাপ্লিকেশনগুলো হোস্টেড সার্ভিসের পরিবর্তে একটি লোকাল URL-কে লক্ষ্য করতে পারে।

Rizzo Flow প্রকল্পের লোগো

Rizzo Flow একটি স্বাধীন প্রকল্প। এটি Jev-এর পেছনের ইন্টারফেস প্যাটার্ন পুনরুৎপাদন করে, Jev-এর মালিকানাধীন আর্কিটেকচার বা প্রশিক্ষণ নয়। আপনি নিজস্ব প্রতিনিধিত্বমূলক ডেটায় ক্যালিব্রেট না করলে এর সম্ভাবনাগুলো ক্যালিব্রেটেড নয়।

জিরো-টোকেন সিদ্ধান্ত কীভাবে কাজ করে

প্রতিটি অনুরোধের জন্য Rizzo Flow প্রম্পটের শুরুতে স্টেট বসিয়ে সেটি একবার প্রক্রিয়া করে। এরপর শেয়ার করা স্টেট ক্যাশ থেকে প্রশ্নগুলোর শাখা তৈরি হয়। প্রতিটি সম্ভাব্য উত্তর একটি বড় হাতের অক্ষরের সঙ্গে ম্যাপ করা হয়, এবং সিস্টেম অনুমোদিত অক্ষরগুলোর জন্য শুধু লগিট পড়ে।

  1. স্টেটকে টেক্সটে রূপান্তর করে মডেলের KV ক্যাশে প্রিফিল করা হয়।
  2. প্রতিটি প্রশ্নকে একটি সীমাবদ্ধ মাল্টিপল-চয়েস সমস্যা হিসেবে উপস্থাপন করা হয়।
  3. একই স্টেট শেয়ার করা প্রশ্নগুলো মাইক্রো-ব্যাচে মূল্যায়ন করা হয়।
  4. অনুমোদিত উত্তর লগিটগুলোকে softmax-এর মাধ্যমে সম্ভাবনায় রূপান্তর করা হয়।
  5. Python কোড স্কিমা-ভ্যালিডেটেড বুলিয়ান, চয়েস, স্কোর বা সংখ্যাগত ডেটা ফেরত দেয়।

এখানে কোনো ডিকোডিং লুপ, স্যাম্পল করা টেক্সট, আউটপুট পার্সিং বা JSON মেরামত নেই। তবে শূন্য জেনারেটেড টোকেন মানে শূন্য কম্পিউটেশন নয়: স্টেট এবং প্রশ্নের প্রম্পটের জন্য এখনও মডেল ইনফারেন্স প্রয়োজন।

প্রধান বৈশিষ্ট্য

  • সম্পূর্ণ লোকাল অপারেশন: মডেল ইনফারেন্স আপনার মেশিনেই ঘটে।
  • টাইপযুক্ত ফলাফল: অ্যাপ্লিকেশনগুলো জেনারেট করা গদ্যের পরিবর্তে কাঠামোবদ্ধ মান পায়।
  • সম্ভাবনা বিতরণ: চয়েস ও স্কোর ফলাফলে শুধু আর্গম্যাক্স উত্তর নয়, সম্ভাবনাও প্রকাশ করা হয়।
  • চারটি নেটিভ প্রিমিটিভ: বুলিয়ান, চয়েস, স্কোর এবং সংখ্যাগত।
  • ঐচ্ছিক বিরত থাকা: নেটিভ API অপর্যাপ্ত প্রমাণ, অনিশ্চয়তা বা সীমার বাইরের সংখ্যাগত ফলাফল জানাতে পারে।
  • শেয়ার করা স্টেট ব্যাচিং: একটি অনুরোধের একাধিক প্রশ্ন স্টেটের KV ক্যাশ পুনরায় ব্যবহার করে।
  • Jev-সামঞ্জস্যপূর্ণ এন্ডপয়েন্ট: বিদ্যমান ক্লায়েন্টগুলো /v1/systemone এবং /v1/models ব্যবহার করতে পারে।
  • দীর্ঘ-কনটেক্সট মডেল: Spark-X2.5 সর্বোচ্চ 1,048,576 টোকেনের নেটিভ কনটেক্সট সমর্থন করে, যদিও Rizzo Flow প্রতি প্রশ্নে ডিফল্টভাবে 8,192 টোকেন ব্যবহার করে।
  • লোকাল টুল: সার্ভারে একটি প্লেগ্রাউন্ড, ইন্টার‌্যাক্টিভ OpenAPI ডকুমেন্টেশন এবং একটি Snake ডেমো রয়েছে।

পূর্বশর্ত

Rizzo Flow ইনস্টল করার আগে নিশ্চিত করুন যে আপনার কাছে রয়েছে:

  • Python 3.11 বা তার পরের সংস্করণ।
  • Git।
  • নির্ভরতা ও পরিবেশ ব্যবস্থাপনার জন্য uv।
  • নির্বাচিত মডেল ও রানটাইমের জন্য পর্যাপ্ত ডিস্ক স্পেস।

ডিফল্ট Spark-X2.5-4B Q8_0 মডেল ডাউনলোডের আকার প্রায় 4.4 GB। প্ল্যাটফর্মভেদে রানটাইম ডাউনলোডের আকার পরিবর্তিত হয়: Mac-এ প্রায় 11 MB থেকে CUDA প্যাকেজের জন্য প্রায় 570 MB পর্যন্ত।

সার্ভার ইনস্টল ও চালু করুন

রিপোজিটরি ক্লোন করুন, নির্দিষ্ট করা নির্ভরতাগুলো সিঙ্ক্রোনাইজ করুন, ডিফল্ট রানটাইম ও মডেল ডাউনলোড করুন এবং সার্ভিস চালু করুন:

git clone https://github.com/Rizzo-AI-Academy/rizzo-flow
cd rizzo-flow
uv sync --locked
uv run rizzo download
uv run rizzo serve

ডাউনলোড কমান্ডটি বর্তমান মেশিনের জন্য একটি অফিসিয়াল প্রিবিল্ট llama.cpp প্যাকেজ নির্বাচন করে, এর SHA-256 চেকসাম যাচাই করে এবং Spark-X2.5-4B Q8_0 ডাউনলোড করে। বাধাগ্রস্ত ডাউনলোড যেখানে থেমেছিল সেখান থেকে আবার চালু করা যায়।

প্রকল্পের ডকুমেন্টেশন অনুযায়ী, মডেল লোড হতে প্রায় দশ সেকেন্ড সময় লাগে। সার্ভিস প্রস্তুত হলে খুলুন:

Rizzo Flow-এর লোকাল সিদ্ধান্ত প্লেগ্রাউন্ড

প্লেগ্রাউন্ডে প্রস্তুত উদাহরণ, একটি প্রশ্ন বিল্ডার, উভয় API-এর জন্য কাঁচা JSON এডিটর, সম্ভাবনা বার, সময়সংক্রান্ত তথ্য এবং সমতুল্য cURL কমান্ড রয়েছে। এটি কোনো বাহ্যিক কল করে না এবং English ও Italian-এর মধ্যে পরিবর্তন করা যায়।

ছোট মডেল ব্যবহার করুন

দ্রুত প্রথম ডাউনলোডের জন্য 1.7B মডেল ইনস্টল করুন:

uv run rizzo download --size 1.7b
uv run rizzo serve --size 1.7b

1.7B Q8_0 ফাইলটির আকার আনুমানিক 1.8 GB এবং এটি প্রায় দ্বিগুণ দ্রুত চলে, তবে README-তে সতর্ক করা হয়েছে যে এটি অনেক কম নির্ভুল। বিরত থাকার সুবিধা সক্রিয় থাকলে এটি অপর্যাপ্ত-প্রমাণ বিকল্পটি বেছে নেওয়ার প্রবণতাও দেখায়, তাই নিজের কাজের চাপের ওপর এটি সতর্কতার সঙ্গে পরীক্ষা করুন।

আপনার প্রথম সিদ্ধান্ত নিন

সবচেয়ে দ্রুত API পরীক্ষা Jev-সামঞ্জস্যপূর্ণ POST /v1/systemone এন্ডপয়েন্ট ব্যবহার করে করা যায়। নিচের অনুরোধটি জানতে চায়, একটি সহায়তা বার্তায় জরুরি পরিস্থিতি বোঝানো হয়েছে কি না:

curl http://127.0.0.1:8017/v1/systemone \
  -H 'Content-Type: application/json' \
  -d '{
    "state": "Help! My payouts have been failing for 3 days.",
    "model": "rizzo-latest",
    "questions": {
      "is_urgent": {
        "type": "noul",
        "instructions": "Does this convey urgency?"
      }
    }
  }'

noul ফলাফলটি হ্যাঁ-এর সম্ভাবনা, যা শূন্য থেকে এক পর্যন্ত একটি সংখ্যা হিসেবে প্রকাশ করা হয়। অনুরোধে rizzo-latest বা কোনো সুবিধাজনক অ্যালিয়াস ব্যবহার করা হলেও, প্রতিক্রিয়ায় প্রকৃত স্থানীয় মডেল শনাক্তকারী জানানো হয়।

একটি অনুরোধে একাধিক প্রশ্ন করুন

Rizzo Flow একই অবস্থার ওপর একাধিক প্রশ্ন মূল্যায়নের জন্য তৈরি। একটি অনুরোধে প্রশ্নগুলো একত্র করলে তারা অবস্থাটির KV ক্যাশ ভাগ করে নিতে পারে:

curl http://127.0.0.1:8017/v1/systemone \
  -H 'Content-Type: application/json' \
  -d '{
    "state": "Help! My payouts have been failing for 3 days.",
    "model": "rizzo-latest",
    "questions": {
      "is_urgent": {
        "type": "noul",
        "instructions": "Does this convey urgency?"
      },
      "department": {
        "type": "choice",
        "instructions": "Which team should handle this?",
        "criteria": {
          "billing": "Payments, invoicing, refunds",
          "technical": "Bugs and outages",
          "sales": null
        }
      },
      "frustration": {
        "type": "score",
        "instructions": "How frustrated is the customer?",
        "criteria": ["Calm", "Frustrated", "Very angry"]
      }
    }
  }'

প্রতিক্রিয়ায় noul-এর জন্য হ্যাঁ-এর সম্ভাবনা, সব পছন্দের বিকল্পের সম্ভাবনা এবং তার লেজেন্ডসহ সম্ভাবনা-ভারযুক্ত স্কোর থাকে। usage.output_tokens-এর মান সবসময় শূন্য।

নেটিভ সিদ্ধান্ত API ব্যবহার করুন

নেটিভ POST /v1/decisions এন্ডপয়েন্টটি Rizzo Flow-এর সম্পূর্ণ বৈশিষ্ট্যসমষ্টি প্রকাশ করে, যার মধ্যে সংখ্যাগত প্রশ্ন এবং বিরত থাকার সুবিধাও রয়েছে। এর চারটি প্রশ্নের ধরন হলো:

  • boolean: একটি টাইপযুক্ত মান এবং true হওয়ার সম্ভাবনা ফেরত দেয়।
  • choice: নির্বাচিত বিকল্প এবং সব বিকল্পের সম্পূর্ণ বণ্টন ফেরত দেয়।
  • score: ক্রমবদ্ধ স্তরগুলোর সম্ভাবনা-ভারযুক্ত ও স্বাভাবিকীকৃত স্কোর ফেরত দেয়।
  • numeric: একটি আনুমানিক মান, মধ্যমা, বিস্তার এবং সীমার নিচে বা ওপরে থাকার সম্ভাবনা ফেরত দেয়।

অ্যাঙ্কর থেকে একটি সংখ্যাগত মান অনুমান করুন

একটি সংখ্যাগত প্রশ্নে ক্রমবর্ধমান প্রতিনিধিত্বশীল অ্যাঙ্কর নির্ধারণ করা হয়। এই উদাহরণে মডেলকে রিপোর্ট করা পূরণের শতাংশ পড়তে বলা হয়েছে:

curl http://127.0.0.1:8017/v1/decisions \
  -H 'Content-Type: application/json' \
  -d '{
    "state": {"measurement": 75, "unit": "percent"},
    "questions": {
      "fill": {
        "type": "numeric",
        "instructions": "Read the reported fill percentage.",
        "unit": "percent",
        "anchors": [
          {"value": 0, "description": "Empty"},
          {"value": 50, "description": "Half full"},
          {"value": 75, "description": "Three quarters full"},
          {"value": 100, "description": "Completely full"}
        ]
      }
    }
  }'

অ্যাঙ্করগুলো পরিসংখ্যানগত অন্তর নয়, প্রতিনিধিত্বশীল মান। রিপোর্ট করা গড় সর্বনিম্ন ও সর্বোচ্চ অ্যাঙ্করের মধ্যে থাকে, আর কোয়ান্টাইলগুলো ওই অ্যাঙ্করগুলোর ওপর গঠিত বিচ্ছিন্ন সম্ভাবনা বণ্টন বর্ণনা করে।

বিরত থাকার সুবিধা বুঝুন

নেটিভ প্রশ্নগুলোতে ডিফল্টভাবে বিরত থাকার সুবিধা সক্রিয় থাকে। Rizzo Flow অভ্যন্তরীণভাবে অপর্যাপ্ত-প্রমাণের একটি বিকল্প যোগ করে, আর সংখ্যাগত প্রশ্নে সীমার নিচে ও সীমার ওপরে থাকার সম্ভাবনাও থাকে। নির্বাচিত বিকল্প ও নীতির ওপর নির্ভর করে প্রাথমিক মান null হতে পারে এবং স্ট্যাটাসে insufficient_evidence, out_of_range বা uncertain জানানো হতে পারে।

Jev-সামঞ্জস্যপূর্ণ ফরম্যাটে বিরত থাকার সুবিধা নেই। এর হ্যাঁ/না ফলাফল ঠিক দুটি বিকল্পের ওপর গণনা করা হয়। নেটিভ API-এর মাধ্যমে ছোট 1.7B মডেল ব্যবহার করলে, প্রকল্পের সুপারিশ অনুযায়ী allow_abstain কে false সেট করার কথা বিবেচনা করুন এবং আপনার ডেটায় এর প্রভাব যাচাই করুন।

সার্ভার ছাড়াই সিদ্ধান্ত চালান

স্ক্রিপ্ট, পরীক্ষা বা এককালীন মূল্যায়নের জন্য সরাসরি CLI-তে একটি অনুরোধ ফাইল দিন:

uv run rizzo decide examples/ticket.json

আপনি ভার্চুয়াল এনভায়রনমেন্ট সক্রিয় করে uv run প্রিফিক্স বাদও দিতে পারেন:

source .venv/bin/activate
rizzo decide examples/ticket.json

PowerShell-এ এটি সক্রিয় করতে চালান:

.venv\Scripts\activate

মডেল, কোয়ান্টাইজেশন ও ডিভাইস নির্বাচন করুন

ডিফল্ট কনফিগারেশনে Spark-X2.5-4B Q8_0 ব্যবহার করা হয়। নথিভুক্ত অন্যান্য কোয়ান্টাইজেশন হলো Q4_K_M এবং BF16:

  • 4B Q8_0: আনুমানিক 4.4 GB এবং ডিফল্ট কনফিগারেশন।
  • 4B Q4_K_M: আনুমানিক 2.6 GB।
  • 4B BF16: আনুমানিক 8.2 GB।
  • 1.7B Q8_0: আনুমানিক 1.8 GB।
  • 1.7B Q4_K_M: আনুমানিক 1.1 GB।
  • 1.7B BF16: আনুমানিক 3.4 GB।

সার্ভার চালু করার আগে রানটাইমে দৃশ্যমান ডিভাইসগুলো দেখুন:

uv run rizzo devices

এরপর আপনি নির্দিষ্টভাবে একটি ডিভাইস পরিবার নির্বাচন করতে পারেন:

uv run rizzo serve --device cuda
uv run rizzo serve --device vulkan
uv run rizzo serve --device metal
uv run rizzo serve --device cpu

নামযুক্ত ডিভাইস পরিবারগুলো ইঙ্গিত নয়, বরং আবশ্যিক শর্ত। তাই Rizzo Flow স্পষ্টভাবে নির্দিষ্ট কোনো GPU পরিবারকে নীরবে CPU-তে নামিয়ে দেয় না। অতিরিক্ত রানটাইম প্যাকেজ আলাদাভাবে ডাউনলোড করা যায়:

uv run rizzo download --only runtime --runtime rocm
uv run rizzo download --only runtime --runtime sycl
uv run rizzo download --only runtime --runtime cpu

উন্নত কনফিগারেশন ও ব্যবহারিক পরামর্শ

সম্পর্কিত প্রশ্ন একসঙ্গে ব্যাচ করুন

একই স্টেট সম্পর্কিত সব প্রশ্ন একটি অনুরোধে রাখুন। এটি Rizzo Flow-এর নকশার একটি কেন্দ্রীয় দিক: স্টেট একবার প্রিফিল করা হয় এবং প্রশ্নের সাফিক্স মাইক্রো-ব্যাচে মূল্যায়ন করা হয়। প্রশ্নের ডিফল্ট মাইক্রো-ব্যাচ আকার চার এবং --batch-size দিয়ে এটি পরিবর্তন করা যায়।

uv run rizzo serve --batch-size 8

বড় ব্যাচ স্বয়ংক্রিয়ভাবে ভালো নয়। লক্ষ্য মেশিনে লেটেন্সি ও মেমরি ব্যবহার তুলনা করুন।

সতর্কতার সঙ্গে কনটেক্সট বাড়ান

যদিও Spark-X2.5-এর নেটিভ এক মিলিয়ন-টোকেন কনটেক্সট রয়েছে, সার্ভার প্রতি প্রশ্নে ডিফল্টভাবে ৮,১৯২ টোকেন ব্যবহার করে। --ctx দিয়ে সীমা বাড়ান:

uv run rizzo serve --ctx 32768

KV ক্যাশ স্টার্টআপের সময় বরাদ্দ করা হয়। 4B মডেলের জন্য README-তে প্রতি টোকেনে প্রায় ১৪৪ KiB, অর্থাৎ ডিফল্ট সীমায় আনুমানিক ১.৪ GiB এবং ৩২,০০০ টোকেনে ৪.৮ GiB হিসাব করা হয়েছে। কনফিগার করা সীমা ছাড়িয়ে যাওয়া ইনপুট কেটে ছোট করা হয় না, বরং প্রত্যাখ্যাত হয়। আনুমানিক ৬০,০০০ টোকেনের পর schema.py-তে থাকা রিপোজিটরির ২৫৬ KB স্টেট সীমাও বাড়াতে হবে।

সামঞ্জস্যপূর্ণ এন্ডপয়েন্ট সুরক্ষিত করুন

সার্ভার চালু করার আগে RIZZO_API_KEY সেট করুন, যাতে Jev-সামঞ্জস্যপূর্ণ এন্ডপয়েন্টগুলোতে Bearer প্রমাণীকরণ বাধ্যতামূলক হয়:

export RIZZO_API_KEY="replace-with-a-secret"
uv run rizzo serve

Windows PowerShell-এ:

$env:RIZZO_API_KEY = "replace-with-a-secret"
uv run rizzo serve

প্রমাণীকরণ ব্যর্থ হলে HTTP 401 ফেরত আসে। অবৈধ অনুরোধের ডেটার ক্ষেত্রে HTTP 422 ফেরত আসতে পারে।

সামঞ্জস্যপূর্ণ ক্লায়েন্ট পুনর্নির্দেশ করুন

Hosted TypeSafe API-এর জন্য তৈরি কোনো ক্লায়েন্ট তার বেস URL পরিবর্তন করে স্থানীয় পরিষেবায় লক্ষ্য করা যেতে পারে:

export TYPESAFE_BASE_URL=http://127.0.0.1:8017

প্রকল্পের বক্তব্য অনুযায়ী, এই পরিবেশ-ভেরিয়েবল সেটআপটি অফিসিয়াল SDK-গুলোর জন্য তৈরি, তবে সেগুলোর সঙ্গে এখনো পরীক্ষা করা হয়নি। ইন্টারফেসটি সামঞ্জস্যপূর্ণ, কিন্তু অন্তর্নিহিত স্থানীয় মডেলটি Jev নয়।

আত্মবিশ্বাস ও সম্ভাবনা সঠিকভাবে বিবেচনা করুন

সামঞ্জস্যপূর্ণ API-এর confidence মানটি অপশনগুলোর বণ্টনের আকৃতি বর্ণনা করে। উত্তরটি সঠিক হওয়ার যাচাইকৃত সম্ভাবনা এটি নয়। একইভাবে, কাঁচা মডেল সম্ভাবনা অতিরিক্ত আত্মবিশ্বাসী বা অন্যভাবে ভুলভাবে ক্যালিব্রেটেড হতে পারে।

প্রতিনিধিত্বশীল লেবেলযুক্ত ডেটাসেটে সিদ্ধান্ত যাচাই করুন এবং প্রয়োজনে প্রকৃত ডিপ্লয়মেন্ট পরিবেশের জন্য সেগুলো ক্যালিব্রেট করুন। সার্ভার --calibration-এর মাধ্যমে একটি ক্যালিব্রেশন ফাইল গ্রহণ করে:

uv run rizzo serve --calibration fit.json

যে মডেল ফাইল, রানটাইম, কোয়ান্টাইজেশন ও হার্ডওয়্যার ব্যাকএন্ডে ক্যালিব্রেশনটি করা হয়েছে, সেটির সঙ্গে এটি আবদ্ধ। CUDA, Vulkan ও Metal ভিন্নভাবে রাউন্ড করতে পারে এবং কোয়ান্টাইজেশন ফেরত দেওয়া সম্ভাবনা পরিবর্তন করতে পারে।

উত্তর-স্লটের সীমা মেনে চলুন

প্রতিটি প্রার্থী একটি বড় হাতের অক্ষরের সঙ্গে ম্যাপ হয়, ফলে প্রতি প্রশ্নে সর্বোচ্চ ২৬টি উত্তর-স্লট তৈরি হয়। অভ্যন্তরীণ abstention এবং range অপশনও স্লট ব্যবহার করে। তাই abstention ছাড়া একটি choice-এ সর্বোচ্চ ২৬টি স্বাভাবিক অপশন এবং abstention-সহ ২৫টি অপশন সমর্থিত। Numeric প্রশ্নে উপলভ্য anchor আরও কম, কারণ range-এর নিচে, range-এর ওপরে এবং ঐচ্ছিক insufficient-evidence choice-ও স্লট দখল করে।

কাস্টম মডেল ফাইল বা llama.cpp বিল্ড ব্যবহার করুন

--model ব্যবহার করে নির্দিষ্ট GGUF ফাইল দিয়ে সার্ভার চালু করুন:

uv run rizzo serve --model /path/to/model.gguf

কাস্টম llama.cpp ইনস্টলেশন ব্যবহার করতে, RIZZO_LLAMA_DIR-কে libllama থাকা ডিরেক্টরিতে নির্দেশ করুন। README অনুযায়ী llama.cpp commit 161755f প্রয়োজন, কারণ bindings ওই সংস্করণের header-এর সঙ্গে সংযুক্ত।

Snake ডেমোটি দেখুন

Rizzo Flow-এর লাইভ Snake চলাচল-সংক্রান্ত সিদ্ধান্ত

স্থানীয় Snake পেজটি দেখায়, কীভাবে টাইপ করা সিদ্ধান্ত দিয়ে একটি ইন্টার‌্যাক্টিভ অ্যাপ্লিকেশন নিয়ন্ত্রণ করা যায়। প্রতিটি চাল একটি POST /v1/decisions অনুরোধ পাঠায়, যাতে বোর্ডের বর্ণনা এবং বৈধ চালগুলোর তালিকা থাকা একটি choice প্রশ্ন থাকে। পেজটি টেক্সট তৈরি না করেই উত্তর-সম্ভাবনা, logits, সময়ের হিসাব এবং সিদ্ধান্তের লগ প্রদর্শন করে।

ডেমোটি একটি গুরুত্বপূর্ণ মডেলিং শিক্ষাও দেখায়: ইনপুটের উপস্থাপন গুরুত্বপূর্ণ। README-তে বলা হয়েছে, শুধু ASCII grid-এর তুলনায় গণনা করা প্রতি-চালের sensor ব্যবহার করলে 4B মডেল অনেক ভালো কাজ করে। এই পর্যবেক্ষণ অল্প কয়েকটি অনানুষ্ঠানিক গেম থেকে এসেছে এবং এটিকে benchmark হিসেবে বিবেচনা করা উচিত নয়।

অপারেশনাল যাচাই

মডেলের উৎস-তথ্য ও ফাইলের hash পরীক্ষা করতে GET /health ব্যবহার করুন। অনুরোধ ও প্রতিক্রিয়ার schema-ও request.schema.json এবং response.schema.json-এ পাওয়া যায়। পুনরুৎপাদনযোগ্য ডিপ্লয়মেন্টের জন্য মডেল, কোয়ান্টাইজেশন, রানটাইম, ব্যাকএন্ড, কনটেক্সট কনফিগারেশন এবং ক্যালিব্রেশন অপরিবর্তিত রাখুন।

README-তে RTX 5060 Ti-তে Spark-X2.5-4B Q8_0 ব্যবহার করে একটি সংক্ষিপ্ত সিদ্ধান্তের জন্য প্রায় ৫০ মিলিসেকেন্ড সময়ের কথা বলা হয়েছে, তবে এটি হার্ডওয়্যার ও কাজের ধরননির্ভর। একই ডকুমেন্টেশনে বলা হয়েছে, Apple Silicon, AMD, Intel, Linux NVIDIA এবং CPU কনফিগারেশনগুলো সমতুল্যভাবে পরীক্ষা করা হয়নি। তাই লেটেন্সির প্রত্যাশা নির্ধারণের আগে নিজের মেশিনে benchmark করুন।

উপসংহার

Rizzo Flow একটি ব্যবহারিক স্থানীয় ইন্টারফেস, যা কোনো টেক্সট তৈরি না করেই অসংগঠিত স্টেটকে টাইপযুক্ত, সম্ভাবনাভিত্তিক সিদ্ধান্তে রূপান্তর করে। প্লেগ্রাউন্ড দিয়ে শুরু করুন, সম্পর্কিত প্রশ্নগুলো একত্র করে একটি অনুরোধে পাঠান, এবং সংখ্যাগত অনুমান বা সিদ্ধান্ত থেকে বিরত থাকার প্রয়োজন হলে নেটিভ API ব্যবহার করুন। প্রোডাকশনে ব্যবহারের আগে, আপনার বাস্তব অ্যাপ্লিকেশনকে প্রতিফলিত করে এমন ডেটায় নির্ভুলতা, লেটেন্সি, ক্যালিব্রেশন, কোয়ান্টাইজেশন এবং ব্যাকএন্ডের আচরণ পরীক্ষা করুন।