ML Kit के GenAI Rewriting API की मदद से, उपयोगकर्ताओं को चैट मैसेज या छोटे कॉन्टेंट को अलग स्टाइल या टोन में फिर से लिखने में मदद की जा सकती है.
उपयोगकर्ताओं को इन मामलों में, कॉन्टेंट को फिर से लिखने के सुझाव मिल सकते हैं. इससे उन्हें मदद मिल सकती है:
- हितधारकों से बातचीत करते समय, मैसेज को ज़्यादा पेशेवर तरीके से फिर से लिखना
- मैसेज को छोटा करना, ताकि उसे सोशल मीडिया प्लैटफ़ॉर्म पर पोस्ट किया जा सके
- मैसेज को दूसरी भाषा में बोलने वालों के लिए फिर से लिखना, ताकि वे मैसेज को कम्यूनिकेट करने के अन्य तरीके खोज सकें
मुख्य सुविधाएं
ML Kit के GenAI Rewriting API की मदद से, छोटे कॉन्टेंट को इन स्टाइल में फिर से लिखा जा सकता है:
- बड़ा करें: इससे इनपुट किए गए टेक्स्ट में ज़्यादा जानकारी और ब्यौरे वाली भाषा जोड़ दी जाती है.
- Emojify: इससे इनपुट टेक्स्ट में सही इमोजी जुड़ जाते हैं. इससे टेक्स्ट ज़्यादा मज़ेदार और दिलचस्प बन जाता है.
- छोटा करें: इस विकल्प को चुनने पर, इनपुट टेक्स्ट को छोटा कर दिया जाता है. हालांकि, इसमें मुख्य मैसेज को बरकरार रखा जाता है.
- दोस्ताना: इससे इनपुट किए गए टेक्स्ट को ज़्यादा कैज़ुअल और आसानी से समझ में आने वाले तरीके से लिखा जाता है. इसके लिए, बातचीत वाली टोन का इस्तेमाल किया जाता है.
- प्रोफ़ेशनल: यह इनपुट किए गए टेक्स्ट को ज़्यादा फ़ॉर्मल और बिज़नेस के हिसाब से दोबारा लिखता है. इसमें सम्मानजनक टोन का इस्तेमाल किया जाता है.
- अलग तरीके से फिर से लिखें: इस विकल्प को चुनने पर, इनपुट टेक्स्ट को अलग-अलग शब्दों और वाक्य के स्ट्रक्चर का इस्तेमाल करके फिर से लिखा जाता है. हालांकि, इसका मूल मतलब वही रहता है.
अनुरोधों के जवाब में कम से कम एक सुझाव मिलेगा. अगर एक से ज़्यादा सुझाव मिलते हैं, तो नतीजों को भरोसेमंद होने के क्रम में लगाया जाएगा.
परिणामों के उदाहरण
इनपुट | फिर से लिखने की स्टाइल | आउटपुट |
क्या आपको इस बारे में ज़्यादा जानने के लिए मीटिंग करनी है? | प्रोफ़ेशनल | क्या आपको इस बारे में आगे बातचीत करने के लिए, हमसे दोबारा मिलना है? |
मैं आपसे अनुरोध करना चाहता हूं कि आप इस शनिवार की शाम को मेरे घर पर होने वाले एक सामान्य गेट-टुगेदर में शामिल हों | छोटा करें | क्या तुम इस शनिवार शाम को मेरे घर पर होने वाली एक छोटी-सी पार्टी में शामिल होना चाहोगी? |
इवेंट पूरा हो गया | बड़ा करें | यह इवेंट हमारी उम्मीदों से ज़्यादा सफल रहा. |
चलो, जल्द ही कभी कॉफ़ी पीने चलते हैं | इमोजीफ़ाई करो | चलो, जल्द ही कॉफ़ी ☕ पीने चलते हैं 👋. |
दिन के आखिर तक रिपोर्ट सबमिट करें | दोस्ताना | क्या कृपया आज शाम तक रिपोर्ट शेयर की जा सकती है? |
अरे, मुझे वह चीज़ तुरंत चाहिए | प्रोफ़ेशनल | क्या कृपया मांगे गए दस्तावेज़ को जल्द से जल्द सबमिट किया जा सकता है? |
प्रोजेक्ट तय समय से पीछे चल रहा है | बेहतर बनाओ | ओरिजनल समयसीमा को पूरा करने के लिए, प्रोजेक्ट की टाइमलाइन में बदलाव करना होगा |
शुरू करें
GenAI Rewriting API का इस्तेमाल शुरू करने के लिए, इस डिपेंडेंसी को अपने प्रोजेक्ट की बिल्ड फ़ाइल में जोड़ें.
implementation("com.google.mlkit:genai-rewriting:1.0.0-beta1")
इसके बाद, ज़रूरी विकल्पों के साथ Rewriter
क्लाइंट को इंस्टैंटिएट करें. साथ ही, यह देखें कि डिवाइस पर मौजूद मॉडल की ज़रूरी सुविधाएं उपलब्ध हैं या नहीं. अगर ज़रूरी हो, तो उन्हें डाउनलोड करें. इसके बाद, अपने इनपुट टेक्स्ट को अनुरोध के तौर पर तैयार करें. सुझाव पाने के लिए, फिर से लिखने की प्रोसेस चलाएं और संसाधनों को रिलीज़ करें.
Kotlin
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()
Java
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, Gemini Nano को ऐक्सेस करने के लिए Android AICore ऐप्लिकेशन पर निर्भर करते हैं. जब किसी डिवाइस को सेट अप किया जाता है (रीसेट करने के बाद भी), तो 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 ने नए कॉन्फ़िगरेशन डाउनलोड न किए हों. डिवाइस के इंटरनेट से कनेक्ट होने पर, अपडेट होने में कुछ मिनट से लेकर कुछ घंटे तक लग सकते हैं. डिवाइस को रीस्टार्ट करने से, अपडेट की प्रोसेस तेज़ हो सकती है.
ध्यान दें कि अगर डिवाइस का बूटलोडर अनलॉक है, तो आपको यह गड़बड़ी दिखेगी. यह एपीआई, अनलॉक किए गए बूटलोडर वाले डिवाइसों के साथ काम नहीं करता. |
AICore में गड़बड़ी हुई है. गड़बड़ी का टाइप 1-DOWNLOAD_ERROR है और गड़बड़ी का कोड 0-UNKNOWN है: सुविधा ... में गड़बड़ी हुई है. गड़बड़ी की स्थिति 0 है और गड़बड़ी esz: UNAVAILABLE है: होस्ट ... को हल नहीं किया जा सका | इंटरनेट कनेक्शन चालू रखें. कुछ मिनट इंतज़ार करें और फिर से कोशिश करें. |