GenAI পুনর্লিখন API

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

নিম্নলিখিত ক্ষেত্রে বিষয়বস্তুর একটি অংশ কীভাবে পুনরায় লিখতে হয় সে বিষয়ে পরামর্শ প্রদান করা ব্যবহারকারীদের সহায়ক মনে হতে পারে:

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

মূল ক্ষমতা

ML Kit-এর GenAI Rewriting API নিম্নলিখিত শৈলীগুলির মধ্যে একটিতে সামগ্রীর ছোট টুকরো পুনরায় লিখতে পারে:

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

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

উদাহরণ ফলাফল

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

শুরু করা

GenAI পুনর্লিখন 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 Rewriting API নিম্নলিখিত ভাষাগুলিকে সমর্থন করে: ইংরেজি, জাপানি, ফ্রেঞ্চ, জার্মান, ইতালীয়, স্প্যানিশ এবং কোরিয়ান, এবং সেগুলি RewriterOptions.Language এ সংজ্ঞায়িত করা হয়েছে। ইনপুট 256 টোকেনের কম হওয়া উচিত।

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

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