| শুধুমাত্র তখনই উপলব্ধ যখন আপনার এপিআই প্রদানকারী হিসেবে ভার্টেক্স এআই জেমিনি এপিআই ব্যবহার করা হয়। |
আপনার অ্যাপ থেকে Firebase AI Logic SDK ব্যবহার করে Vertex AI Gemini API-কে কল করার সময়, আপনি ছবি, পিডিএফ, ভিডিও এবং অডিওর মতো মাল্টিমোডাল ইনপুটের উপর ভিত্তি করে টেক্সট তৈরি করার জন্য একটি Gemini মডেলকে নির্দেশ দিতে পারেন।
ইনপুটের টেক্সট-বহির্ভূত অংশগুলোর (যেমন মিডিয়া ফাইল) জন্য, আপনি ঐচ্ছিকভাবে অনুরোধে ফাইল অন্তর্ভুক্ত করতে Cloud Storage for Firebase ব্যবহার করতে পারেন। মোটামুটিভাবে, এই ফিচারটি সম্পর্কে আপনার যা জানা প্রয়োজন তা হলো:
আপনি যদি Vertex AI Gemini API ব্যবহার করেন, তাহলে যেকোনো মাল্টিমোডাল অনুরোধের (যেমন টেক্সট জেনারেশন এবং চ্যাট উভয়ই) জন্য Cloud Storage for Firebase ব্যবহার করতে পারবেন। এই গাইডের উদাহরণগুলিতে একটি সাধারণ টেক্সট ও ইমেজ ইনপুট দেখানো হয়েছে।
অনুরোধের ইনপুটে আপনি ফাইলটির MIME টাইপ এবং এর Cloud Storage for Firebase URL (যা সর্বদা
gs://দিয়ে শুরু হয়) উল্লেখ করেন। এই মানগুলো হলো মেটাডেটা, যা Cloud Storage বাকেটে আপলোড করা যেকোনো ফাইলে স্বয়ংক্রিয়ভাবে যুক্ত হয়।আপনাকে একটি সমর্থিত ফাইল টাইপ এবং ইউআরএল ব্যবহার করতে হবে।
এই সমাধান নির্দেশিকায় বর্ণনা করা হয়েছে কীভাবে Cloud Storage for Firebase সেট আপ করতে হয়, আপনার অ্যাপ থেকে Cloud Storage for Firebase বাকেটে একটি ফাইল আপলোড করতে হয়, এবং তারপরে Gemini API- তে আপনার মাল্টিমোডাল অনুরোধে ফাইলটির MIME টাইপ এবং Cloud Storage for Firebase URL অন্তর্ভুক্ত করতে হয়।
Do you want to see the code examples? Or have you already set up Cloud Storage for Firebase and you're ready to start using it with your multimodal requests?
Why use Cloud Storage for Firebase with your app?
Cloud Storage for Firebase ব্লব এবং ফাইল সংরক্ষণের জন্য Google Cloud Storage মতোই দ্রুত, নিরাপদ এবং স্কেলেবল পরিকাঠামো ব্যবহার করে, এবং এর ক্লায়েন্ট এসডিকেগুলো বিশেষভাবে মোবাইল ও ওয়েব অ্যাপের জন্য তৈরি করা হয়েছে।
Firebase AI Logic SDK-গুলোর জন্য, সর্বোচ্চ রিকোয়েস্ট সাইজ হলো ২০ মেগাবাইট। রিকোয়েস্টের আকার খুব বড় হলে আপনি একটি HTTP 413 এরর পাবেন। যদি কোনো ফাইলের আকারের কারণে মোট রিকোয়েস্ট সাইজ ২০ মেগাবাইট ছাড়িয়ে যায়, তাহলে আপনার মাল্টিমোডাল রিকোয়েস্টে ফাইলটি অন্তর্ভুক্ত করার জন্য একটি Cloud Storage for Firebase URL ব্যবহার করুন। তবে, ফাইলটি ছোট হলে, আপনি প্রায়শই এটিকে সরাসরি ইনলাইন ডেটা হিসেবে পাঠাতে পারেন (তবে মনে রাখবেন, ইনলাইন ডেটা হিসেবে দেওয়া ফাইল স্থানান্তরের সময় base64-এ এনকোড করা হয়, যা রিকোয়েস্টের আকার বাড়িয়ে দেয়)।
Here are some additional benefits of using Cloud Storage for Firebase :
ব্যবহারকারীরা আপনার অ্যাপ থেকে সরাসরি Cloud Storage for Firebase বাকেটে ছবি আপলোড করতে পারেন, এবং তারপর শুধু ফাইলটির MIME টাইপ ও Cloud Storage for Firebase URL (যা ফাইলটির একটি আইডেন্টিফায়ার) উল্লেখ করে সেই ছবিগুলো আপনার মাল্টিমোডাল প্রম্পটে অন্তর্ভুক্ত করতে পারেন।
You can save your end users time and bandwidth if they need to provide images, especially if they have poor or flaky network quality.
- যদি কোনো ফাইল আপলোড বা ডাউনলোড বাধাগ্রস্ত হয়, তাহলে Cloud Storage for Firebase এসডিকে স্বয়ংক্রিয়ভাবে ঠিক যেখান থেকে থেমেছিল সেখান থেকেই অপারেশনটি পুনরায় শুরু করে।
- একই আপলোড করা ফাইল একাধিকবার ব্যবহার করা যেতে পারে, এবং এর জন্য ব্যবহারকারীকে আপনার অ্যাপে প্রতিবার প্রয়োজনের সময় (যেমন একটি নতুন মাল্টিমোডাল অনুরোধে) একই ফাইল আপলোড করতে হবে না।
আপনি Firebase Security Rules ব্যবহার করে Cloud Storage for Firebase এ সংরক্ষিত ফাইলগুলিতে সাধারণ ব্যবহারকারীর অ্যাক্সেস সীমাবদ্ধ করতে পারেন, যা শুধুমাত্র একজন অনুমোদিত ব্যবহারকারীকেই ফাইল আপলোড, ডাউনলোড বা ডিলিট করার অনুমতি দেয়।
আপনি Firebase অথবা Google Cloud থেকে আপনার বাকেটের ফাইলগুলো অ্যাক্সেস করতে পারেন, যা আপনাকে Google Cloud Storage API ব্যবহার করে ইমেজ ফিল্টারিং বা ভিডিও ট্রান্সকোডিংয়ের মতো সার্ভার-সাইড প্রসেসিং করার সুবিধা দেয়।
কোন ধরনের ফাইল এবং ইউআরএল সমর্থিত?
Here are the requirements for files and URLs when you want to use Cloud Storage for Firebase URLs with the Firebase AI Logic SDKs:
The file must meet the requirements of input files for multimodal requests . This includes requirements like MIME type and file size.
ফাইলটি অবশ্যই একটি Cloud Storage for Firebase বাকেটে সংরক্ষিত থাকতে হবে (যার অর্থ হলো বাকেটটি Firebase Security Rules মতো ফায়ারবেস পরিষেবাগুলোর জন্য অ্যাক্সেসযোগ্য)। যদি আপনি আপনার বাকেটটি Firebase কনসোলে দেখতে পান, তাহলে এটি একটি Cloud Storage for Firebase বাকেট।
The Cloud Storage for Firebase bucket must be in the same Firebase project in which you registered your app.
The file's Cloud Storage for Firebase URL must begin with
gs://, which is the way that all Google Cloud Storage URLs are constructed.The file's URL cannot be a "browser" URL (for example, the URL of an image that you find on the internet).
Also, the Firebase Security Rules for your bucket must allow appropriate access to the file. For example:
If you have public rules , then any user or client can access the file.
আপনার যদি শক্তিশালী নিয়মাবলী থাকে (যা জোরালোভাবে সুপারিশ করা হয়) , তাহলে Firebase প্রদত্ত URL-এর মাধ্যমে কলটি সম্পন্ন করার অনুমতি দেওয়ার আগে যাচাই করে দেখবে যে সাইন-ইন করা ব্যবহারকারী বা ক্লায়েন্টের ফাইলটিতে পর্যাপ্ত অ্যাক্সেস আছে কি না।
Use Cloud Storage for Firebase URLs with Firebase AI Logic
| শুধুমাত্র তখনই উপলব্ধ যখন আপনার এপিআই প্রদানকারী হিসেবে ভার্টেক্স এআই জেমিনি এপিআই ব্যবহার করা হয়। |
ধাপ ১ : Cloud Storage for Firebase সেট আপ করুন
You can find detailed instructions for setting up Cloud Storage for Firebase in its getting started guide: iOS+ | Android | Web | Flutter | Unity
Here are the high-level tasks that you'll need to do:
আপনার Firebase প্রজেক্টে একটি Cloud Storage for Firebase বাকেট তৈরি বা ইম্পোর্ট করুন।
এই বাকেটে Firebase Security Rules প্রয়োগ করুন। Security Rules শুধুমাত্র অনুমোদিত ব্যবহারকারীদের অ্যাক্সেস সীমাবদ্ধ করে আপনার ফাইল সুরক্ষিত করতে সাহায্য করে।
Add the client library for Cloud Storage for Firebase to your app.
Note that you can skip this task, but you must then always explicitly include the MIME type and URL values in your requests .
ধাপ ২ : একটি বাকেটে ফাইল আপলোড করুন
Cloud Storage ডকুমেন্টেশনে, আপনি একটি বাকেটে ফাইল আপলোড করার বিভিন্ন উপায় সম্পর্কে জানতে পারবেন। উদাহরণস্বরূপ, আপনি এন্ড-ইউজারের ডিভাইস থেকে লোকাল ফাইল, যেমন ক্যামেরা থেকে তোলা ফটো এবং ভিডিও আপলোড করতে পারেন। আরও জানুন: iOS+ | Android | Web | Flutter | Unity
আপনি যখন কোনো বাকেটে একটি ফাইল আপলোড করেন, Cloud Storage স্বয়ংক্রিয়ভাবে ফাইলটিতে নিম্নলিখিত দুটি তথ্য যুক্ত করে। আপনাকে অনুরোধে এই মানগুলি অন্তর্ভুক্ত করতে হবে (যেমনটি এই নির্দেশিকার পরবর্তী ধাপে দেখানো হয়েছে)।
MIME type : এটি হলো ফাইলটির মিডিয়া টাইপ (উদাহরণস্বরূপ,
image/png)। আমরা আপলোডের সময় স্বয়ংক্রিয়ভাবে MIME type শনাক্ত করার চেষ্টা করব এবং বাকেটের অবজেক্টটিতে সেই মেটাডেটা প্রয়োগ করব। তবে, আপনি চাইলে আপলোডের সময় MIME type নির্দিষ্ট করে দিতে পারেন।Cloud Storage for Firebase URL : This is a unique identifier for the file. The URL must start with
gs://.
Step 3 : Include the file's MIME type and URL in a multimodal request
একবার কোনো বাকেটে একটি ফাইল সংরক্ষণ করা হয়ে গেলে, আপনি একটি অনুরোধে সেটির MIME টাইপ এবং URL অন্তর্ভুক্ত করতে পারেন। উল্লেখ্য যে, এই উদাহরণগুলিতে একটি নন-স্ট্রিমিং generateContent অনুরোধ দেখানো হয়েছে, কিন্তু আপনি স্ট্রিমিং এবং চ্যাটের সাথেও URL ব্যবহার করতে পারেন।
অনুরোধে ফাইলটি অন্তর্ভুক্ত করতে, আপনি নিম্নলিখিত বিকল্পগুলির যেকোনো একটি ব্যবহার করতে পারেন:
বিকল্প ১: স্টোরেজ রেফারেন্স ব্যবহার করে MIME টাইপ এবং URL অন্তর্ভুক্ত করুন
Option 2: Include the MIME type and URL explicitly
বিকল্প ১: স্টোরেজ রেফারেন্স ব্যবহার করে MIME টাইপ এবং URL অন্তর্ভুক্ত করুন
| এই উদাহরণটি চেষ্টা করার আগে, নিশ্চিত হয়ে নিন যে আপনি Firebase AI Logic SDK-গুলির জন্য দেওয়া সূচনা নির্দেশিকাটি সম্পূর্ণ করেছেন। |
আপনি যদি এইমাত্র বাকেটে ফাইলটি আপলোড করে থাকেন এবং অনুরোধে ফাইলটি অবিলম্বে (একটি স্টোরেজ রেফারেন্সের মাধ্যমে) অন্তর্ভুক্ত করতে চান, তাহলে এই বিকল্পটি ব্যবহার করুন। এই কলের জন্য MIME টাইপ এবং Cloud Storage for Firebase URL, উভয়ই প্রয়োজন।
সুইফট
// 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
কোটলিনের ক্ষেত্রে, এই SDK-এর মেথডগুলো হলো সাসপেন্ড ফাংশন এবং এগুলোকে একটি Coroutine স্কোপ থেকে কল করতে হবে।// 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 = model.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
জাভার ক্ষেত্রে, এই 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);
ঐক্য
var storageRef = FirebaseStorage.DefaultInstance.GetReference("images/image.jpg");
var metadata = await storageRef.PutFileAsync(filePathToJpg);
// Get the MIME type and Cloud Storage for Firebase URL.
var mimeType = metadata.ContentType;
// Construct a URL in the required format.
var storageURL = new Uri($"gs://{storageRef.Bucket}/{storageRef.Path}");
var prompt = ModelContent.Text("What's in this picture?");
// Construct a FileData that explicitly includes the MIME type and
// Cloud Storage for Firebase URL values.
var fileData = ModelContent.FileData(mimeType, storageURL);
// To generate text output, call GenerateContentAsync with the prompt and fileData.
var response = await model.GenerateContentAsync(new [] { prompt, fileData });
UnityEngine.Debug.Log(response.Text ?? "No text in response.");
বিকল্প ২: MIME টাইপ এবং URL স্পষ্টভাবে অন্তর্ভুক্ত করুন
| Before trying this example, make sure that you've completed the getting started guide for the Firebase AI Logic SDKs . |
আপনি যদি MIME টাইপ এবং Cloud Storage for Firebase URL-এর মান জানেন এবং মাল্টিমোডাল অনুরোধে সেগুলোকে স্পষ্টভাবে অন্তর্ভুক্ত করতে চান, তাহলে এই বিকল্পটি ব্যবহার করুন। কলটির জন্য MIME টাইপ এবং URL উভয়ই প্রয়োজন।
সুইফট
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
কোটলিনের ক্ষেত্রে, এই SDK-এর মেথডগুলো হলো সাসপেন্ড ফাংশন এবং এগুলোকে একটি Coroutine স্কোপ থেকে কল করতে হবে।// 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 = model.generateContent(prompt)
println(response.text)
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);
ঐক্য
var prompt = ModelContent.Text("What's in this picture?");
// Construct a FileData that explicitly includes the MIME type and
// Cloud Storage for Firebase URL values.
var fileData = ModelContent.FileData(
mimeType: "image/jpeg",
uri: new Uri("gs://bucket-name/path/image.jpg")
);
// To generate text output, call GenerateContentAsync with the prompt and fileData.
var response = await model.GenerateContentAsync(new [] { prompt, fileData });
UnityEngine.Debug.Log(response.Text ?? "No text in response.");