GenAI পুনর্লিখন API

এমএল কিট-এর জেনএআই রিরাইটিং এপিআই (GenAI Rewriting API) ব্যবহার করে, আপনি স্বয়ংক্রিয়ভাবে ব্যবহারকারীদের চ্যাট বার্তা বা ছোট ছোট লেখা ভিন্ন শৈলী বা সুরে পুনর্লিখন করতে সাহায্য করতে পারেন।

নিম্নলিখিত ক্ষেত্রগুলিতে কোনো বিষয়বস্তু কীভাবে পুনর্লিখন করা যায়, সে বিষয়ে পরামর্শ পেলে ব্যবহারকারীরা উপকৃত হতে পারেন:

  • অংশীজনদের সাথে যোগাযোগের সময় বার্তাটিকে আরও পেশাদারী করে তোলার জন্য এর পুনর্গঠন
  • সোশ্যাল মিডিয়া প্ল্যাটফর্মে পোস্ট করার জন্য বার্তা সংক্ষিপ্ত করা
  • অ-মাতৃভাষীদের জন্য বার্তাটি পুনর্গঠন করা, যারা বার্তাটি পৌঁছে দেওয়ার বিকল্প উপায় খুঁজছেন।

মূল সক্ষমতা

এমএল কিট-এর জেনএআই রিরাইটিং এপিআই ছোট আকারের কন্টেন্টকে নিম্নলিখিত স্টাইলগুলোর যেকোনো একটিতে পুনর্লিখন করতে পারে:

  • বিশদ : ইনপুট টেক্সটকে আরও বিস্তারিত ও বর্ণনামূলক ভাষা দিয়ে প্রসারিত করে।
  • ইমোজিফাই : ইনপুট টেক্সটে প্রাসঙ্গিক ইমোজি যোগ করে, যা এটিকে আরও অভিব্যক্তিপূর্ণ ও মজাদার করে তোলে।
  • সংক্ষিপ্ত করুন : মূল বার্তা অক্ষুণ্ণ রেখে ইনপুট টেক্সটকে একটি সংক্ষিপ্ত সংস্করণে সংক্ষেপিত করে।
  • বন্ধুত্বপূর্ণ : কথোপকথনের ঢঙে ইনপুট টেক্সটকে আরও অনানুষ্ঠানিক ও সহজবোধ্য করে লেখা হয়।
  • পেশাদার : সম্মানজনক সুর ব্যবহার করে প্রদত্ত লেখাটিকে আরও আনুষ্ঠানিক ও ব্যবসায়িক আঙ্গিকে পুনর্লিখন করে।
  • পুনর্গঠন : মূল অর্থ অপরিবর্তিত রেখে ভিন্ন শব্দ ও বাক্য গঠন ব্যবহার করে ইনপুট টেক্সটকে নতুন করে লেখে।

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

উদাহরণ ফলাফল

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

শুরু করা

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

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

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

কোটলিন

val textToRewrite = "The event was successful"

// Define task with selected input and output format
val rewriterOptions = RewriterOptions.builder(context)
    // OutputType can be one of the following: ELABORATE, EMOJIFY, SHORTEN,
    // FRIENDLY, PROFESSIONAL, REPHRASE
    .setOutputType(RewriterOptions.OutputType.ELABORATE)
    // Refer to RewriterOptions.Language for available languages
    .setLanguage(RewriterOptions.Language.ENGLISH)
    .build()
val rewriter = Rewriting.getClient(rewriterOptions)

suspend fun prepareAndStartRewrite() {
    // Check feature availability, status will be one of the following:
    // UNAVAILABLE, DOWNLOADABLE, DOWNLOADING, AVAILABLE
    val featureStatus = rewriter.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.
        rewriter.downloadFeature(object : DownloadCallback {
            override fun onDownloadStarted(bytesToDownload: Long) { }

            override fun onDownloadFailed(e: GenAiException) { }

            override fun onDownloadProgress(totalBytesDownloaded: Long) {}

            override fun onDownloadCompleted() {
                startRewritingRequest(textToRewrite, rewriter)
            }
        })
    } 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
        // quickly. However, if Gemini Nano is not already downloaded,
        // the download process may take longer.
        startRewritingRequest(textToRewrite, rewriter)
    } else if (featureStatus == FeatureStatus.AVAILABLE) {
        startRewritingRequest(textToRewrite, rewriter)
    }
}

suspend fun startRewritingRequest(text: String, rewriter: Rewriter) {
    // Create task request
    val rewritingRequest = RewritingRequest.builder(text).build()

    // Start rewriting 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 rewriteResults =
        rewriter.runInference(rewritingRequest).await().results

    // You can also start a streaming request
    // rewriter.runInference(rewritingRequest) { newText ->
    //    // Show new text in UI
    // }
}

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

জাভা

String textToRewrite = "The event was successful";

// Define task with required input and output format
RewriterOptions rewriterOptions =
    RewriterOptions.builder(context)
        // OutputType can be one of the following: ELABORATE,
        // EMOJIFY, SHORTEN, FRIENDLY, PROFESSIONAL, REPHRASE
        .setOutputType(RewriterOptions.OutputType.ELABORATE)
        // Refer to RewriterOptions.Language for available
        // languages
        .setLanguage(RewriterOptions.Language.ENGLISH)
        .build();
Rewriter rewriter = Rewriting.getClient(rewriterOptions);

void prepareAndStartRewrite()
    throws ExecutionException, InterruptedException {
    // Check feature availability, status will be one of the
    // following: UNAVAILABLE, DOWNLOADABLE, DOWNLOADING, AVAILABLE
    try {
        int featureStatus = rewriter.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.
            rewriter.downloadFeature(
                new DownloadCallback() {
                    @Override
                    public void onDownloadCompleted() {
                        startRewritingRequest(textToRewrite, rewriter);
                    }

                    @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
            // quickly. However, if Gemini Nano is not already downloaded,
            // the download process may take longer.
            startRewritingRequest(textToRewrite, rewriter);
        } else if (featureStatus == FeatureStatus.AVAILABLE) {
            startRewritingRequest(textToRewrite, rewriter);
        }
    } catch (ExecutionException | InterruptedException e) {
        e.printStackTrace();
    }
}

void startRewritingRequest(String text, Rewriter rewriter) {
    // Create task request
    RewritingRequest rewritingRequest =
        RewritingRequest.builder(text).build();

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

        // You can also start a streaming request
        // rewriter.runInference(rewritingRequest, 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()
rewriter.close();

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

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

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

ডেভেলপারদের জন্য, অনুরোধ করা RewriterOptions সহ কোনো ডিভাইসে উদ্দিষ্ট 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) এরর সহ ব্যর্থ হয়েছে: হোস্ট ... রিজলভ করতে অক্ষম। নেটওয়ার্ক সংযোগ চালু রাখুন, কয়েক মিনিট অপেক্ষা করুন এবং আবার চেষ্টা করুন।

নমুনা কোড