Gemini লাইভ API ব্যবহার করে দ্বিমুখী স্ট্রিমিং, Gemini লাইভ API ব্যবহার করে দ্বিমুখী স্ট্রিমিং


Gemini Live API Gemini-এর সাথে কম-বিলম্বিত দ্বিমুখী পাঠ্য এবং ভয়েস ইন্টারঅ্যাকশন সক্ষম করে। Live API ব্যবহার করে, আপনি শেষ ব্যবহারকারীদের প্রাকৃতিক, মানুষের মতো ভয়েস কথোপকথনের অভিজ্ঞতা প্রদান করতে পারেন, পাঠ্য বা ভয়েস কমান্ড ব্যবহার করে মডেলের প্রতিক্রিয়াগুলিকে বাধা দেওয়ার ক্ষমতা সহ। মডেলটি পাঠ্য এবং অডিও ইনপুট প্রক্রিয়া করতে পারে (ভিডিও শীঘ্রই আসছে!), এবং এটি পাঠ্য এবং অডিও আউটপুট প্রদান করতে পারে।

আপনি Vertex AI স্টুডিওতে প্রম্পট এবং Live API সহ প্রোটোটাইপ করতে পারেন।

Live API হল একটি স্টেটফুল এপিআই যা ক্লায়েন্ট এবং জেমিনি সার্ভারের মধ্যে একটি সেশন স্থাপন করতে একটি ওয়েবসকেট সংযোগ তৈরি করে। বিস্তারিত জানার জন্য, Live API রেফারেন্স ডকুমেন্টেশন দেখুন।

আপনি শুরু করার আগে

যদি আপনি ইতিমধ্যে না করে থাকেন, শুরু করার নির্দেশিকাটি সম্পূর্ণ করুন, যা বর্ণনা করে যে কীভাবে আপনার Firebase প্রকল্প সেট আপ করবেন, আপনার অ্যাপকে Firebase-এর সাথে সংযুক্ত করবেন, SDK যোগ করবেন, Vertex AI পরিষেবা শুরু করবেন এবং একটি LiveModel উদাহরণ তৈরি করবেন।

নিশ্চিত করুন যে আপনি ন্যূনতম এই Firebase লাইব্রেরি সংস্করণগুলি ব্যবহার করছেন:
iOS+ : এখনও সমর্থিত নয় | Android : v16.3.0+ ( BoM : v33.12.0+) | ওয়েব : এখনও সমর্থিত নয় | ফ্লটার : v1.5.0+ (BoM: v3.9.0+)

মডেল যে এই ক্ষমতা সমর্থন করে

Live API শুধুমাত্র gemini-2.0-flash-live-preview-04-09 ( gemini-2.0-flash নয়) দ্বারা সমর্থিত।

Live API এর মানক বৈশিষ্ট্যগুলি ব্যবহার করুন৷

এই বিভাগটি বর্ণনা করে যে কীভাবে Live API এর মানক বৈশিষ্ট্যগুলি ব্যবহার করতে হয়, বিশেষত বিভিন্ন ধরনের ইনপুট এবং আউটপুট স্ট্রিম করতে:

পাঠ্য পাঠান এবং পাঠ্য গ্রহণ করুন

আপনি স্ট্রিম করা টেক্সট ইনপুট পাঠাতে পারেন এবং স্ট্রিম করা টেক্সট আউটপুট পেতে পারেন। একটি liveModel ইনস্ট্যান্স তৈরি করা নিশ্চিত করুন এবং প্রতিক্রিয়ার মোডালিটি Text সেট করুন।

সুইফট

Live API অ্যাপল প্ল্যাটফর্ম অ্যাপগুলির জন্য এখনও সমর্থিত নয়, তবে শীঘ্রই আবার চেক করুন!

Kotlin

// Initialize the Vertex AI service and create a `LiveModel` instance
val model = Firebase.vertexAI.liveModel(
    // The Live API requires this specific model.
    modelName = "gemini-2.0-flash-live-preview-04-09",
    // Configure the model to respond with text
    generationConfig = liveGenerationConfig {
        responseModality = ResponseModality.TEXT 
   }
)

val session = model.connect()

// Provide a text prompt
val text = "tell a short story"

session.send(text)

var outputText = ""
session.receive().collect {
    if(it.status == Status.TURN_COMPLETE) {
        // Optional: if you don't require to send more requests.
        session.stopReceiving();
    }
    outputText = outputText + it.text
}

// Output received from the server.
println(outputText)

Java

ExecutorService executor = Executors.newFixedThreadPool(1);
// Initialize the Vertex AI service and create a `LiveModel` instance
LiveGenerativeModel lm = FirebaseVertexAI.getInstance().liveModel(
        // The Live API requires this specific model.
        "gemini-2.0-flash-live-preview-04-09",
        // Configure the model to respond with text
        new LiveGenerationConfig.Builder()
                .setResponseModalities(ResponseModality.TEXT)
                .build()
);
LiveModelFutures model = LiveModelFutures.from(lm);
ListenableFuture<LiveSession> sessionFuture =  model.connect();
class LiveContentResponseSubscriber implements Subscriber<LiveContentResponse> {
    @Override
    public void onSubscribe(Subscription s) {
        s.request(Long.MAX_VALUE); // Request an unlimited number of items
    }
    @Override
    public void onNext(LiveContentResponse liveContentResponse) {
       // Handle the response from the server.
	System.out.println(liveContentResponse.getText());
    }
    @Override
    public void onError(Throwable t) {
        System.err.println("Error: " + t.getMessage());
    }
    @Override
    public void onComplete() {
        System.out.println("Done receiving messages!");
    }
}
Futures.addCallback(sessionFuture, new FutureCallback<LiveSession>() {
    @Override
    public void onSuccess(LiveSession ses) {
	  LiveSessionFutures session = LiveSessionFutures.from(ses);
        // Provide a text prompt
        String text = "tell me a short story?";
        session.send(text);
        Publisher<LiveContentResponse> publisher = session.receive();
        publisher.subscribe(new LiveContentResponseSubscriber());
    }
    @Override
    public void onFailure(Throwable t) {
        // Handle exceptions
    }
}, executor);

Web

Live API এখনও ওয়েব অ্যাপের জন্য সমর্থিত নয়, কিন্তু শীঘ্রই আবার চেক করুন!

Dart

import 'package:firebase_vertexai/firebase_vertexai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

late LiveModelSession _session;

await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Vertex AI service and create a `LiveModel` instance
final model = FirebaseVertexAI.instance.liveModel(
  // The Live API requires this specific model.
  model: 'gemini-2.0-flash-live-preview-04-09',
  // Configure the model to respond with text
  config: LiveGenerationConfig(responseModalities: [ResponseModality.text]),
);

_session = await model.connect();

// Provide a text prompt
final prompt = Content.text('tell a short story');
await _session.send(input: prompt, turnComplete: true);

// In a separate thread, receive the response
await for (final message in _session.receive()) {
   // Process the received message 
}

আপনার ব্যবহারের ক্ষেত্রে এবং অ্যাপের জন্য উপযুক্ত একটি মডেল এবং ঐচ্ছিকভাবে একটি অবস্থান কীভাবে চয়ন করবেন তা শিখুন।

অডিও পাঠান এবং অডিও গ্রহণ করুন

আপনি স্ট্রিম করা অডিও ইনপুট পাঠাতে পারেন এবং স্ট্রিম করা অডিও আউটপুট পেতে পারেন। একটি LiveModel দৃষ্টান্ত তৈরি করা নিশ্চিত করুন এবং Audio প্রতিক্রিয়ার মোডালিটি সেট করুন।

প্রতিক্রিয়া ভয়েস কনফিগার এবং কাস্টমাইজ কিভাবে শিখুন (পরে এই পৃষ্ঠায়)।

সুইফট

Live API অ্যাপল প্ল্যাটফর্ম অ্যাপগুলির জন্য এখনও সমর্থিত নয়, তবে শীঘ্রই আবার চেক করুন!

Kotlin

// Initialize the Vertex AI service and create a `LiveModel` instance
val model = Firebase.vertexAI.liveModel(
    // The Live API requires this specific model.
    modelName = "gemini-2.0-flash-live-preview-04-09",
    // Configure the model to respond with text
    generationConfig = liveGenerationConfig {
        responseModality = ResponseModality.AUDIO 
   }
)

val session = model.connect()

// This is the recommended way.
// However, you can create your own recorder and handle the stream.
session.startAudioConversation()

Java

ExecutorService executor = Executors.newFixedThreadPool(1);
// Initialize the Vertex AI service and create a `LiveModel` instance
LiveGenerativeModel lm = FirebaseVertexAI.getInstance().liveModel(
        // The Live API requires this specific model.
        "gemini-2.0-flash-live-preview-04-09",
        // Configure the model to respond with text
        new LiveGenerationConfig.Builder()
                .setResponseModalities(ResponseModality.TEXT)
                .build()
);
LiveModelFutures model = LiveModelFutures.from(lm);
ListenableFuture<LiveSession> sessionFuture =  model.connect();

Futures.addCallback(sessionFuture, new FutureCallback<LiveSession>() {
    @Override
    public void onSuccess(LiveSession ses) {
	 LiveSessionFutures session = LiveSessionFutures.from(ses);
        session.startAudioConversation();
    }
    @Override
    public void onFailure(Throwable t) {
        // Handle exceptions
    }
}, executor);

ওয়েব

Live API এখনও ওয়েব অ্যাপের জন্য সমর্থিত নয়, কিন্তু শীঘ্রই আবার চেক করুন!

Dart

import 'package:firebase_vertexai/firebase_vertexai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
import 'package:your_audio_recorder_package/your_audio_recorder_package.dart';

late LiveModelSession _session;
final _audioRecorder = YourAudioRecorder();

await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Vertex AI service and create a `LiveModel` instance
final model = FirebaseVertexAI.instance.liveModel(
  // The Live API requires this specific model.
  model: 'gemini-2.0-flash-live-preview-04-09',
   // Configure the model to respond with audio
   config: LiveGenerationConfig(responseModalities: [ResponseModality.audio]),
);

_session = await model.connect();

final audioRecordStream = _audioRecorder.startRecordingStream();
// Map the Uint8List stream to InlineDataPart stream
final mediaChunkStream = audioRecordStream.map((data) {
  return InlineDataPart('audio/pcm', data);
});
await _session.startMediaStream(mediaChunkStream);

// In a separate thread, receive the audio response from the model
await for (final message in _session.receive()) {
   // Process the received message 
}

আপনার ব্যবহারের ক্ষেত্রে এবং অ্যাপের জন্য উপযুক্ত একটি মডেল এবং ঐচ্ছিকভাবে একটি অবস্থান কীভাবে চয়ন করবেন তা শিখুন।



আরও আকর্ষক এবং ইন্টারেক্টিভ অভিজ্ঞতা তৈরি করুন

এই বিভাগটি বর্ণনা করে কিভাবে Live API এর আরও আকর্ষক বা ইন্টারেক্টিভ বৈশিষ্ট্য তৈরি এবং পরিচালনা করতে হয়।

প্রতিক্রিয়া ভয়েস পরিবর্তন করুন

Live API সংশ্লেষিত বক্তৃতা প্রতিক্রিয়া সমর্থন করতে Chirp 3 ব্যবহার করে। Firebase-এ Vertex AI ব্যবহার করার সময়, আপনি 5টি HD ভয়েস এবং 31টি ভাষায় অডিও পাঠাতে পারেন।

আপনি একটি ভয়েস নির্দিষ্ট না করলে, ডিফল্ট হল Puck । বিকল্পভাবে, আপনি নিম্নলিখিত কণ্ঠে প্রতিক্রিয়া জানাতে মডেলটি কনফিগার করতে পারেন:

Aoede (মহিলা)
Charon (পুরুষ)
Fenrir (পুরুষ)
Kore (মহিলা)
Puck (পুরুষ)

এই ভয়েসগুলি কেমন শোনাচ্ছে তার ডেমোগুলির জন্য এবং উপলব্ধ ভাষার সম্পূর্ণ তালিকার জন্য, Chirp 3: HD ভয়েসগুলি দেখুন।

একটি ভয়েস নির্দিষ্ট করতে, মডেল কনফিগারেশনের অংশ হিসাবে speechConfig অবজেক্টের মধ্যে ভয়েস নাম সেট করুন:

সুইফট

Live API অ্যাপল প্ল্যাটফর্ম অ্যাপগুলির জন্য এখনও সমর্থিত নয়, তবে শীঘ্রই আবার চেক করুন!

Kotlin

// ...

val model = Firebase.vertexAI.liveModel(
    modelName = "gemini-2.0-flash-live-preview-04-09",
    // Configure the model to use a specific voice for its audio response
    generationConfig = liveGenerationConfig {
        responseModality = ResponseModality.AUDIO
        speechConfig = SpeechConfig(voice = Voices.FENRIR)
    }
)

// ...

Java

// ...

LiveModel model = Firebase.getVertexAI().liveModel(
    "gemini-2.0-flash-live-preview-04-09",
    // Configure the model to use a specific voice for its audio response
    new LiveGenerationConfig.Builder()
        .setResponseModalities(ResponseModality.AUDIO)
        .setSpeechConfig(new SpeechConfig(Voices.FENRIR))
        .build()
);

// ...

Web

Live API এখনও ওয়েব অ্যাপের জন্য সমর্থিত নয়, কিন্তু শীঘ্রই আবার চেক করুন!

Dart

// ...

final model = FirebaseVertexAI.instance.liveModel(
  model: 'gemini-2.0-flash-live-preview-04-09',
  // Configure the model to use a specific voice for its audio response
  config: LiveGenerationConfig(
    responseModality: ResponseModality.audio,
    speechConfig: SpeechConfig(voice: Voice.fenrir),
  ),
);

// ...

মডেলটিকে একটি নন-ইংরেজি ভাষায় প্রতিক্রিয়া জানাতে অনুরোধ করার সময় এবং প্রয়োজন হলে সর্বোত্তম ফলাফলের জন্য, আপনার সিস্টেম নির্দেশাবলীর অংশ হিসাবে নিম্নলিখিতগুলি অন্তর্ভুক্ত করুন:

RESPOND IN LANGUAGE. YOU MUST RESPOND UNMISTAKABLY IN LANGUAGE.

সেশন এবং অনুরোধ জুড়ে প্রসঙ্গ বজায় রাখুন

আপনি সেশন এবং অনুরোধ জুড়ে প্রসঙ্গ বজায় রাখতে একটি চ্যাট কাঠামো ব্যবহার করতে পারেন। মনে রাখবেন এটি শুধুমাত্র টেক্সট ইনপুট এবং টেক্সট আউটপুটের জন্য কাজ করে।

এই পদ্ধতিটি সংক্ষিপ্ত প্রসঙ্গের জন্য সর্বোত্তম; ঘটনার সঠিক ক্রম উপস্থাপন করতে আপনি পালাক্রমে মিথস্ক্রিয়া পাঠাতে পারেন। দীর্ঘ প্রসঙ্গগুলির জন্য, আমরা পরবর্তী মিথস্ক্রিয়াগুলির জন্য প্রসঙ্গ উইন্ডোটি খালি করতে একটি একক বার্তা সারাংশ প্রদান করার পরামর্শ দিই৷

বাধা হ্যান্ডেল

Firebase-এ Vertex AI এখনও হ্যান্ডলিং বাধাগুলিকে সমর্থন করে না । শীঘ্রই ফিরে দেখুন!

ফাংশন কলিং ব্যবহার করুন (সরঞ্জাম)

আপনি লাইভ API এর সাথে ব্যবহার করার জন্য উপলব্ধ ফাংশনের মতো সরঞ্জামগুলিকে সংজ্ঞায়িত করতে পারেন, যেমন আপনি মানক সামগ্রী তৈরির পদ্ধতিগুলির সাথে করতে পারেন। ফাংশন কলিং সহ লাইভ API ব্যবহার করার সময় এই বিভাগটি কিছু সূক্ষ্মতা বর্ণনা করে। ফাংশন কলিংয়ের সম্পূর্ণ বিবরণ এবং উদাহরণের জন্য, ফাংশন কলিং গাইড দেখুন।

একটি একক প্রম্পট থেকে, মডেলটি একাধিক ফাংশন কল এবং তাদের আউটপুট চেইন করার জন্য প্রয়োজনীয় কোড তৈরি করতে পারে। এই কোডটি একটি স্যান্ডবক্স পরিবেশে কার্যকর করে, পরবর্তী BidiGenerateContentToolCall বার্তা তৈরি করে। প্রতিটি ফাংশন কলের ফলাফল উপলব্ধ না হওয়া পর্যন্ত এক্সিকিউশন বিরতি দেয়, যা ক্রমিক প্রক্রিয়াকরণ নিশ্চিত করে।

উপরন্তু, ফাংশন কলিংয়ের সাথে লাইভ API ব্যবহার করা বিশেষভাবে শক্তিশালী কারণ মডেলটি ব্যবহারকারীর কাছ থেকে ফলো-আপ বা স্পষ্ট তথ্যের জন্য অনুরোধ করতে পারে। উদাহরণস্বরূপ, যদি মডেলের কাছে পর্যাপ্ত তথ্য না থাকে যে একটি ফাংশনটি কল করতে চায় একটি প্যারামিটার মান প্রদান করার জন্য, তাহলে মডেলটি ব্যবহারকারীকে আরও বা স্পষ্ট তথ্য প্রদান করতে বলতে পারে।

ক্লায়েন্টকে BidiGenerateContentToolResponse দিয়ে প্রতিক্রিয়া জানাতে হবে।



সীমাবদ্ধতা এবং প্রয়োজনীয়তা

Live API এর নিম্নলিখিত সীমাবদ্ধতা এবং প্রয়োজনীয়তাগুলি মনে রাখবেন।

প্রতিলিপি

Firebase-এ Vertex AI এখনও ট্রান্সক্রিপশন সমর্থন করে না । শীঘ্রই ফিরে দেখুন!

ভাষা

অডিও ফরম্যাট

Live API নিম্নলিখিত অডিও ফরম্যাট সমর্থন করে:

  • ইনপুট অডিও ফরম্যাট: Raw 16 bit PCM অডিও 16kHz লিটল-এন্ডিয়ান
  • আউটপুট অডিও ফরম্যাট: 24kHz লিটল-এন্ডিয়ানে কাঁচা 16 বিট পিসিএম অডিও

হারের সীমা

নিম্নলিখিত হার সীমা প্রযোজ্য:

  • প্রতি Firebase প্রকল্পে 10টি সমবর্তী সেশন
  • প্রতি মিনিটে 4M টোকেন

সেশনের দৈর্ঘ্য

একটি সেশনের জন্য ডিফল্ট দৈর্ঘ্য 30 মিনিট। যখন সেশনের সময়সীমা সীমা অতিক্রম করে, সংযোগটি বন্ধ হয়ে যায়।

মডেলটি প্রসঙ্গ আকার দ্বারা সীমাবদ্ধ। ইনপুটের বড় অংশ পাঠানোর ফলে আগের সেশন বন্ধ হয়ে যেতে পারে।

ভয়েস কার্যকলাপ সনাক্তকরণ (VAD)

মডেলটি একটি অবিচ্ছিন্ন অডিও ইনপুট স্ট্রীমে স্বয়ংক্রিয়ভাবে ভয়েস অ্যাক্টিভিটি সনাক্তকরণ (VAD) সঞ্চালন করে। VAD ডিফল্টরূপে সক্রিয় করা হয়।

টোকেন গণনা

আপনি Live API সাথে CountTokens API ব্যবহার করতে পারবেন না।