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 एमबी है. अगर अनुरोध बहुत बड़ा है, तो आपको एचटीटीपी 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 Security Rules जैसी Firebase सेवाओं के ज़रिए ऐक्सेस किया जा सकता है. अगर आपको अपनी बकेट, 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 को सेट अप करने के बारे में ज़्यादा जानकारी पाने के लिए, इसका इस्तेमाल शुरू करने से जुड़ी गाइड देखें: iOS+ | Android | वेब | Flutter
यहां कुछ मुख्य टास्क दिए गए हैं, जिन्हें आपको पूरा करना होगा:
अपने Firebase प्रोजेक्ट में Cloud Storage for Firebase बकेट बनाएं या इंपोर्ट करें.
इस बकेट पर Firebase Security Rules लागू करें. Rules अनुमति वाले असली उपयोगकर्ताओं के ऐक्सेस पर पाबंदी लगाकर, आपकी फ़ाइलों को सुरक्षित रखने में मदद करता है.
अपने ऐप्लिकेशन में Cloud Storage for Firebase के लिए क्लाइंट लाइब्रेरी जोड़ें.
ध्यान दें कि इस टास्क को छोड़ा जा सकता है. हालांकि, इसके बाद आपको हमेशा अपने अनुरोधों में एमआईई टाइप और यूआरएल वैल्यू साफ़ तौर पर शामिल करनी होंगी.
दूसरा चरण: किसी बकेट में फ़ाइल अपलोड करना
Cloud Storage दस्तावेज़ में, किसी बकेट में फ़ाइलें अपलोड करने के सभी अलग-अलग तरीकों के बारे में जानकारी मिलती है. उदाहरण के लिए, उपयोगकर्ता के डिवाइस से लोकल फ़ाइलें अपलोड की जा सकती हैं. जैसे, कैमरे से ली गई फ़ोटो और वीडियो. ज़्यादा जानें: iOS+ | Android | वेब | Flutter
जब किसी फ़ाइल को बकेट में अपलोड किया जाता है, तो Cloud Storage उस फ़ाइल पर, यहां दी गई दो जानकारी अपने-आप लागू कर देता है. आपको अनुरोध में ये वैल्यू शामिल करनी होंगी, जैसा कि इस गाइड के अगले चरण में दिखाया गया है.
एमआईएम टाइप: यह फ़ाइल का मीडिया टाइप है (उदाहरण के लिए,
image/png
). अपलोड के दौरान, हम एमआईएम टाइप का अपने-आप पता लगाने की कोशिश करेंगे और उस मेटाडेटा को बकेट में मौजूद ऑब्जेक्ट पर लागू करेंगे. हालांकि, अपलोड के दौरान MIME टाइप बताने का विकल्प चुना जा सकता है.Cloud Storage for Firebase यूआरएल: यह फ़ाइल का यूनीक आइडेंटिफ़ायर होता है. यूआरएल
gs://
से शुरू होना चाहिए.
तीसरा चरण: अलग-अलग तरीकों से अनुरोध करने के लिए, फ़ाइल का MIME टाइप और यूआरएल शामिल करना
किसी फ़ाइल को बकेट में सेव करने के बाद, अनुरोध में उसका MIME टाइप और यूआरएल शामिल किया जा सकता है. ध्यान दें कि इन उदाहरणों में, बिना स्ट्रीमिंग वाले generateContent
अनुरोध को दिखाया गया है. हालांकि, स्ट्रीमिंग और चैट के साथ यूआरएल का इस्तेमाल भी किया जा सकता है.
अनुरोध में फ़ाइल शामिल करने के लिए, इनमें से किसी एक विकल्प का इस्तेमाल किया जा सकता है:
पहला विकल्प: स्टोरेज रेफ़रंस का इस्तेमाल करके MIME टाइप और यूआरएल शामिल करना
दूसरा विकल्प: एमआईई टाइप और यूआरएल को साफ़ तौर पर शामिल करें
पहला विकल्प: स्टोरेज रेफ़रंस का इस्तेमाल करके MIME टाइप और यूआरएल शामिल करना
अगर आपने फ़ाइल को अभी-अभी बकेट में अपलोड किया है और आपको फ़ाइल को अनुरोध में तुरंत शामिल करना है, तो इस विकल्प का इस्तेमाल करें. इसके लिए, आपको स्टोरेज रेफ़रंस का इस्तेमाल करना होगा. कॉल के लिए, MIME टाइप और Cloud Storage for Firebase यूआरएल, दोनों की ज़रूरत होती है.
Swift
// Upload an image file using Cloud Storage for Firebase.
let storageRef = Storage.storage().reference(withPath: "images/image.jpg")
guard let imageURL = Bundle.main.url(forResource: "image", withExtension: "jpg") else {
fatalError("File 'image.jpg' not found in main bundle.")
}
let metadata = try await storageRef.putFileAsync(from: imageURL)
// Get the MIME type and Cloud Storage for Firebase URL.
guard let mimeType = metadata.contentType else {
fatalError("The MIME type of the uploaded image is nil.")
}
// Construct a URL in the required format.
let storageURL = "gs://\(storageRef.bucket)/\(storageRef.fullPath)"
let prompt = "What's in this picture?"
// Construct the imagePart with the MIME type and the URL.
let imagePart = FileDataPart(uri: storageURL, mimeType: mimeType)
// To generate text output, call generateContent with the prompt and the imagePart.
let result = try await model.generateContent(prompt, imagePart)
if let text = result.text {
print(text)
}
Kotlin
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();
});
Web
// Upload an image file using Cloud Storage for Firebase.
const storageRef = ref(storage, "image.jpg");
const uploadResult = await uploadBytes(storageRef, file);
// Get the MIME type and Cloud Storage for Firebase URL.
// toString() is the simplest way to construct the Cloud Storage for Firebase URL
// in the required format.
const mimeType = uploadResult.metadata.contentType;
const storageUrl = uploadResult.ref.toString();
// Construct the imagePart with the MIME type and the URL.
const imagePart = { fileData: { mimeType, fileUri: storageUrl }};
// To generate text output, call generateContent with the prompt and imagePart.
const result = await model.generateContent([prompt, imagePart]);
console.log(result.response.text());
Dart
// Upload an image file using Cloud Storage for Firebase.
final storageRef = FirebaseStorage.instance.ref();
final imageRef = storageRef.child("images/image.jpg");
await imageRef.putData(data);
// Get the MIME type and Cloud Storage for Firebase file path.
final metadata = await imageRef.getMetadata();
final mimeType = metadata.contentType;
final bucket = imageRef.bucket;
final fullPath = imageRef.fullPath;
final prompt = TextPart("What's in the picture?");
// Construct a URL in the required format.
final storageUrl = 'gs://$bucket/$fullPath';
// Construct the filePart with the MIME type and the URL.
final filePart = FileData(mimeType, storageUrl);
// To generate text output, call generateContent with the text and the filePart.
final response = await model.generateContent([
Content.multi([prompt, filePart])
]);
print(response.text);
दूसरा विकल्प: MIME टाइप और यूआरएल को साफ़ तौर पर शामिल करें
अगर आपको MIME टाइप और Cloud Storage for Firebase यूआरएल की वैल्यू पता है और आपको उन्हें कई मोड वाले अनुरोध में साफ़ तौर पर शामिल करना है, तो इस विकल्प का इस्तेमाल करें. कॉल के लिए, MIME टाइप और यूआरएल, दोनों की ज़रूरत होती है.
Swift
let prompt = "What's in this picture?"
// Construct an imagePart that explicitly includes the MIME type and
// Cloud Storage for Firebase URL values.
let imagePart = FileDataPart(uri: "gs://bucket-name/path/image.jpg", mimeType: "image/jpeg")
// To generate text output, call generateContent with the prompt and imagePart.
let result = try await model.generateContent(prompt, imagePart)
if let text = result.text {
print(text)
}
Kotlin
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);
Web
const prompt = "What's in this picture?";
// Construct an imagePart that explicitly includes the MIME type and Cloud Storage for Firebase URL values.
const imagePart = { fileData: { mimeType: "image/jpeg", fileUri: "gs://bucket-name/path/image.jpg" }};
// To generate text output, call generateContent with the prompt and imagePart.
const result = await model.generateContent([prompt, imagePart]);
console.log(result.response.text());
Dart
final prompt = TextPart("What's in the picture?");
// Construct a filePart that explicitly includes the MIME type and Cloud Storage for Firebase URL values.
final filePart = FileData('image/jpeg', 'gs://bucket-name/path/image.jpg'),
// To generate text output, call generateContent with the prompt and filePart.
final response = await model.generateContent([
Content.multi([prompt, filePart])
]);
print(response.text);