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

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

মূল ক্ষমতা

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

উদাহরণ ফলাফল

ইনপুট

ইনপুট প্রকার

আউটপুট

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

কীবোর্ড

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

প্রকল্পটি প্রায় সম্পূর্ণ বাট খুব পর্যালোচনা করা প্রয়োজন

কীবোর্ড

প্রকল্পটি প্রায় সম্পূর্ণ কিন্তু পর্যালোচনা করা প্রয়োজন

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

ভয়েস

বারে আমার সাথে দেখা করুন.

শুরু করা

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 সংজ্ঞায়িত করা হয়েছে। ইনপুট 256 টোকেনের কম হওয়া উচিত।

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

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

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

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

উদাহরণ ত্রুটি বার্তা কিভাবে হ্যান্ডেল
AICore ত্রুটি প্রকার 4-CONNECTION_ERROR এবং ত্রুটি কোড 601-BINDING_FAILURE: AICore পরিষেবা বাঁধাই করতে ব্যর্থ হয়েছে৷ আপনি যখন ডিভাইস সেটআপের পরপরই ML Kit GenAI API ব্যবহার করে অ্যাপটি ইনস্টল করেন বা যখন আপনার অ্যাপ ইনস্টল হওয়ার পরে AICore আনইনস্টল করা হয় তখন এটি ঘটতে পারে। AICore অ্যাপ আপডেট করার পরে আপনার অ্যাপ পুনরায় ইনস্টল করলে এটি ঠিক করা উচিত।
AICore ত্রুটি প্রকার 3-PREPARATION_ERROR এবং ত্রুটি কোড 606-FEATURE_NOT_FOUND সহ ব্যর্থ হয়েছে: বৈশিষ্ট্য ... উপলব্ধ নেই৷ এটি ঘটতে পারে যখন AICore সর্বশেষ কনফিগারেশন ডাউনলোড করা শেষ করেনি। যখন ডিভাইসটি ইন্টারনেটের সাথে সংযুক্ত থাকে, তখন এটি আপডেট হতে সাধারণত কয়েক মিনিট থেকে কয়েক ঘন্টা সময় নেয়। ডিভাইস রিস্টার্ট করলে আপডেটের গতি বাড়তে পারে।

মনে রাখবেন যে ডিভাইসের বুটলোডার আনলক করা থাকলে, আপনি এই ত্রুটিটিও দেখতে পাবেন—এই API আনলক করা বুটলোডারগুলির সাথে ডিভাইসগুলিকে সমর্থন করে না।
AICore ত্রুটির ধরন 1-DOWNLOAD_ERROR এবং ত্রুটি কোড 0-অজানা: বৈশিষ্ট্য ... ব্যর্থতার স্থিতি 0 এবং ত্রুটি esz সহ ব্যর্থ হয়েছে: অনুপলব্ধ: হোস্ট সমাধান করতে অক্ষম ... নেটওয়ার্ক সংযোগ রাখুন, কয়েক মিনিট অপেক্ষা করুন এবং পুনরায় চেষ্টা করুন।