প্রকাশিত: ২০ মে, ২০২৫, সর্বশেষ আপডেট: ২১ সেপ্টেম্বর, ২০২৫
| ব্যাখ্যাকারী | ওয়েব | এক্সটেনশন | Chrome স্ট্যাটাস | অভিপ্রায় | 
|---|---|---|---|---|
| গিটহাব | দৃশ্য | পরীক্ষা-নিরীক্ষার অভিপ্রায় | 
প্রম্পট এপিআই ব্যবহার করে, আপনি ব্রাউজারে জেমিনি ন্যানোতে প্রাকৃতিক ভাষার অনুরোধ পাঠাতে পারেন।
প্রম্পট এপিআই ব্যবহার করার অনেক উপায় আছে। উদাহরণস্বরূপ, আপনি তৈরি করতে পারেন:
- এআই-চালিত অনুসন্ধান : একটি ওয়েব পৃষ্ঠার বিষয়বস্তুর উপর ভিত্তি করে প্রশ্নের উত্তর দিন।
- ব্যক্তিগতকৃত সংবাদ ফিড : এমন একটি ফিড তৈরি করুন যা গতিশীলভাবে নিবন্ধগুলিকে বিভাগ সহ শ্রেণীবদ্ধ করে এবং ব্যবহারকারীদের সেই বিষয়বস্তু ফিল্টার করার অনুমতি দেয়।
- কাস্টম কন্টেন্ট ফিল্টার । ব্যবহারকারী-নির্ধারিত বিষয়ের উপর ভিত্তি করে সংবাদ নিবন্ধ বিশ্লেষণ করুন এবং স্বয়ংক্রিয়ভাবে কন্টেন্ট অস্পষ্ট করুন বা লুকান।
- ক্যালেন্ডার ইভেন্ট তৈরি । এমন একটি Chrome এক্সটেনশন তৈরি করুন যা স্বয়ংক্রিয়ভাবে ওয়েব পৃষ্ঠাগুলি থেকে ইভেন্টের বিবরণ বের করে, যাতে ব্যবহারকারীরা মাত্র কয়েকটি ধাপে ক্যালেন্ডার এন্ট্রি তৈরি করতে পারেন।
- নির্বিঘ্নে যোগাযোগ নিষ্কাশন । এমন একটি এক্সটেনশন তৈরি করুন যা ওয়েবসাইট থেকে যোগাযোগের তথ্য বের করে, ব্যবহারকারীদের জন্য কোনও ব্যবসার সাথে যোগাযোগ করা বা তাদের পরিচিতির তালিকায় বিশদ যোগ করা সহজ করে তোলে।
এগুলো মাত্র কয়েকটি সম্ভাবনা, এবং আপনি কী তৈরি করেন তা দেখতে আমরা উত্তেজিত।
হার্ডওয়্যারের প্রয়োজনীয়তাগুলি পর্যালোচনা করুন
Chrome-এ এই API গুলি ব্যবহার করে বৈশিষ্ট্যগুলি পরিচালনাকারী ডেভেলপার এবং ব্যবহারকারীদের জন্য নিম্নলিখিত প্রয়োজনীয়তাগুলি বিদ্যমান। অন্যান্য ব্রাউজারগুলির বিভিন্ন অপারেটিং প্রয়োজনীয়তা থাকতে পারে।
ল্যাঙ্গুয়েজ ডিটেক্টর এবং ট্রান্সলেটর এপিআই ডেস্কটপে ক্রোমে কাজ করে। এই এপিআইগুলি মোবাইল ডিভাইসে কাজ করে না। প্রম্পট এপিআই, সামারাইজার এপিআই, রাইটার এপিআই, রিরাইটার এপিআই এবং প্রুফরিডার এপিআই ক্রোমে কাজ করে যখন নিম্নলিখিত শর্তগুলি পূরণ হয়:
- অপারেটিং সিস্টেম : Windows 10 অথবা 11; macOS 13+ (Ventura এবং পরবর্তী); Linux; অথবা ChromeOS (প্ল্যাটফর্ম 16389.0.0 এবং পরবর্তী) Chromebook Plus ডিভাইসে। Android, iOS এবং Chromebook Plus নয় এমন ডিভাইসে ChromeOS এখনও Gemini Nano ব্যবহার করে এমন API দ্বারা সমর্থিত নয়।
- স্টোরেজ : আপনার Chrome প্রোফাইল ধারণকারী ভলিউমে কমপক্ষে ২২ গিগাবাইট খালি জায়গা।
-  GPU অথবা CPU : অন্তর্নির্মিত মডেলগুলি GPU অথবা CPU দিয়ে চলতে পারে।- জিপিইউ : ৪ জিবি-র বেশি ভিআরএএম।
- সিপিইউ : ১৬ জিবি বা তার বেশি র্যাম এবং ৪টি সিপিইউ কোর বা তার বেশি।
 
- নেটওয়ার্ক : সীমাহীন ডেটা অথবা একটি মিটারবিহীন সংযোগ।
 ব্রাউজার মডেল আপডেট করার সাথে সাথে জেমিনি ন্যানোর সঠিক আকার পরিবর্তিত হতে পারে। বর্তমান আকার নির্ধারণ করতে, chrome://on-device-internals দেখুন।
প্রম্পট এপিআই ব্যবহার করুন
Chrome-এ Prompt API জেমিনি ন্যানো মডেল ব্যবহার করে। APIটি Chrome-এ বিল্ট-ইন থাকলেও, প্রথমবার যখন কোনও অরিজিন API ব্যবহার করে তখন মডেলটি আলাদাভাবে ডাউনলোড করা হয়। এই API ব্যবহার করার আগে, Google-এর জেনারেটিভ AI নিষিদ্ধ ব্যবহার নীতি স্বীকার করুন।
 মডেলটি ব্যবহারের জন্য প্রস্তুত কিনা তা নির্ধারণ করতে, LanguageModel.availability() কল করুন।
const availability = await LanguageModel.availability();
 ডাউনলোড শুরু করতে এবং ভাষা মডেলটি চালু করতে, ব্যবহারকারীর সক্রিয়করণ পরীক্ষা করুন। তারপর, create() ফাংশনটি কল করুন।
const session = await LanguageModel.create({
  monitor(m) {
    m.addEventListener('downloadprogress', (e) => {
      console.log(`Downloaded ${e.loaded * 100}%`);
    });
  },
});
 যদি availability() এর প্রতিক্রিয়া downloading হয়, তাহলে ডাউনলোডের অগ্রগতি শুনুন এবং ব্যবহারকারীকে জানান , কারণ ডাউনলোড হতে সময় লাগতে পারে।
মডেল পরামিতি
 params() ফাংশনটি আপনাকে ভাষা মডেলের প্যারামিটার সম্পর্কে অবহিত করে। অবজেক্টটিতে নিম্নলিখিত ক্ষেত্রগুলি রয়েছে:
-  defaultTopK: ডিফল্ট top-K মান।
-  maxTopK: সর্বোচ্চ টপ-কে মান।
-  defaultTemperature: ডিফল্ট তাপমাত্রা ।
-  maxTemperature: সর্বোচ্চ তাপমাত্রা।
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 128, defaultTemperature: 1, maxTemperature: 2}
একটি সেশন তৈরি করুন
 একবার প্রম্পট এপিআই চালু হয়ে গেলে, আপনি create() ফাংশন দিয়ে একটি সেশন তৈরি করবেন।
 প্রতিটি সেশনকে topK এবং temperature সাথে একটি ঐচ্ছিক অপশন অবজেক্ট ব্যবহার করে কাস্টমাইজ করা যেতে পারে। এই প্যারামিটারগুলির জন্য ডিফল্ট মানগুলি LanguageModel.params() থেকে ফেরত পাঠানো হয়।
const params = await LanguageModel.params();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await LanguageModel.create({
  temperature: Math.max(params.defaultTemperature * 1.2, 2.0),
  topK: params.defaultTopK,
});
 create() ফাংশনের ঐচ্ছিক অপশন অবজেক্টটি একটি signal ফিল্ডও নেয়, যা আপনাকে সেশনটি ধ্বংস করার জন্য একটি AbortSignal পাস করতে দেয়।
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const session = await LanguageModel.create({
  signal: controller.signal,
});
প্রাথমিক প্রম্পটের সাথে প্রসঙ্গ যোগ করুন
প্রাথমিক প্রম্পটের সাহায্যে, আপনি ভাষা মডেলকে পূর্ববর্তী ইন্টারঅ্যাকশন সম্পর্কে প্রসঙ্গ প্রদান করতে পারেন, উদাহরণস্বরূপ, ব্রাউজার পুনরায় চালু করার পরে ব্যবহারকারীকে একটি সংরক্ষিত সেশন পুনরায় শুরু করার অনুমতি দেওয়ার জন্য।
const session = await LanguageModel.create({
  initialPrompts: [
    { role: 'system', content: 'You are a helpful and friendly assistant.' },
    { role: 'user', content: 'What is the capital of Italy?' },
    { role: 'assistant', content: 'The capital of Italy is Rome.' },
    { role: 'user', content: 'What language is spoken there?' },
    {
      role: 'assistant',
      content: 'The official language of Italy is Italian. [...]',
    },
  ],
});
একটি উপসর্গ দিয়ে প্রতিক্রিয়া সীমাবদ্ধ করুন
 মডেলের পূর্ববর্তী প্রতিক্রিয়াগুলি বিস্তারিতভাবে বর্ণনা করার জন্য, আপনি পূর্ববর্তী ভূমিকাগুলির পাশাপাশি একটি "assistant" ভূমিকা যোগ করতে পারেন। উদাহরণস্বরূপ:
const followup = await session.prompt([
  {
    role: "user",
    content: "I'm nervous about my presentation tomorrow"
  },
  {
    role: "assistant",
    content: "Presentations are tough!"
  }
]);
 কিছু ক্ষেত্রে, নতুন প্রতিক্রিয়া অনুরোধ করার পরিবর্তে, আপনি "assistant" -role প্রতিক্রিয়া বার্তার কিছু অংশ আগে থেকে পূরণ করতে চাইতে পারেন। এটি ভাষা মডেলকে একটি নির্দিষ্ট প্রতিক্রিয়া বিন্যাস ব্যবহার করতে সাহায্য করতে পারে। এটি করার জন্য, পরবর্তী "assistant" -role বার্তায় prefix: true যোগ করুন। উদাহরণস্বরূপ:
const characterSheet = await session.prompt([
  {
    role: 'user',
    content: 'Create a TOML character sheet for a gnome barbarian',
  },
  {
    role: 'assistant',
    content: '```toml\n',
    prefix: true,
  },
]);
প্রত্যাশিত ইনপুট এবং আউটপুট যোগ করুন
 প্রম্পট এপিআই-তে মাল্টিমোডাল ক্ষমতা রয়েছে এবং এটি একাধিক ভাষা সমর্থন করে। আপনার সেশন তৈরি করার সময় expectedInputs এবং expectedOutputs পদ্ধতি এবং ভাষা সেট করুন।
-  type: মোডালিটি প্রত্যাশিত।-  expectedInputsজন্য, এটিtext,image, অথবাaudioহতে পারে।
-  expectedOutputsএর জন্য, Prompt API শুধুমাত্রtextব্যবহারের অনুমতি দেয়।
 
-  
-  languages: প্রত্যাশিত ভাষা বা ভাষা সেট করার জন্য অ্যারে। প্রম্পট API"en","ja", এবং"es"গ্রহণ করে। অতিরিক্ত ভাষার জন্য সমর্থন উন্নয়নাধীন।-  expectedInputsএর জন্য, সিস্টেম প্রম্পট ভাষা এবং এক বা একাধিক প্রত্যাশিত ব্যবহারকারী প্রম্পট ভাষা সেট করুন।
-  এক বা একাধিক expectedOutputsভাষা সেট করুন।
 
-  
const session = await LanguageModel.create({
  expectedInputs: [
    { type: "text", languages: ["en" /* system prompt */, "ja" /* user prompt */] }
  ],
  expectedOutputs: [
    { type: "text", languages: ["ja"] }
  ]
});
 যদি মডেলটি একটি অসমর্থিত ইনপুট বা আউটপুটের সম্মুখীন হয়, তাহলে আপনি একটি "NotSupportedError" DOMException পেতে পারেন।
মাল্টিমোডাল ক্ষমতা
এই ক্ষমতাগুলির সাহায্যে আপনি করতে পারবেন:
- ব্যবহারকারীদের চ্যাট অ্যাপ্লিকেশনে পাঠানো অডিও বার্তাগুলি প্রতিলিপি করার অনুমতি দিন।
- আপনার ওয়েবসাইটে ক্যাপশন বা অল্টারনেট টেক্সটে ব্যবহারের জন্য আপলোড করা একটি ছবি বর্ণনা করুন।
অডিও ইনপুট সহ প্রম্পট API ব্যবহারের জন্য Mediarecorder অডিও প্রম্পট ডেমো এবং ইমেজ ইনপুট সহ প্রম্পট API ব্যবহারের জন্য Canvas ইমেজ প্রম্পট ডেমোটি একবার দেখে নিন।
বার্তা যোগ করুন
ইনফারেন্সে কিছুটা সময় লাগতে পারে, বিশেষ করে মাল্টিমোডাল ইনপুট ব্যবহার করে প্রম্পট করার সময়। সেশনটি পূরণ করার জন্য আগে থেকে পূর্বনির্ধারিত প্রম্পট পাঠানো কার্যকর হতে পারে, যাতে মডেলটি প্রক্রিয়াকরণের কাজ শুরু করতে পারে।
 যদিও initialPrompts সেশন তৈরিতে কার্যকর, append() পদ্ধতিটি prompt() বা promptStreaming() পদ্ধতির পাশাপাশি ব্যবহার করা যেতে পারে, যাতে সেশন তৈরির পরে অতিরিক্ত অতিরিক্ত প্রাসঙ্গিক প্রম্পট দেওয়া যায়।
উদাহরণস্বরূপ:
const session = await LanguageModel.create({
  initialPrompts: [
    {
      role: 'system',
      content:
        'You are a skilled analyst who correlates patterns across multiple images.',
    },
  ],
  expectedInputs: [{ type: 'image' }],
});
fileUpload.onchange = async () => {
  await session.append([
    {
      role: 'user',
      content: [
        {
          type: 'text',
          value: `Here's one image. Notes: ${fileNotesInput.value}`,
        },
        { type: 'image', value: fileUpload.files[0] },
      ],
    },
  ]);
};
analyzeButton.onclick = async (e) => {
  analysisResult.textContent = await session.prompt(userQuestionInput.value);
};
প্রম্পটটি যাচাই, প্রক্রিয়াকরণ এবং সেশনে সংযুক্ত করার পরে append() দ্বারা প্রদত্ত প্রতিশ্রুতি পূরণ হয়। প্রম্পটটি সংযুক্ত করা না গেলে প্রতিশ্রুতি প্রত্যাখ্যান করা হয়।
একটি JSON স্কিমা পাস করুন
 JSON স্কিমাকে মান হিসেবে পাস করার জন্য prompt() অথবা promptStreaming() পদ্ধতিতে responseConstraint ক্ষেত্রটি যোগ করুন। এরপর আপনি Prompt API এর সাথে স্ট্রাকচার্ড আউটপুট ব্যবহার করতে পারেন।
 নিম্নলিখিত উদাহরণে, JSON স্কিমা নিশ্চিত করে যে মডেলটি true বা false সাথে সাড়া দেয় যাতে কোনও প্রদত্ত বার্তা মৃৎশিল্প সম্পর্কে শ্রেণীবদ্ধ করা যায়। 
const session = await LanguageModel.create();
const schema = {
  "type": "boolean"
};
const post = "Mugs and ramen bowls, both a bit smaller than intended, but that
happens with reclaim. Glaze crawled the first time around, but pretty happy
with it after refiring.";
const result = await session.prompt(
  `Is this post about pottery?\n\n${post}`,
  {
    responseConstraint: schema,
  }
);
console.log(JSON.parse(result));
// true
আপনার বাস্তবায়নে মডেলে প্রেরিত বার্তার অংশ হিসেবে একটি JSON স্কিমা বা রেগুলার এক্সপ্রেশন অন্তর্ভুক্ত থাকতে পারে। এটি ইনপুট কোটার কিছু অংশ ব্যবহার করে। responseConstraint বিকল্পটি session.measureInputUsage() এ পাস করে আপনি কত ইনপুট কোটা ব্যবহার করবেন তা পরিমাপ করতে পারেন।
 আপনি omitResponseConstraintInput বিকল্পটি ব্যবহার করে এই আচরণটি এড়াতে পারেন। যদি আপনি তা করেন, তাহলে আমরা আপনাকে প্রম্পটে কিছু নির্দেশিকা অন্তর্ভুক্ত করার পরামর্শ দিচ্ছি: 
const result = await session.prompt(`
  Summarize this feedback into a rating between 0-5. Only output a JSON
  object { rating }, with a single property whose value is a number:
  The food was delicious, service was excellent, will recommend.
`, { responseConstraint: schema, omitResponseConstraintInput: true });
মডেলটি জিজ্ঞাসা করুন
 আপনি prompt() অথবা promptStreaming() ফাংশন দিয়ে মডেলটি প্রম্পট করতে পারেন।
নন-স্ট্রিমড আউটপুট
 যদি আপনি একটি সংক্ষিপ্ত ফলাফল আশা করেন, তাহলে আপনি prompt() ফাংশনটি ব্যবহার করতে পারেন যা উপলব্ধ হলে প্রতিক্রিয়া ফেরত দেয়। 
// Start by checking if it's possible to create a session based on the
// availability of the model, and the characteristics of the device.
const { defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
  await LanguageModel.params();
const available = await LanguageModel.availability();
if (available !== 'unavailable') {
  const session = await LanguageModel.create();
  // Prompt the model and wait for the whole result to come back.
  const result = await session.prompt('Write me a poem!');
  console.log(result);
}
স্ট্রিমড আউটপুট
 যদি আপনি দীর্ঘতর প্রতিক্রিয়া আশা করেন, তাহলে আপনার promptStreaming() ফাংশনটি ব্যবহার করা উচিত যা আপনাকে মডেল থেকে আংশিক ফলাফল আসার সাথে সাথে দেখাতে দেয়। promptStreaming() ফাংশনটি একটি ReadableStream প্রদান করে। 
const { defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
  await LanguageModel.params();
const available = await LanguageModel.availability();
if (available !== 'unavailable') {
  const session = await LanguageModel.create();
  // Prompt the model and stream the result:
  const stream = session.promptStreaming('Write me an extra-long poem!');
  for await (const chunk of stream) {
    console.log(chunk);
  }
}
প্রম্পট করা বন্ধ করুন
 prompt() এবং promptStreaming() উভয়ই একটি ঐচ্ছিক দ্বিতীয় প্যারামিটার গ্রহণ করে যার মধ্যে একটি signal ফিল্ড থাকে, যা আপনাকে প্রম্পট চালানো বন্ধ করতে দেয়। 
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const result = await session.prompt('Write me a poem!', {
  signal: controller.signal,
});
সেশন ব্যবস্থাপনা
প্রতিটি অধিবেশন কথোপকথনের প্রেক্ষাপটের উপর নজর রাখে। অধিবেশনের প্রেক্ষাপট উইন্ডো পূর্ণ না হওয়া পর্যন্ত ভবিষ্যতের মিথস্ক্রিয়ার জন্য পূর্ববর্তী মিথস্ক্রিয়াগুলি বিবেচনা করা হয়।
প্রতিটি সেশনে সর্বাধিক কত সংখ্যক টোকেন প্রক্রিয়া করা যাবে তা থাকে। নিম্নলিখিতগুলি ব্যবহার করে এই সীমার দিকে আপনার অগ্রগতি পরীক্ষা করুন:
console.log(`${session.inputUsage}/${session.inputQuota}`);
সেশন ব্যবস্থাপনা সম্পর্কে আরও জানুন।
একটি সেশন ক্লোন করুন
 রিসোর্স সংরক্ষণের জন্য, আপনি clone() ফাংশন ব্যবহার করে একটি বিদ্যমান সেশন ক্লোন করতে পারেন। কথোপকথনের প্রসঙ্গ রিসেট করা হয়েছে, কিন্তু প্রাথমিক প্রম্পটটি অক্ষত রয়েছে। clone() ফাংশনটি একটি ঐচ্ছিক বিকল্প অবজেক্ট নেয় যার সাথে একটি signal ফিল্ড থাকে, যা আপনাকে ক্লোন করা সেশনটি ধ্বংস করার জন্য একটি AbortSignal পাস করতে দেয়। 
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const clonedSession = await session.clone({
  signal: controller.signal,
});
একটি অধিবেশন বন্ধ করুন
 যদি আপনার আর কোনও সেশনের প্রয়োজন না হয়, তাহলে রিসোর্স মুক্ত করতে destroy() কল করুন। যখন কোনও সেশন নষ্ট হয়ে যায়, তখন এটি আর ব্যবহার করা যাবে না এবং চলমান কোনও এক্সিকিউশন বাতিল হয়ে যায়। যদি আপনি ঘন ঘন মডেলটি প্রম্পট করতে চান তবে আপনি সেশনটি চালিয়ে যেতে চাইতে পারেন কারণ একটি সেশন তৈরি করতে কিছুটা সময় লাগতে পারে। 
await session.prompt(
  "You are a friendly, helpful assistant specialized in clothing choices."
);
session.destroy();
// The promise is rejected with an error explaining that
// the session is destroyed.
await session.prompt(
  "What should I wear today? It is sunny, and I am choosing between a t-shirt
  and a polo."
);
ডেমো
আমরা Prompt API-এর বিভিন্ন ব্যবহারের ক্ষেত্রে অনুসন্ধান করার জন্য একাধিক ডেমো তৈরি করেছি। নিম্নলিখিত ডেমোগুলি হল ওয়েব অ্যাপ্লিকেশন:
Chrome এক্সটেনশনে প্রম্পট API পরীক্ষা করতে, ডেমো এক্সটেনশনটি ইনস্টল করুন। এক্সটেনশনের সোর্স কোডটি GitHub-এ উপলব্ধ।
কর্মক্ষমতা কৌশল
ওয়েবের জন্য প্রম্পট এপিআই এখনও তৈরির কাজ চলছে। এই এপিআই তৈরি করার সময়, সর্বোত্তম কর্মক্ষমতার জন্য সেশন পরিচালনার উপর আমাদের সেরা অনুশীলনগুলি দেখুন।
অনুমতি নীতি, আইফ্রেম এবং ওয়েব ওয়ার্কার
 ডিফল্টরূপে, প্রম্পট API শুধুমাত্র শীর্ষ-স্তরের উইন্ডো এবং তাদের একই-অরিজিন আইফ্রেমগুলিতে উপলব্ধ। অনুমতি নীতি allow="" বৈশিষ্ট্য ব্যবহার করে ক্রস-অরিজিন আইফ্রেমগুলিতে API-এর অ্যাক্সেস অর্পণ করা যেতে পারে: 
<!--
  The hosting site at https://main.example.com can grant a cross-origin iframe
  at https://cross-origin.example.com/ access to the Prompt API by
  setting the `allow="language-model"` attribute.
-->
<iframe src="https://cross-origin.example.com/" allow="language-model"></iframe>
অনুমতি নীতির স্থিতি পরীক্ষা করার জন্য প্রতিটি কর্মীর জন্য একটি দায়িত্বশীল নথি স্থাপনের জটিলতার কারণে, বর্তমানে ওয়েব ওয়ার্কার্সে প্রম্পট API উপলব্ধ নেই।
অংশগ্রহণ করুন এবং মতামত শেয়ার করুন
আপনার মতামত সরাসরি এই API এবং সমস্ত অন্তর্নির্মিত AI API- এর ভবিষ্যত সংস্করণগুলি কীভাবে তৈরি এবং বাস্তবায়ন করা হবে তার উপর প্রভাব ফেলতে পারে।
- Chrome এর বাস্তবায়ন সম্পর্কে প্রতিক্রিয়ার জন্য, একটি বাগ রিপোর্ট অথবা একটি বৈশিষ্ট্য অনুরোধ দাখিল করুন।
- কোনও বিদ্যমান সমস্যা সম্পর্কে মন্তব্য করে অথবা প্রম্পট API GitHub সংগ্রহস্থলে একটি নতুন সমস্যা খুলে API আকার সম্পর্কে আপনার প্রতিক্রিয়া শেয়ার করুন।
- প্রারম্ভিক প্রিভিউ প্রোগ্রামে যোগদান করুন ।
 
 
        
        