নায়া
সূচিপত্র
  1. 1ভিডিও ম্যানুয়াল
  2. 2Naia OS Live USB
  3. 3ইনস্টলেশন এবং স্থাপনা
  4. 3.1Naia OS ইনস্টলেশন (ISO)
  5. 3.2অ্যাপ ইনস্টলেশন
  6. 4শুরু করা
  7. 4.1Naia Model Pricing
  8. 4.2naia-omni-cascade
  9. 4.3demo
  10. 4.4naia-offline
  11. 4.5naia-model-dev
  12. 4.6naia-online
  13. 5প্রধান পর্দা
  14. 6চ্যাট
  15. 6.1ব্যক্তিগত রেডিও ডিজে ও প্রদর্শনী গাইড
  16. 7কথোপকথনের ইতিহাস
  17. 8কাজের অগ্রগতি
  18. 9দক্ষতা
  19. 10চ্যানেল
  20. 11এজেন্ট
  21. 12ডায়াগনস্টিকস
  22. 13ওয়ার্কস্পেস
  23. 14ব্রাউজার
  24. 15প্যানেল ব্যবস্থাপনা
  25. 16ভয়েস চ্যাট
  26. 17সেটিংস
  27. 18টুলের বিবরণ
  28. 19Naia অ্যাকাউন্ট
  29. 20সমস্যা সমাধান
  30. 21ওপেন সোর্স ব্যবহার ও অবদান

4.5. naia-model-dev

কোড থেকে Naia মডেল ব্যবহারের জন্য ডেভেলপার গাইড। মডেলটি 4.4 Naia মডেল ডাউনলোড-এর মাধ্যমে চালানোর পর, স্থানীয়ভাবে সার্ভ করা OpenAI-সঙ্গতিপূর্ণ API (কোনো গেটওয়ে নয়, কোনো সারি নয়) যেমন আছে তেমনই ব্যবহার করুন। যেকোনো OpenAI SDK বা টুল দিয়ে, আপনি কেবল baseURL এই মডেলের দিকে নির্দেশ করেন।

শুধু naia-os/শেল-এ সীমাবদ্ধ নয় — OpenAI Realtime/Chat/Audio/Embeddings বলতে পারে এমন যেকোনো কোড যেমন আছে তেমনই সংযুক্ত হয়, এবং আপনি এই মডেলের উপর নতুন অ্যাপ্লিকেশন তৈরি ও চালাতে পারেন।

1. সংযোগ · প্রমাণীকরণ

  • REST বেস: http://<host>:8892/v1 (একই PC-তে 127.0.0.1)
  • Realtime (WS): ws://<host>:8892/v1/realtime (খালি ws://<host>:8892-ও কাজ করে — পথ /v1/realtime + ডিফল্ট মডেল স্বয়ংক্রিয়ভাবে প্রয়োগ)
  • সংযোগ: স্থানীয় (127.0.0.1) / Tailscale-এ, কোনো প্রমাণীকরণ প্রয়োজন নেই — কন্টেইনার নিজের লাইসেন্স নিজেই যাচাই করে। যেসব ক্লায়েন্টের একটি কী ফিল্ড দরকার (OpenAI SDK ইত্যাদি) তারা যেকোনো মান (naia) পাস করতে পারে। দূরবর্তীভাবে উন্মুক্ত করার সময়, এর সামনে §4.4 Tailscale/VPN রাখুন।

🔑 একটি কী — সাবস্ক্রিপশন কী

  • সাবস্ক্রিপশন কী — পোর্টাল থেকে আপনি যে সাবস্ক্রিপশন কী পান। ব্যবহার শুধুমাত্র কন্টেইনার রান টাইমে (সক্রিয়করণের সময়) (-e NAIA_ACCOUNT_TOKEN=<subscription-key>)। এটি সাবস্ক্রিপশন যাচাই করে এবং একটি সময়-সীমাবদ্ধ লাইসেন্স (সার্টিফিকেট) পায়।
  • কোনো আলাদা কানেকশন কী নেই। সক্রিয় হওয়ার পর, কন্টেইনার সার্টিফিকেট দিয়ে স্থানীয়ভাবে নিজেই যাচাই করে, তাই ক্লায়েন্টদের (naia-os, OpenAI SDK) শুধু URL দিয়ে সংযুক্ত হলেই চলে — একই PC-তে 127.0.0.1, বা অন্য ডিভাইস থেকে Tailscale/VPN (§4.4)। এটি প্রতি-সংযোগে গেটওয়ে কল করে না।
  • নিচের উদাহরণগুলিতে api_key একটি প্লেসহোল্ডার (OpenAI SDK-এর এই ফিল্ডটি প্রয়োজন) — অফলাইন কন্টেইনার এটি যাচাই করে না, তাই "naia"-এর মতো যেকোনো মান কাজ করে।

2. এন্ডপয়েন্ট (OpenAI-সঙ্গতিপূর্ণ)

এন্ডপয়েন্টব্যবহার
GET /healthপ্রস্তুতি {"ready":true,"services":{tts,stt,llm},"vad":true} (প্রমাণীকরণ ছাড়া)
GET /v1/modelsমডেল তালিকা
WS /v1/realtimeরিয়েল-টাইম ভয়েস সেশন (VAD, বার্জ-ইন, আবেগ)
POST /v1/chat/completionsচ্যাট (স্ট্রিমিং)
POST /v1/audio/speechটেক্সট-টু-স্পিচ (TTS)
POST /v1/audio/transcriptionsস্পিচ-টু-টেক্সট (STT)
POST /v1/embeddingsএম্বেডিং

চ্যাট (curl):

curl -s http://127.0.0.1:8892/v1/chat/completions \
  -H "Authorization: Bearer naia" -H "Content-Type: application/json" \
  -d '{"model":"naia-0.9-omni-24g","messages":[{"role":"user","content":"hi"}],"stream":false}'

OpenAI SDK (Python) — শুধু baseURL বদলান:

from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:8892/v1", api_key="naia")
print(client.chat.completions.create(
    model="naia-0.9-omni-24g",
    messages=[{"role": "user", "content": "hi"}],
).choices[0].message.content)

ট্রান্সক্রিপশন (STT):

curl -s http://127.0.0.1:8892/v1/audio/transcriptions \
  -H "Authorization: Bearer naia" \
  -F file=@sample.wav -F model=naia-0.9-omni-24g

3. রিয়েল-টাইম ভয়েস — সংযোগ প্রবাহ (WS)

4.3 লাইভ ডেমো যে প্রবাহ ব্যবহার করে সেটিই। (অফলাইন তাৎক্ষণিকভাবে শুরু হয়, কোনো গেটওয়ে সারি/বরাদ্দ ছাড়াই।)

  1. সংযোগws://<host>:8892 খুলুন।

  2. প্রথম ফ্রেম (প্রমাণীকরণ · ভাষা) — ব্রাউজার WebSockets হেডার পাঠাতে পারে না, তাই প্রথম বার্তা হিসেবে পাঠান:

    { "setup": { "apiKey": "naia", "locale": "en" } }
    
  3. সার্ভার যখন session.created পাঠায়, তখন session.update দিয়ে সেশন কনফিগার করুন:

    {
      "type": "session.update",
      "session": {
        "modalities": ["text", "audio"],
        "input_audio_format": "pcm16",
        "output_audio_format": "pcm16",
        "instructions": "<persona instructions>",
        "turn_detection": { "type": "server_vad" },
        "input_audio_transcription": { "language": "en" },
        "ref_audio_url": "<URL of a voice sample to mimic (optional)>"
      }
    }
    
  4. আদান-প্রদান

    ক্লায়েন্ট → সার্ভার
    ভয়েস ইনপুট{"type":"input_audio_buffer.append","audio":"<base64 PCM16 24kHz>"} (সার্ভার VAD কথার শেষ শনাক্ত করে)
    টেক্সট ইনপুটconversation.item.create তারপর response.create
    বার্জ-ইনresponse.cancel
    সার্ভার → ক্লায়েন্ট
    response.audio.deltabase64 PCM16 24kHz অডিও খণ্ড
    response.audio_transcript.delta / response.text.deltaউত্তরের টেক্সট (স্ট্রিমিং)
    conversation.item.input_audio_transcription.completedআপনার কথার ট্রান্সক্রিপ্ট
    emotion.updatedআবেগ / প্রোসোডি ট্যাগ (§5)
    response.doneএক টার্নের সমাপ্তি

4. ভাষা — ৩০টি ভাষা (ডিফল্ট = auto/global)

মডেলটি ৩০টি ভাষা সমর্থন করে (আরবি, বর্মি, চীনা, ডেনিশ, ডাচ, ইংরেজি, ফিনিশ, ফরাসি, জার্মান, গ্রিক, হিব্রু, হিন্দি, ইন্দোনেশীয়, ইতালীয়, জাপানি, খমের, কোরীয়, লাও, মালয়, নরওয়েজীয়, পোলিশ, পর্তুগিজ, রুশ, স্প্যানিশ, সোয়াহিলি, সুইডিশ, তাগালোগ, থাই, তুর্কি, ভিয়েতনামী)।

  • ডিফল্ট (আনসেট) = global/auto — আপনি যে ভাষায় কথা বলেছেন তা শনাক্ত করে সেই ভাষাতেই উত্তর দেয় (প্রতি টার্নে)।
  • একটি নির্দিষ্ট ভাষা পিন করতে, setup.locale-এ অথবা session.update-এর input_audio_transcription.language-এ একটি ISO-639-1 কোড (যেমন ko/en/ja) দিন।

5. আউটপুট ফরম্যাট (আবেগ · প্রোসোডি ট্যাগ)

আউটপুট ফরম্যাট ভয়েস কথোপকথনের জন্য টিউন করা — ক্লায়েন্ট যদি এটি জানে, তবে আরও সমৃদ্ধভাবে প্রকাশ করতে পারে।

  • প্রোসোডি ট্যাগ: উত্তরের টেক্সটে যেখানে আবেগ পরিবর্তিত হয় সেখানে [laughing], [sigh], [breath], [pause], [hesitation]-এর মতো লোয়ারকেস ইংরেজি ব্র্যাকেট ট্যাগ মিশ্রিত থাকে (বাচন প্রোসোডির জন্য)। মডেলকে নির্দেশ দেওয়া হয়েছে যেন এটি [웃음]-এর মতো কোরীয় ট্যাগ, (smiling)-এর মতো বন্ধনীযুক্ত মঞ্চ-নির্দেশ, বা *smiles*-এর মতো তারকা চিহ্ন ব্যবহার না করে। পরিচিত শব্দভান্ডার: laughing/laugh/laughter/chuckle/giggle · sigh/exhale · breath/inhale · pause · hesitation · gasp/cough/sneeze/yawn/sniff/hum · cry/sob/moan/whisper/shout/cheer (অন্যান্য ট্যাগ যেমন আছে তেমনই পাস হয়)।
  • প্রতিটি ট্যাগের জন্য, সার্ভার একটি 1:1 emotion.updated ইভেন্ট পাঠায় (state == ট্যাগের নাম, লোয়ারকেস):
    { "type": "emotion.updated", "state": "laughing", "tag": "[laughing]", "known": true }
    
  • TTS পথ ট্যাগগুলি রাখে এবং বাচন প্রোসোডির জন্য সেগুলি সংশ্লেষণে ফিড করে, অন্যদিকে চ্যাট text.delta ট্যাগ সরিয়ে পরিষ্কার টেক্সট পাঠায়। (আউটপুটে কোনো ইমোজি, markdown, বা বন্ধনীযুক্ত স্ব-বর্ণনা নেই।)
  • ক্লায়েন্ট ম্যাপিং (naia-os রেফারেন্স): emotion.updated.state (প্রোসোডি ট্যাগ) অবতারের অভিব্যক্তিতে ম্যাপ করুন — laughing/chuckle/giggle/cheer → happy, sigh/exhale/cry/sob → sad, gasp → surprised, shout → angry, hesitation → thinkbreath·pause-এর মতো অ-আবেগমূলক প্রোসোডি অভিব্যক্তি পরিবর্তন করে না (আগেরটি রাখুন — যাতে প্রতি শ্বাসে এটি নিউট্রালে না জ্বলে ওঠে)।
  • দৃঢ় হ্যান্ডলিং প্রস্তাবিত: LLM আউটপুট সবসময় নির্ভুল নয়। emotion.updated-কে অগ্রাধিকার দিন, তবে এটি অনুপস্থিত থাকলে, ট্রান্সক্রিপ্টেই ট্যাগগুলি স্বয়ংক্রিয়ভাবে শনাক্ত করুন (আপারকেস [HAPPY] / লোয়ারকেস প্রোসোডি ট্যাগ) বা ফাঁস হওয়া মঞ্চ-নির্দেশ ((smiles)·*sigh*) এবং সেগুলি অভিব্যক্তিতে প্রতিফলিত করুন; কোনো ইঙ্গিত না থাকলে, বর্তমান অভিব্যক্তি বজায় রাখুন (তুলনা করুন naia-os shell/src/lib/vrm/expression.ts extractExpression)।

6. কথোপকথন মডেল বদলানো · নতুন সংস্করণ আপলোড করা (অপারেশন)

কমান্ড লাইন থেকে সরাসরি বদলানোর বিস্তারিত গাইড। ব্যক্তিগত সাবস্ক্রাইবাররাও এটি যেমন আছে তেমনই ব্যবহার করতে পারেন (কোনো কী লাগে না), আর শেয়ারড/কিয়স্ক অপারেশনের জন্য একটি লক করার অপশনও আছে। সহজ সারাংশ আছে 4.4 অফলাইন-এ।

6.1 কথোপকথন মডেল বদলানো (0.91 থেকে)

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

প্রথমে যে তিনটি বিষয় জেনে নিন:

  1. ডিফল্ট মডেল হলো একটি বিল্ট-ইন ওপেন LLM। বদলানোর পর যেকোনো সময় ডিফল্টে ফিরে যাওয়া যায়।
  2. নতুন আপলোড করা মডেল অবশ্যই GGUF ফরম্যাটে হতে হবে। আর ভয়েস ফিচার প্রায় 10GB মেমরি ব্যবহার করছে বলে, কথোপকথন মডেল আনুমানিক 14GB পর্যন্ত যেতে পারে। এর চেয়ে বড় মডেল প্রত্যাখ্যাত হয়, এবং আপলোডের সময় ব্যর্থ হলেও আগের মডেলে স্বয়ংক্রিয়ভাবে ফিরে যায় (কথোপকথন বিচ্ছিন্ন হয় না)।
  3. ব্যক্তিগত সাবস্ক্রাইবারদের আলাদা কোনো কী লাগে না। নিজের মেশিনের সাবস্ক্রিপশন প্রমাণীকরণ (লাইসেন্স)-ই অনুমতি, তাই শুধু নিচের কমান্ড দিয়ে বদলে নিন — ভয়েসের জন্য কী না লাগার মতোই। (শুধু একাধিক মানুষ একসাথে ব্যবহার করে এমন শেয়ারড/কিয়স্ক বক্সে, অপারেটর রান টাইমে -e NAIA_ADMIN_KEY=আপনার_পাসওয়ার্ড দিয়ে লক করতে পারেন, এবং তখন অনুরোধে -H "Authorization: Bearer আপনার_পাসওয়ার্ড"-ও পাঠাতে হয়।)

হাতেকলমে — শুধু ঠিকানা নির্ধারণ করে রাখি:

BASE=http://127.0.0.1:8892     # অন্য ডিভাইস থেকে করলে §4.4-এর https ঠিকানা (যেমন: ...:8443)

① এখন কোন মডেল চলছে এবং কত মেমরি বাকি আছে দেখুন:

curl -s $BASE/admin/llm/status

② মডেল বদলান — কেবল ডবল কোটেশনের ভেতরের মডেল অংশটি বদলে পেস্ট করুন। HuggingFace মডেল কার্ডের ঠিকানা (https://huggingface.co/Qwen/Qwen2.5-7B-Instruct-GGUF) বা তার id (Qwen/Qwen2.5-7B-Instruct-GGUF) যেমন আছে তেমনই দিলেই হবে:

curl -s -X POST $BASE/admin/llm/swap \
  -H "Content-Type: application/json" \
  -d '{"model":"Qwen/Qwen2.5-7B-Instruct-GGUF","pull":true}'

hf.co/ প্রিফিক্স বা কোয়ান্ট (quant) স্বয়ংক্রিয়ভাবে যুক্ত হয় (ডিফল্ট Q4_K_M)। নির্দিষ্ট কোয়ান্ট চাইলে Qwen/Qwen2.5-7B-Instruct-GGUF:Q5_K_M-এর মতো শেষে লিখুন। মডেল প্রথমবার ডাউনলোড করতে কয়েক দশ সেকেন্ড থেকে কয়েক মিনিট লাগে।

②-অফলাইন — ইন্টারনেট ছাড়া, নিজের কাছে থাকা GGUF ফাইল দিয়ে বদলানো। প্রদর্শনী · পরামর্শের মতো জায়গায় ইন্টারনেট না থাকলে HuggingFace থেকে না নামিয়ে আগে থেকেই থাকা GGUF ফাইল নিবন্ধন করে বদলান। (পার্থক্যের নিয়ম: নামে org/repo-এর মতো স্ল্যাশ থাকলে HuggingFace অনলাইন, স্ল্যাশ ছাড়া সাধারণ নাম হলে লোকাল মডেল।)

এক লাইন করে কপি করে পেস্ট করুন। mymodel জায়গায় পছন্দের নাম, mymodel.gguf জায়গায় আসল ফাইলের নাম লিখুন:

podman cp ./mymodel.gguf naia-omni:/app/models/mymodel.gguf
podman exec naia-omni sh -lc 'printf "FROM /app/models/mymodel.gguf\n" > /tmp/Modelfile && ollama create mymodel -f /tmp/Modelfile'
curl -s -X POST $BASE/admin/llm/swap -H "Content-Type: application/json" -d '{"model":"mymodel:latest","pull":false}'

⚠️ নিজে রূপান্তর · মার্জ করা GGUF-এ চ্যাট টেমপ্লেট না থাকায় উত্তর এলোমেলো হতে বা কেটে যেতে পারে। সেক্ষেত্রে ২ নম্বর ধাপের Modelfile-এ মডেল সিরিজের চ্যাট টেমপ্লেট (TEMPLATE) ও স্টপ টোকেন (PARAMETER stop) যুক্ত করে নিবন্ধন করুন — ডেভেলপারদের জন্য বিস্তারিত [রেফারেন্স বাস্তবায়ন §7]-এ। (HuggingFace-এর অফিসিয়াল Instruct GGUF-এ সাধারণত এটি অন্তর্নির্মিত থাকে, তাই যেমন আছে তেমনই ব্যবহার করা যায়।)

③ ডিফল্ট মডেলে ফিরে যান:

curl -s -X POST $BASE/admin/llm/restore

শেয়ারড/কিয়স্ক বক্স হলে (অপারেটর NAIA_ADMIN_KEY সেট করেছেন), উপরের প্রতিটি কমান্ডে -H "Authorization: Bearer আপনার_পাসওয়ার্ড" যোগ করুন। ব্যক্তিগত সাবস্ক্রাইবারদের প্রয়োজন নেই।

বদলানোর পরও naia-os-এর মতো অ্যাপগুলো একই ঠিকানায় যেমন আছে তেমনই সংযুক্ত হলেই চলে (আবার সংযোগের দরকার নেই)। পুনরায় চালু বা আপডেটের পরও যেন একই মডেল দিয়ে শুরু হয় তা চাইলে, কন্টেইনার চালানোর সময় -e NAIA_LLM_MODEL=Qwen/Qwen2.5-7B-Instruct-GGUF দিয়ে ডিফল্ট মডেল নির্দিষ্ট করে রাখুন।

6.2 নতুন সংস্করণে আপডেট করা

নতুন সংস্করণ এলে শুধু ইমেজ (সংস্করণ) বদলান, সাবস্ক্রিপশন · সেটিংস যেমন আছে তেমনই রাখুন। নতুন সংস্করণ প্রথমবার চালু করলে কন্টেইনার ইন্টারনেটের মাধ্যমে স্বয়ংক্রিয়ভাবে পুনঃপ্রমাণীকরণ করে (বিদ্যমান সাবস্ক্রিপশন · ডিভাইস অপরিবর্তিত — কী হাতে করে আবার বসানোর দরকার নেই)। তাই আপডেটের সময় ইন্টারনেটে সংযুক্ত থাকতে হবে।

podman pull ghcr.io/nextain/naia-0.9-omni-24g:latest      # সর্বশেষ সংস্করণ নামান
podman stop naia-omni && podman rm naia-omni      # শুধু কন্টেইনার পরিষ্কার করুন (নিচের সতর্কতা দেখুন)
# প্রথম ইনস্টলের সময় ব্যবহৃত রান কমান্ডটিই হুবহু আবার চালান — একই লাইসেন্স ভলিউম যুক্ত করলেই হয়ে গেল।

⚠️ আপডেটের সময় "ডিভাইস রিলিজ (release)" চাপবেন না। রিলিজ কেবল ব্যবহৃত কম্পিউটারটি অন্য কম্পিউটারে স্থানান্তরের সময়ই ব্যবহার করার ফিচার। আপডেট করতে গিয়ে রিলিজ করলে শুরু থেকে আবার প্রমাণীকরণ করতে হয়। আপডেটে শুধু লাইসেন্স ভলিউম যেমন আছে তেমনই রাখলে সাবস্ক্রিপশন ও ডিভাইস নিবন্ধন বজায় থাকে।

আগে প্রমাণীকরণ করা ব্যবহারকারীরা উপরের মতো শুধু সর্বশেষ সংস্করণটি নামিয়ে আবার চালু করলেই, মডেল বদলানো যায় এমন নতুন সংস্করণে যেমন আছে তেমনই চলে যান (প্রমাণীকরণ বজায় থাকে)। নির্দিষ্ট কোনো সংস্করণ বেছে নামাতে চাইলে :latest-এর বদলে :0.91-এর মতো সংস্করণ নম্বর লিখুন।

7. আরও দেখুন

  • রেফারেন্স বাস্তবায়ন / নমুনা কোড (ওপেন সোর্স): naia-os-এর ভয়েস ক্লায়েন্ট shell/src/lib/voice/ (Apache 2.0) — এতে আছে সেই প্রকৃত ক্লায়েন্ট যা এই API-এর সাথে কথা বলে (naia-omni.ts) এবং আবেগ/প্রোসোডি হ্যান্ডলিং (emotion-tags.ts; অভিব্যক্তি ম্যাপিং ও দৃঢ় নিষ্কাশন vrm/expression.ts-এ)। এটিকে নতুন মডেল পরীক্ষা ও Tauri অ্যাপ তৈরির সূচনা বিন্দু হিসেবে ব্যবহার করুন। 4.3 লাইভ ডেমো-তে লাইভ চেষ্টা করুন।
  • লাইনআপ ও মূল্য: 4.1 মডেল মূল্য
  • ক্লাউড (পরিকল্পিত): 4.6 অনলাইন