Vertex AI in Firebase ব্যবহার করে আপনার অ্যাপ থেকে Gemini API কল করার সময়, আপনি একটি মাল্টিমডাল ইনপুটের উপর ভিত্তি করে টেক্সট তৈরি করতে জেমিনি মডেলকে অনুরোধ করতে পারেন। মাল্টিমোডাল প্রম্পটে একাধিক পদ্ধতি (বা ইনপুটের প্রকার) অন্তর্ভুক্ত থাকতে পারে, যেমন চিত্র, পিডিএফ, ভিডিও এবং অডিও সহ পাঠ্য।
ইনপুটের নন-টেক্সট অংশগুলির জন্য (যেমন মিডিয়া ফাইল), আপনি অনুরোধে ফাইলগুলি অন্তর্ভুক্ত করতে Cloud Storage for Firebase ব্যবহার করতে পারেন। উচ্চ-স্তরে, এই বৈশিষ্ট্যটি সম্পর্কে আপনার যা জানা দরকার তা এখানে:
আপনি Cloud Storage for Firebase ব্যবহার করতে পারেন যেকোন মাল্টিমোডাল অনুরোধের সাথে (যেমন টেক্সট জেনারেশন এবং চ্যাট উভয়ই)। এই গাইডের উদাহরণগুলি একটি মৌলিক পাঠ্য এবং চিত্র ইনপুট দেখায়।
আপনি অনুরোধ ইনপুটে ফাইলের MIME প্রকার এবং Cloud Storage for Firebase (যা সর্বদা
gs://
দিয়ে শুরু হয়) নির্দিষ্ট করুন৷ এই মানগুলি Cloud Storage বালতিতে আপলোড করা যেকোনো ফাইলে স্বয়ংক্রিয়ভাবে মেটাডেটা বরাদ্দ করা হয়।আপনাকে একটি সমর্থিত ফাইলের ধরন এবং URL ব্যবহার করতে হবে।
এই সমাধান নির্দেশিকা বর্ণনা করে কিভাবে 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 MB। একটি অনুরোধ খুব বড় হলে আপনি একটি HTTP 413 ত্রুটি পাবেন। যদি একটি ফাইলের আকার মোট অনুরোধের আকার 20 MB ছাড়িয়ে যায়, তাহলে আপনার মাল্টিমোডাল অনুরোধে ফাইলটি অন্তর্ভুক্ত করতে Cloud Storage for Firebase ব্যবহার করুন৷ যাইহোক, যদি একটি ফাইল ছোট হয়, আপনি প্রায়ই এটি সরাসরি ইনলাইন ডেটা হিসাবে পাস করতে পারেন (যদিও মনে রাখবেন, ইনলাইন ডেটা হিসাবে প্রদত্ত একটি ফাইল ট্রানজিটে বেস64 এ এনকোড করা হয়, যা অনুরোধের আকার বাড়ায়)।
এখানে Cloud Storage for Firebase ব্যবহারের কিছু অতিরিক্ত সুবিধা রয়েছে:
আপনি শেষ ব্যবহারকারীদের আপনার অ্যাপ থেকে সরাসরি Cloud Storage for Firebase এ ছবি আপলোড করতে পারেন এবং তারপরে আপনি ফাইলের MIME প্রকার এবং Cloud Storage for Firebase নির্দিষ্ট করে সেই ছবিগুলিকে আপনার মাল্টিমোডাল প্রম্পটে অন্তর্ভুক্ত করতে পারেন (যা একটি শনাক্তকারী ফাইল)।
আপনি আপনার শেষ ব্যবহারকারীদের সময় এবং ব্যান্ডউইথ বাঁচাতে পারেন যদি তাদের ছবি প্রদানের প্রয়োজন হয়, বিশেষ করে যদি তাদের নেটওয়ার্ক গুণমান খারাপ বা ফ্ল্যাকি থাকে।
- কোনো ফাইল আপলোড বা ডাউনলোড বাধাগ্রস্ত হলে, Cloud Storage for Firebase স্বয়ংক্রিয়ভাবে ক্রিয়াকলাপটি যেখানে ছেড়েছিল ঠিক সেখানেই পুনরায় চালু করে।
- একই আপলোড করা ফাইলটি একাধিকবার ব্যবহার করা যেতে পারে শেষ ব্যবহারকারীকে আপনার অ্যাপে (যেমন একটি নতুন মাল্টিমোডাল অনুরোধের মতো) প্রতিবার একই ফাইল আপলোড না করেও।
আপনি Firebase Security Rules ব্যবহার করে Cloud Storage for Firebase সঞ্চিত ফাইলগুলিতে শেষ ব্যবহারকারীর অ্যাক্সেস সীমাবদ্ধ করতে পারেন, যা শুধুমাত্র একজন অনুমোদিত ব্যবহারকারীকে ফাইলগুলি আপলোড, ডাউনলোড বা মুছতে দেয়৷
আপনি Firebase বা Google Cloud থেকে আপনার বালতিতে থাকা ফাইলগুলি অ্যাক্সেস করতে পারেন, যা আপনাকে সার্ভার-সাইড প্রসেসিং যেমন Google Cloud Storage API ব্যবহার করে ছবি ফিল্টারিং বা ভিডিও ট্রান্সকোডিং করার নমনীয়তা দেয়৷
কি ধরনের ফাইল এবং URL সমর্থিত?
আপনি যখন Vertex AI in Firebase সাথে Cloud Storage for Firebase ব্যবহার করতে চান তখন ফাইল এবং URL-এর প্রয়োজনীয়তাগুলি এখানে দেওয়া হল:
Vertex AI in Firebase ব্যবহার করার সময় ফাইলটিকে মাল্টিমডাল অনুরোধের জন্য ইনপুট ফাইলের প্রয়োজনীয়তা পূরণ করতে হবে। এর মধ্যে 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 URL গুলি তৈরি করা হয়৷ফাইলের URL একটি "ব্রাউজার" URL হতে পারে না (উদাহরণস্বরূপ, আপনি ইন্টারনেটে খুঁজে পাওয়া ছবির URL)।
এছাড়াও, আপনার বালতির জন্য Firebase Security Rules অবশ্যই ফাইলটিতে যথাযথ অ্যাক্সেসের অনুমতি দেবে৷ যেমন:
আপনার যদি সর্বজনীন নিয়ম থাকে, তাহলে যে কোনো ব্যবহারকারী বা ক্লায়েন্ট ফাইলটি অ্যাক্সেস করতে পারে এবং Vertex AI in Firebase ব্যবহার করে একটি কলে এর URL প্রদান করতে পারে। এই ধরনের নিয়মগুলি শুধুমাত্র শুরু করার জন্য এবং প্রাথমিক প্রোটোটাইপিংয়ের সময় ব্যবহার করা উচিত (যদি না ফাইলগুলিকে সম্পূর্ণরূপে সর্বজনীনভাবে অ্যাক্সেসযোগ্য ফাইল হিসাবে বোঝানো হয়)।
আপনার যদি দৃঢ় নিয়ম থাকে (দৃঢ়ভাবে প্রস্তাবিত) , তাহলে Firebase চেক করবে যে প্রদত্ত URL দিয়ে কল করার অনুমতি দেওয়ার আগে সাইন ইন করা ব্যবহারকারী বা ক্লায়েন্টের ফাইলে পর্যাপ্ত অ্যাক্সেস আছে কিনা।
Vertex AI in Firebase সহ Cloud Storage for Firebase ব্যবহার করুন
ধাপ 1 : Cloud Storage for Firebase সেট আপ করুন
আপনি Cloud Storage for Firebase সেট আপ এবং ব্যবহার করার জন্য এর শুরু করার নির্দেশিকাতে বিস্তারিত নির্দেশাবলী পেতে পারেন।
Cloud Storage for Firebase এ যান
এখানে উচ্চ-স্তরের কাজগুলি যা আপনাকে করতে হবে:
আপনার Firebase প্রকল্পে Cloud Storage for Firebase তৈরি করুন।
আপনার যদি ইতিমধ্যেই আপনার Google Cloud প্রকল্পে একটি Cloud Storage বালতি থাকে যা আপনি Vertex AI in Firebase সাথে ব্যবহার করতে চান, তাহলে আপনি Firebase-এ বালতিটিকে "আমদানি করে" Firebase পরিষেবাগুলিতে ( Vertex AI in Firebase সহ) অ্যাক্সেসযোগ্য করে তুলতে পারেন৷
এই বালতিতে Firebase Security Rules প্রয়োগ করুন। Firebase Security Rules আপনাকে অনুমোদিত শেষ ব্যবহারকারীদের অ্যাক্সেস সীমাবদ্ধ করে আপনার ফাইলগুলি সুরক্ষিত করতে সহায়তা করে।
আপনার অ্যাপে Cloud Storage for Firebase জন্য ক্লায়েন্ট লাইব্রেরি যোগ করুন।
মনে রাখবেন যে আপনি এই কাজটি এড়িয়ে যেতে পারেন, তবে আপনাকে অবশ্যই সর্বদা স্পষ্টভাবে আপনার মাল্টিমোডাল অনুরোধগুলিতে Cloud Storage for Firebase অন্তর্ভুক্ত করতে হবে ।
ধাপ 2 : একটি বালতিতে একটি ফাইল আপলোড করুন
Cloud Storage for Firebase এ, আপনি Cloud Storage for Firebase ফাইল আপলোড করার বিভিন্ন উপায় শিখতে পারেন। উদাহরণস্বরূপ, আপনি শেষ-ব্যবহারকারীর ডিভাইস থেকে স্থানীয় ফাইল আপলোড করতে পারেন, যেমন ক্যামেরা থেকে ফটো এবং ভিডিও।
আপনি যখন একটি বালতিতে একটি ফাইল আপলোড করেন, Cloud Storage স্বয়ংক্রিয়ভাবে ফাইলটিতে নিম্নলিখিত দুটি তথ্য প্রয়োগ করে৷ আপনাকে মাল্টিমোডাল অনুরোধে এই মানগুলি অন্তর্ভুক্ত করতে হবে (যেমন এই গাইডের পরবর্তী ধাপে দেখানো হয়েছে)।
MIME প্রকার : এটি ফাইলের মিডিয়া টাইপ (উদাহরণস্বরূপ,
image/png
)। Cloud Storage for Firebase আপলোডের সময় স্বয়ংক্রিয়ভাবে MIME প্রকার সনাক্ত করার চেষ্টা করবে এবং সেই মেটাডেটাটি বালতিতে থাকা বস্তুতে প্রয়োগ করবে। যাইহোক, আপলোড করার সময় আপনি ঐচ্ছিকভাবে MIME প্রকার উল্লেখ করতে পারেন।Cloud Storage for Firebase : এটি ফাইলের জন্য একটি অনন্য শনাক্তকারী। URL অবশ্যই
gs://
দিয়ে শুরু হবে।
ধাপ 3 : একটি মাল্টিমোডাল অনুরোধে ফাইলের MIME প্রকার এবং URL অন্তর্ভুক্ত করুন
একবার আপনার কাছে Cloud Storage for Firebase একটি ফাইল সংরক্ষিত হয়ে গেলে, আপনি একটি মাল্টিমোডাল অনুরোধে এর MIME প্রকার এবং Cloud Storage for Firebase অন্তর্ভুক্ত করতে পারেন। মনে রাখবেন যে এই উদাহরণগুলি একটি নন-স্ট্রিমিং generateContent
অনুরোধ দেখায়, তবে আপনি স্ট্রিমিং এবং চ্যাটের সাথে Cloud Storage for Firebase ব্যবহার করতে পারেন।
অনুরোধে ফাইলটি অন্তর্ভুক্ত করতে, আপনি নিম্নলিখিত বিকল্পগুলির যেকোনো একটি ব্যবহার করতে পারেন:
বিকল্প 1: স্টোরেজ রেফারেন্স ব্যবহার করে MIME প্রকার এবং URL অন্তর্ভুক্ত করুন
এই বিকল্পটি ব্যবহার করুন যদি আপনি ফাইলটি বালতিতে আপলোড করেন এবং আপনি অবিলম্বে ফাইলটি (একটি স্টোরেজ রেফারেন্সের মাধ্যমে) মাল্টিমোডাল অনুরোধে অন্তর্ভুক্ত করতে চান। কলটির জন্য MIME প্রকার এবং Cloud Storage for Firebase উভয়ই প্রয়োজন৷
Kotlin+KTX
কোটলিনের জন্য, এই 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 = 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
জাভার জন্য, এই 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();
});
বিকল্প 2: MIME প্রকার এবং URL স্পষ্টভাবে অন্তর্ভুক্ত করুন
আপনি যদি Cloud Storage for Firebase মানগুলি জানেন এবং আপনি মাল্টিমোডাল অনুরোধে সেগুলিকে স্পষ্টভাবে অন্তর্ভুক্ত করতে চান তাহলে এই বিকল্পটি ব্যবহার করুন৷ কলটির জন্য MIME প্রকার এবং URL উভয়ই প্রয়োজন৷
Kotlin+KTX
কোটলিনের জন্য, এই 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 = generativeModel.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);