GenAI প্রুফরিডিং API

এমএল কিট-এর জেনএআই প্রুফরিডিং এপিআই-এর সাহায্যে আপনি ব্যবহারকারীদের ছোট আকারের লেখার ব্যাকরণ ও বানান পরীক্ষা করতে সাহায্য করতে পারেন।

মূল সক্ষমতা

  • কিবোর্ড বা ভয়েসের মাধ্যমে ইনপুট করা টেক্সট প্রুফরিড করুন।
  • অনুরোধের ফলে অন্তত একটি পরামর্শ ফেরত আসবে। যদি একাধিক পরামর্শ ফেরত আসে, তবে ফলাফলগুলো নির্ভরযোগ্যতার ক্রম অনুসারে সাজানো হবে।

উদাহরণ ফলাফল

ইনপুট

ইনপুট টাইপ

আউটপুট

এটি একটি সংক্ষিপ্ত বার্তা

কিবোর্ড

এটি একটি সংক্ষিপ্ত বার্তা।

প্রকল্পটি প্রায় সম্পন্ন হয়েছে কিন্তু এটি পর্যালোচনা করা প্রয়োজন।

কিবোর্ড

প্রকল্পটি প্রায় সম্পন্ন হয়েছে কিন্তু এটি পর্যালোচনা করা প্রয়োজন।

দয়া করে ভালুকের কাছে আমার সাথে দেখা করুন,

কণ্ঠস্বর

অনুগ্রহ করে বারে আমার সাথে দেখা করুন।

শুরু করা

GenAI প্রুফরিডিং API ব্যবহার শুরু করতে, আপনার প্রোজেক্টের বিল্ড ফাইলে এই ডিপেন্ডেন্সিটি যোগ করুন।

implementation("com.google.mlkit:genai-proofreading:1.0.0-beta1")

এরপর, নির্দিষ্ট ভাষা এবং ইনপুট টাইপ সেটিংস সহ একটি Proofreader ক্লায়েন্ট কনফিগার করে সংগ্রহ করুন। ডিভাইসে প্রয়োজনীয় মডেল ফিচারগুলো উপলব্ধ আছে কিনা তা পরীক্ষা করে নিশ্চিত করুন (প্রয়োজনে ডাউনলোড শুরু করুন)। একটি ProofreadingRequest এ আপনি যে টেক্সটটি বিশ্লেষণ করতে চান তা জমা দিন, প্রুফরিডিং ইনফারেন্সটি সম্পাদন করুন এবং সবশেষে টেক্সটটি সংশোধনের জন্য প্রাপ্ত সাজেশনগুলো প্রসেস করুন।

কোটলিন

val textToProofread = "The praject is compleet but needs too be reviewd"

// Define task with required input and output format
val options = ProofreaderOptions.builder(context)
    // InputType can be KEYBOARD or VOICE. VOICE indicates that
    // the user generated text based on audio input.
    .setInputType(ProofreaderOptions.InputType.KEYBOARD)
    // Refer to ProofreaderOptions.Language for available
    // languages
    .setLanguage(ProofreaderOptions.Language.ENGLISH)
    .build()
val proofreader = Proofreading.getClient(options)

suspend fun prepareAndStartProofread() {
    // Check feature availability, status will be one of the
    // following: UNAVAILABLE, DOWNLOADABLE, DOWNLOADING, AVAILABLE
    val featureStatus = proofreader.checkFeatureStatus().await()

    if (featureStatus == FeatureStatus.DOWNLOADABLE) {
        // Download feature if necessary.
        // If downloadFeature is not called, the first inference
        // request will also trigger the feature to be downloaded
        // if it's not already downloaded.
        proofreader.downloadFeature(object : DownloadCallback {
            override fun onDownloadStarted(bytesToDownload: Long) { }

            override fun onDownloadFailed(e: GenAiException) { }

            override fun onDownloadProgress(
                totalBytesDownloaded: Long
            ) {}

            override fun onDownloadCompleted() {
                startProofreadingRequest(textToProofread, proofreader)
            }
        })
    } else if (featureStatus == FeatureStatus.DOWNLOADING) {
        // Inference request will automatically run once feature is
        // downloaded.
        // If Gemini Nano is already downloaded on the device, the
        // feature-specific LoRA adapter model will be downloaded
        // very quickly. However, if Gemini Nano is not already
        // downloaded, the download process may take longer.
        startProofreadingRequest(textToProofread, proofreader)
    } else if (featureStatus == FeatureStatus.AVAILABLE) {
        startProofreadingRequest(textToProofread, proofreader)
    }
}

suspend fun startProofreadingRequest(
    text: String, proofreader: Proofreader
) {
    // Create task request
    val proofreadingRequest =
        ProofreadingRequest.builder(text).build()

    // Start proofreading request with non-streaming response
    // More than 1 result may be returned. If multiple suggestions
    // are returned, results will be sorted by descending confidence.
    val proofreadingResults =
        proofreader.runInference(proofreadingRequest).await().results

    // You can also start a streaming request
    // proofreader.runInference(proofreadingRequest) { newText ->
    //     // show new text in UI
    // }
}

// Be sure to release the resource when no longer needed
// For example, on viewModel.onCleared() or activity.onDestroy()
proofreader.close()

জাভা

String textToProofread = "The praject is compleet but needs too be reviewd";

// Define task with required input and output format
ProofreaderOptions proofreaderOptions = 
    ProofreaderOptions
        .builder(context)
        // InputType can be KEYBOARD or VOICE. VOICE indicates that the
        // user generated text based on audio input.
        .setInputType(ProofreaderOptions.InputType.KEYBOARD)
        // Refer to ProofreaderOptions.Language for available languages
        .setLanguage(ProofreaderOptions.Language.ENGLISH)
        .build();
Proofreader proofreader = Proofreading.getClient(proofreaderOptions);

void prepareAndStartProofread(Context context) throws ExecutionException,
        InterruptedException {
    // Check feature availability, status will be one of the following:
    // UNAVAILABLE, DOWNLOADABLE, DOWNLOADING, AVAILABLE
    try {
        int featureStatus = proofreader.checkFeatureStatus().get();
        if (featureStatus == FeatureStatus.DOWNLOADABLE) {
            // Download feature if necessary.
            // If downloadFeature is not called, the first inference request
            // will also trigger the feature to be downloaded if it's not
            // already downloaded.
            proofreader.downloadFeature(new DownloadCallback() {
                @Override
                public void onDownloadCompleted() {
                    startProofreadingRequest(textToProofread, proofreader);
                }

                @Override
                public void onDownloadFailed(GenAiException e) {
                }

                @Override
                public void onDownloadProgress(long totalBytesDownloaded) {
                }

                @Override
                public void onDownloadStarted(long bytesDownloaded) {
                }
            });
        } else if (featureStatus == FeatureStatus.DOWNLOADING) {
            // Inference request will automatically run once feature is
            // downloaded.
            // If Gemini Nano is already downloaded on the device, the
            // feature-specific LoRA adapter model will be downloaded
            // very quickly. However, if Gemini Nano is not already
            // downloaded, the download process may take longer.
            startProofreadingRequest(textToProofread, proofreader);
        } else if (featureStatus == FeatureStatus.AVAILABLE) {
            startProofreadingRequest(textToProofread, proofreader);
        }
    } catch (ExecutionException | InterruptedException e) {
        e.printStackTrace();
    }
}

void startProofreadingRequest(String text, Proofreader proofreader) {
    // Create task request
    ProofreadingRequest proofreadingRequest = ProofreadingRequest
            .builder(text).build();

    try {
        // Start proofreading request with non-streaming response
        // More than 1 result may be returned. If multiple suggestions are
        // returned, results will be sorted by descending confidence.
        proofreader.runInference(proofreadingRequest).get().getResults();

        // You can also start a streaming request
        // proofreader.runInference(proofreadingRequest, newText -> {
        //     // Show new text in UI
        // });
    } catch (ExecutionException | InterruptedException e) {
        e.printStackTrace();
    }
}

// Be sure to release the resource when no longer needed
// For example, on viewModel.onCleared() or activity.onDestroy()
proofreader.close();

মডেলটি কীভাবে বিভিন্ন ধরণের ইনপুট পরিচালনা করে

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

সমর্থিত বৈশিষ্ট্য এবং সীমাবদ্ধতা

নিম্নলিখিত ভাষাগুলিতে প্রুফরিডিং সমর্থিত: ইংরেজি, জাপানি, ফরাসি, জার্মান, ইতালীয়, স্প্যানিশ এবং কোরিয়ান, এবং এগুলি ProofreaderOptions.Language এ সংজ্ঞায়িত করা আছে। ইনপুট অবশ্যই ২৫৬টির কম টোকেন হতে হবে।

নির্দিষ্ট ফিচার কনফিগারেশনের (যা ProofreaderOptions দ্বারা নির্ধারিত) প্রাপ্যতা, নির্দিষ্ট ডিভাইসের কনফিগারেশন এবং ডিভাইসে ডাউনলোড করা মডেলগুলোর ওপর নির্ভর করে পরিবর্তিত হতে পারে।

ডেভেলপারদের জন্য, অনুরোধ করা ProofreaderOptions সহ কোনো ডিভাইসে উদ্দিষ্ট API ফিচারটি সমর্থিত কিনা তা নিশ্চিত করার সবচেয়ে নির্ভরযোগ্য উপায় হলো checkFeatureStatus() মেথডটি কল করা। এই মেথডটি রানটাইমে ডিভাইসে ফিচারটির উপলব্ধতার চূড়ান্ত অবস্থা প্রদান করে।

সাধারণ সেটআপ সমস্যা

এমএল কিট জেনএআই এপিআই (ML Kit GenAI APIs) জেমিনি ন্যানো (Gemini Nano) অ্যাক্সেস করার জন্য অ্যান্ড্রয়েড এআইকোর (Android AICore) অ্যাপের উপর নির্ভর করে। যখন কোনো ডিভাইস সবেমাত্র সেটআপ করা হয় (রিসেট সহ), অথবা এআইকোর অ্যাপটি সবেমাত্র রিসেট করা হয় (যেমন ডেটা মুছে ফেলা, আনইনস্টল করে আবার ইনস্টল করা), তখন এআইকোর অ্যাপটি ইনিশিয়ালাইজেশন (সার্ভার থেকে সর্বশেষ কনফিগারেশন ডাউনলোড করা সহ) শেষ করার জন্য যথেষ্ট সময় নাও পেতে পারে। এর ফলে, এমএল কিট জেনএআই এপিআইগুলো প্রত্যাশিতভাবে কাজ নাও করতে পারে। নিচে সাধারণ কিছু সেটআপ ত্রুটির বার্তা এবং সেগুলো কীভাবে সমাধান করবেন তা দেওয়া হলো:

ত্রুটির বার্তার উদাহরণ কীভাবে সামলাতে হবে
AICore ৪-CONNECTION_ERROR এরর টাইপ এবং ৬০১-BINDING_FAILURE এরর কোড সহ ব্যর্থ হয়েছে: AICore সার্ভিস বাইন্ড করতে ব্যর্থ হয়েছে। ডিভাইস সেটআপের ঠিক পরেই ML Kit GenAI API ব্যবহার করে অ্যাপটি ইনস্টল করলে, অথবা আপনার অ্যাপটি ইনস্টল করার পর AICore আনইনস্টল করা হলে এমনটা হতে পারে। AICore অ্যাপটি আপডেট করে তারপর আপনার অ্যাপটি পুনরায় ইনস্টল করলে সমস্যাটির সমাধান হয়ে যাবে।
AICore ৩-PREPARATION_ERROR এরর টাইপ এবং ৬০৬-FEATURE_NOT_FOUND এরর কোড সহ ব্যর্থ হয়েছে: ফিচার ... উপলব্ধ নয়। AICore সর্বশেষ কনফিগারেশনগুলো ডাউনলোড করা শেষ না করলে এমনটা হতে পারে। ডিভাইসটি ইন্টারনেটের সাথে সংযুক্ত থাকলে, আপডেট হতে সাধারণত কয়েক মিনিট থেকে কয়েক ঘণ্টা সময় লাগে। ডিভাইসটি রিস্টার্ট করলে আপডেটটি দ্রুত হতে পারে।

মনে রাখবেন যে, যদি ডিভাইসটির বুটলোডার আনলক করা থাকে, তাহলে আপনি এই ত্রুটিটিও দেখতে পাবেন—এই API আনলক করা বুটলোডারযুক্ত ডিভাইস সমর্থন করে না।
AICore ১-ডাউনলোড_এরর (1-DOWNLOAD_ERROR) এরর টাইপ এবং ০-আননোন (0-UNKNOWN) এরর কোড সহ ব্যর্থ হয়েছে: ফিচার ... ফেইলর স্ট্যাটাস ০ (0) এবং esz: আনঅ্যাভেইলেবল (UNAVAILABLE) এরর সহ ব্যর্থ হয়েছে: হোস্ট ... রিজলভ করতে অক্ষম। নেটওয়ার্ক সংযোগ চালু রাখুন, কয়েক মিনিট অপেক্ষা করুন এবং আবার চেষ্টা করুন।

নমুনা কোড