मल्टीमॉडल अनुरोधों में बड़ी फ़ाइलें शामिल करें और 'Firebase के लिए Cloud Storage' का इस्तेमाल करके फ़ाइलें मैनेज करें

Vertex AI in Firebase SDK टूल का इस्तेमाल करके, अपने ऐप्लिकेशन से Gemini API को कॉल करते समय, Gemini मॉडल को कई तरह के इनपुट के आधार पर टेक्स्ट जनरेट करने के लिए कहा जा सकता है. मल्टीमोडल प्रॉम्प्ट में कई मोडलिटी (या इनपुट के टाइप) शामिल हो सकती हैं. जैसे, टेक्स्ट के साथ इमेज, PDF, वीडियो, और ऑडियो.

इनपुट के बिना टेक्स्ट वाले हिस्सों (जैसे, मीडिया फ़ाइलें) के लिए, अनुरोध में फ़ाइलों को शामिल करने के लिए Cloud Storage for Firebase का इस्तेमाल करें. हालांकि, ऐसा करना ज़रूरी नहीं है. इस सुविधा के बारे में आपको ये बातें जाननी चाहिए:

  • Cloud Storage for Firebase का इस्तेमाल किसी भी मल्टीमोडल अनुरोध के साथ किया जा सकता है. जैसे, टेक्स्ट जनरेट करना और चैट करना. इस गाइड में दिए गए उदाहरणों में, टेक्स्ट और इमेज का बुनियादी इनपुट दिखाया गया है.

  • अनुरोध के इनपुट में, फ़ाइल के MIME टाइप और उसके Cloud Storage for Firebase यूआरएल (जो हमेशा gs:// से शुरू होता है) की जानकारी दें. ये वैल्यू, Cloud Storage बकेट में अपलोड की गई किसी भी फ़ाइल के लिए अपने-आप असाइन हो जाती हैं.

  • आपको ऐसे फ़ाइल टाइप और यूआरएल का इस्तेमाल करना होगा जो काम करता हो.


इस समाधान गाइड में, Cloud Storage for Firebase को सेट अप करने, अपने ऐप्लिकेशन से Cloud Storage for Firebase बकेट में फ़ाइल अपलोड करने, और फिर Gemini API के लिए अपने मल्टीमोडल अनुरोध में फ़ाइल का MIME टाइप और Cloud Storage for Firebase यूआरएल शामिल करने का तरीका बताया गया है.

क्या आपको कोड के उदाहरण देखने हैं? क्या आपने पहले से ही Cloud Storage for Firebase सेट अप कर लिया है और अब आपको कई तरीकों से किए जाने वाले अनुरोधों के साथ इसका इस्तेमाल करना है?

कोड के उदाहरणों पर जाएं

अपने ऐप्लिकेशन के साथ Cloud Storage for Firebase का इस्तेमाल क्यों करना चाहिए?

Cloud Storage for Firebase, ब्लॉब और फ़ाइलों को सेव करने के लिए, Google Cloud Storage के जैसे ही तेज़, सुरक्षित, और स्केलेबल इन्फ़्रास्ट्रक्चर का इस्तेमाल करता है. साथ ही, इसके क्लाइंट SDK टूल खास तौर पर मोबाइल और वेब ऐप्लिकेशन के लिए बनाए गए हैं.

Vertex AI in Firebase एसडीके के लिए, अनुरोध का साइज़ ज़्यादा से ज़्यादा 20 एमबी हो सकता है. अगर कोई अनुरोध बहुत बड़ा होता है, तो आपको HTTP 413 गड़बड़ी मिलती है. अगर किसी फ़ाइल की वजह से, अनुरोध का कुल साइज़ 20 एमबी से ज़्यादा हो जाता है, तो फ़ाइल को अपने मल्टीमोडल अनुरोध में शामिल करने के लिए, Cloud Storage for Firebase यूआरएल का इस्तेमाल करें. हालांकि, अगर कोई फ़ाइल छोटी है, तो उसे सीधे इनलाइन डेटा के तौर पर पास किया जा सकता है. ध्यान दें, इनलाइन डेटा के तौर पर दी गई फ़ाइल को एक जगह से दूसरी जगह भेजने के दौरान, base64 में एन्कोड किया जाता है. इससे अनुरोध का साइज़ बढ़ जाता है.

Cloud Storage for Firebase का इस्तेमाल करने के कुछ और फ़ायदे यहां दिए गए हैं:

  • असली उपयोगकर्ताओं को सीधे अपने ऐप्लिकेशन से इमेज को Cloud Storage for Firebase बकेट में अपलोड करने के लिए कहा जा सकता है. इसके बाद, आपके पास उन इमेज को अपने मल्टीमोडल प्रॉम्प्ट में शामिल करने का विकल्प होता है. इसके लिए, आपको सिर्फ़ फ़ाइल का MIME टाइप और Cloud Storage for Firebase यूआरएल (जो फ़ाइल का आइडेंटिफ़ायर होता है) तय करके, अपने मल्टीमॉडल प्रॉम्प्ट में शामिल किया जा सकता है.

  • अगर उपयोगकर्ताओं को इमेज सबमिट करनी हैं, तो आपके पास उनके समय और बैंडविड्थ को बचाने का विकल्प है. ऐसा खास तौर पर तब किया जा सकता है, जब उनके नेटवर्क की क्वालिटी खराब हो या कभी-कभी काम न कर रही हो.

    • अगर किसी फ़ाइल को अपलोड या डाउनलोड करने में रुकावट आती है, तो Cloud Storage for Firebase SDK टूल काम को अपने-आप वहीं से शुरू कर देता है जहां उसे छोड़ा गया था.
    • अपलोड की गई एक ही फ़ाइल का इस्तेमाल कई बार किया जा सकता है. इसके लिए, असली उपयोगकर्ता को आपके ऐप्लिकेशन में हर बार एक ही फ़ाइल अपलोड करने की ज़रूरत नहीं होती (जैसे, किसी नए मल्टीमॉडल अनुरोध में).
  • Firebase Security Rules का इस्तेमाल करके, असली उपयोगकर्ता को Cloud Storage for Firebase में सेव की गई फ़ाइलों का ऐक्सेस दिया जा सकता है. इससे सिर्फ़ वही उपयोगकर्ता फ़ाइलें अपलोड, डाउनलोड या मिटा सकता है जिनके पास ऐसा करने की अनुमति है.

  • अपनी बकेट में मौजूद फ़ाइलों को Firebase या Google Cloud से ऐक्सेस किया जा सकता है. इससे, आपको Google Cloud Storage एपीआई का इस्तेमाल करके, सर्वर साइड प्रोसेसिंग करने की सुविधा मिलती है. जैसे, इमेज फ़िल्टर करना या वीडियो ट्रांसकोड करना.

किस तरह की फ़ाइलें और यूआरएल इस्तेमाल किए जा सकते हैं?

Vertex AI in Firebase SDK टूल के साथ Cloud Storage for Firebase यूआरएल इस्तेमाल करने के लिए, फ़ाइलों और यूआरएल से जुड़ी ज़रूरी शर्तें यहां दी गई हैं:

  • Vertex AI in Firebase SDK टूल का इस्तेमाल करते समय, फ़ाइल को मल्टीमोडल अनुरोधों के लिए इनपुट फ़ाइलों की ज़रूरी शर्तों को पूरा करना होगा. इसमें MIME टाइप और फ़ाइल साइज़ जैसी ज़रूरी शर्तें शामिल हैं.

  • फ़ाइल, Cloud Storage for Firebase बकेट में सेव होनी चाहिए. इसका मतलब है कि Firebase की सेवाओं, जैसे कि Firebase Security Rules के लिए बकेट को ऐक्सेस किया जा सकता है. अगर आपके पास Firebase कंसोल में अपना बकेट देखने का विकल्प है, तो इसका मतलब है कि यह Cloud Storage for Firebase बकेट है.

  • Cloud Storage for Firebase बकेट उसी Firebase प्रोजेक्ट में होनी चाहिए जिसमें आपने अपना ऐप्लिकेशन रजिस्टर किया है.

  • फ़ाइल का Cloud Storage for Firebase यूआरएल gs:// से शुरू होना चाहिए. इसी तरह, सभी Google Cloud Storage यूआरएल बनाए जाते हैं.

  • फ़ाइल का यूआरएल, "ब्राउज़र" यूआरएल नहीं हो सकता. उदाहरण के लिए, इंटरनेट पर मिलने वाली इमेज का यूआरएल.

साथ ही, आपकी बकेट के लिए Firebase Security Rules को फ़ाइल का सही ऐक्सेस देना चाहिए. उदाहरण के लिए:

  • अगर आपके पास सार्वजनिक नियम हैं, तो कोई भी उपयोगकर्ता या क्लाइंट, Vertex AI in Firebase SDK टूल का इस्तेमाल करके, फ़ाइल को ऐक्सेस कर सकता है और कॉल में उसका यूआरएल दे सकता है. इस तरह के नियमों का इस्तेमाल सिर्फ़ शुरुआत करने और शुरुआती प्रोटोटाइपिंग के दौरान किया जाना चाहिए (जब तक कि फ़ाइलें वाकई सार्वजनिक तौर पर ऐक्सेस करने लायक न हों).

  • अगर आपने बेहतर नियम (इसका सुझाव दिया जाता है), तो Firebase इस बात की जांच करेगा कि साइन इन किए हुए उपयोगकर्ता या क्लाइंट के पास, दिए गए यूआरएल का इस्तेमाल करने से पहले, फ़ाइल का ज़रूरी ऐक्सेस है या नहीं.

Vertex AI in Firebase के साथ Cloud Storage for Firebase यूआरएल का इस्तेमाल करना

पहला चरण: Cloud Storage for Firebase सेट अप करना

Cloud Storage for Firebase को सेट अप करने और इस्तेमाल करने के बारे में ज़्यादा जानकारी के लिए, शुरू करने की गाइड देखें.

Cloud Storage for Firebase शुरुआती निर्देशों वाली गाइड पर जाएं

यहां कुछ मुख्य टास्क दिए गए हैं, जिन्हें आपको पूरा करना होगा:

  1. अपने Firebase प्रोजेक्ट में Cloud Storage for Firebase बकेट बनाएं.

    अगर आपके Google Cloud प्रोजेक्ट में पहले से ही कोई Cloud Storage बकेट मौजूद है और आपको उसका इस्तेमाल Vertex AI in Firebase के साथ करना है, तो बकेट को Firebase में "इंपोर्ट" करके, उसे Firebase की सेवाओं (Vertex AI in Firebase के साथ) के लिए ऐक्सेस किया जा सकता है.

  2. इस बकेट पर Firebase Security Rules लागू करें. Firebase Security Rules की मदद से, अपनी फ़ाइलों को सुरक्षित रखा जा सकता है. इसके लिए, आपको सिर्फ़ उन असली उपयोगकर्ताओं को ऐक्सेस देना होगा जिन्हें अनुमति मिली है.

  3. अपने ऐप्लिकेशन में Cloud Storage for Firebase के लिए क्लाइंट लाइब्रेरी जोड़ें.

    ध्यान दें कि इस टास्क को छोड़ा जा सकता है. हालांकि, इसके बाद आपको हमेशा मल्टीमोडल अनुरोधों में एमआईएम टाइप और Cloud Storage for Firebase यूआरएल वैल्यू साफ़ तौर पर शामिल करनी होंगी.

दूसरा चरण: किसी बकेट में फ़ाइल अपलोड करना

Cloud Storage for Firebase दस्तावेज़ में, फ़ाइलों को Cloud Storage for Firebase बकेट में अपलोड करने के सभी अलग-अलग तरीकों के बारे में बताया गया है. उदाहरण के लिए, आपके पास असली उपयोगकर्ता के डिवाइस से लोकल फ़ाइलें अपलोड करने का विकल्प होता है. जैसे, कैमरे से ली गई फ़ोटो और वीडियो.

जब किसी फ़ाइल को बकेट में अपलोड किया जाता है, तो Cloud Storage उस फ़ाइल पर नीचे दी गई दो जानकारी अपने-आप लागू कर देता है. आपको मल्टीमॉडल अनुरोध में इन वैल्यू को शामिल करना होगा (जैसा कि इस गाइड के अगले चरण में दिखाया गया है).

  • एमआईएम टाइप: यह फ़ाइल का मीडिया टाइप है. उदाहरण के लिए, image/png. अपलोड के दौरान, Cloud Storage for Firebase अपने-आप एमआईएम टाइप का पता लगाने की कोशिश करेगा और उस मेटाडेटा को बकेट में मौजूद ऑब्जेक्ट पर लागू करेगा. हालांकि, अपलोड के दौरान MIME टाइप की जानकारी देना ज़रूरी नहीं है.

  • Cloud Storage for Firebase यूआरएल: यह फ़ाइल के लिए यूनीक आइडेंटिफ़ायर होता है. यूआरएल gs:// से शुरू होना चाहिए.

तीसरा चरण: अलग-अलग तरीकों से अनुरोध करने के लिए, फ़ाइल का MIME टाइप और यूआरएल शामिल करना

जब किसी फ़ाइल को Cloud Storage for Firebase बकेट में सेव कर लिया जाता है, तो उसके एमआईएमई टाइप और Cloud Storage for Firebase यूआरएल को मल्टीमोडल अनुरोध में शामिल किया जा सकता है. ध्यान दें कि इन उदाहरणों में, स्ट्रीमिंग नहीं करने वाले generateContent अनुरोध को दिखाया गया है. हालांकि, स्ट्रीमिंग और चैट के साथ Cloud Storage for Firebase यूआरएल का इस्तेमाल भी किया जा सकता है.

अनुरोध में फ़ाइल शामिल करने के लिए, इनमें से किसी एक विकल्प का इस्तेमाल किया जा सकता है:

पहला विकल्प: स्टोरेज रेफ़रंस का इस्तेमाल करके MIME टाइप और यूआरएल शामिल करना

अगर आपने फ़ाइल को अभी-अभी बकेट में अपलोड किया है और आपको उसे कई तरीकों से अनुरोध करने की सुविधा वाले अनुरोध में, स्टोरेज रेफ़रंस के ज़रिए तुरंत शामिल करना है, तो इस विकल्प का इस्तेमाल करें. कॉल के लिए, MIME टाइप और Cloud Storage for Firebase यूआरएल, दोनों की ज़रूरत होती है.

Kotlin+KTX

Kotlin की मदद से, इस SDK टूल में दिए गए तरीके सस्पेंड फ़ंक्शन हैं. साथ ही, इन्हें कोरूटीन स्कोप से कॉल करना ज़रूरी है.
// Upload an image file using Cloud Storage for Firebase.
val storageRef = Firebase.storage.reference.child("images/image.jpg")
val fileUri = Uri.fromFile(File("image.jpg"))
try {
    val taskSnapshot = storageRef.putFile(fileUri).await()
    // Get the MIME type and Cloud Storage for Firebase file path.
    val mimeType = taskSnapshot.metadata?.contentType
    val bucket = taskSnapshot.metadata?.bucket
    val filePath = taskSnapshot.metadata?.path

    if (mimeType != null && bucket != null) {
        // Construct a URL in the required format.
        val storageUrl = "gs://$bucket/$filePath"
        // Construct a prompt that includes text, the MIME type, and the URL.
        val prompt = content {
            fileData(mimeType = mimeType, uri = storageUrl)
            text("What's in this picture?")
        }
        // To generate text output, call generateContent with the prompt.
        val response = generativeModel.generateContent(prompt)
        println(response.text)
    }
} catch (e: StorageException) {
    // An error occurred while uploading the file.
} catch (e: GoogleGenerativeAIException) {
    // An error occurred while generating text.
}

Java

Java के लिए, इस SDK टूल के तरीके ListenableFuture दिखाते हैं.
// Upload an image file using Cloud Storage for Firebase.
StorageReference storage = FirebaseStorage.getInstance().getReference("images/image.jpg");
Uri fileUri = Uri.fromFile(new File("images/image.jpg"));

storage.putFile(fileUri).addOnSuccessListener(taskSnapshot -> {
    // Get the MIME type and Cloud Storage for Firebase file path.
    String mimeType = taskSnapshot.getMetadata().getContentType();
    String bucket = taskSnapshot.getMetadata().getBucket();
    String filePath = taskSnapshot.getMetadata().getPath();

    if (mimeType != null && bucket != null) {
        // Construct a URL in the required format.
        String storageUrl = "gs://" + bucket + "/" + filePath;
        // Create a prompt that includes text, the MIME type, and the URL.
        Content prompt = new Content.Builder()
                .addFileData(storageUrl, mimeType)
                .addText("What's in this picture?")
                .build();

        // To generate text output, call generateContent with the prompt.
        GenerativeModelFutures modelFutures = GenerativeModelFutures.from(model);
        ListenableFuture<GenerateContentResponse> response = modelFutures.generateContent(prompt);
        Futures.addCallback(response, new FutureCallback<>() {
            @Override
            public void onSuccess(GenerateContentResponse result) {
                String resultText = result.getText();
                System.out.println(resultText);
            }

            @Override
            public void onFailure(@NonNull Throwable t) {
                t.printStackTrace();
            }
        }, executor);
    }
}).addOnFailureListener(e -> {
    // An error occurred while uploading the file.
    e.printStackTrace();
});

दूसरा विकल्प: MIME टाइप और यूआरएल को साफ़ तौर पर शामिल करें

अगर आपको MIME टाइप और Cloud Storage for Firebase यूआरएल की वैल्यू पता है और आपको उन्हें कई मोड वाले अनुरोध में साफ़ तौर पर शामिल करना है, तो इस विकल्प का इस्तेमाल करें. कॉल के लिए MIME टाइप और यूआरएल, दोनों की ज़रूरत होती है.

Kotlin+KTX

Kotlin के लिए, इस SDK टूल में मौजूद मैथड, सस्पेंड फ़ंक्शन हैं. इन्हें कोरूटीन स्कोप से कॉल किया जाना चाहिए.
// Construct a prompt that explicitly includes the MIME type and Cloud Storage for Firebase URL values.
val prompt = content {
    fileData(mimeType = "image/jpeg", uri = "gs://bucket-name/path/image.jpg")
    text("What's in this picture?")
}
// To generate text output, call generateContent with the prompt.
val response = generativeModel.generateContent(prompt)
println(response.text)

Java

Java के लिए, इस SDK टूल के तरीके ListenableFuture दिखाते हैं.
// Construct a prompt that explicitly includes the MIME type and Cloud Storage for Firebase URL values.
Content prompt = new Content.Builder()
        .addFilePart("gs://bucket-name/path/image.jpg", "image/jpeg")
        .addText("What's in this picture?")
        .build();

// To generate text output, call generateContent with the prompt
GenerativeModelFutures modelFutures = GenerativeModelFutures.from(model);
ListenableFuture<GenerateContentResponse> response = modelFutures.generateContent(prompt);
Futures.addCallback(response, new FutureCallback<>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        String resultText = result.getText();
        System.out.println(resultText);
    }

    @Override
    public void onFailure(@NonNull Throwable t) {
        t.printStackTrace();
    }
}, executor);