Live API-এর জন্য কনফিগারেশন বিকল্প


Live API-এর জন্য বেসিক ইমপ্লিমেন্টেশন থাকলেও, আপনি ব্যবহারকারীদের জন্য আকর্ষণীয় ও শক্তিশালী ইন্টার‍্যাকশন তৈরি করতে পারবেন। আপনি চাইলে নিম্নলিখিত কনফিগারেশন বিকল্প ব্যবহার করে অভিজ্ঞতা আরও কাস্টমাইজ করতে পারেন:



উত্তর দেওয়ার ভয়েস ও ভাষা

আপনি মডেলটিকে নির্দিষ্ট ভয়েসে উত্তর দিতে এবং বিভিন্ন ভাষায় উত্তর দিতে প্রভাবিত করতে পারেন।

উত্তরের জন্য একটি ভয়েস নির্দিষ্ট করুন

এই পৃষ্ঠায় প্রদানকারী-নির্দিষ্ট কন্টেন্ট এবং কোড দেখতে আপনার Gemini API প্রদানকারীর উপর ক্লিক করুন।

Live API-এ ৩০টি আলাদা সিন্থেসাইজ করা HD ভয়েস আছে, যার প্রত্যেকটির আলাদা বৈশিষ্ট্য আছে। আপনি উত্তরের ভয়েস বিকল্পের তালিকা দেখতে এবং প্রতিটি ভয়েসের ডেমো শুনতে নিচের বিভাগটি বড় করতে পারেন।

আপনি যদি কোনও উত্তর দেওয়ার ভয়েস নির্দিষ্ট না করেন, তাহলে ডিফল্ট হল Puck।

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

Swift


// ...

let liveModel = FirebaseAI.firebaseAI(backend: .googleAI()).liveModel(
  modelName: "GEMINI_LIVE_API_MODEL_NAME",
  // Configure the model to use a specific voice for its audio response.
  generationConfig: LiveGenerationConfig(
    responseModalities: [.audio],
    speech: SpeechConfig(voiceName: "VOICE_NAME")
  )
)

// ...

Kotlin


// ...

val model = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel(
    modelName = "GEMINI_LIVE_API_MODEL_NAME",
    // Configure the model to use a specific voice for its audio response.
    generationConfig = liveGenerationConfig {
        responseModality = ResponseModality.AUDIO
        speechConfig = SpeechConfig(voice = Voice("VOICE_NAME"))
    }
)

// ...

Java


// ...

LiveGenerativeModel lm = FirebaseAI.getInstance(GenerativeBackend.googleAI()).liveModel(
    "GEMINI_LIVE_API_MODEL_NAME",
    // Configure the model to use a specific voice for its audio response.
    new LiveGenerationConfig.Builder()
        .setResponseModality(ResponseModality.AUDIO)
        .setSpeechConfig(new SpeechConfig(new Voice("VOICE_NAME")))
        .build()
);

// ...

Web


// ...

const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

const liveModel = getLiveGenerativeModel(ai, {
  model: "GEMINI_LIVE_API_MODEL_NAME",
  // Configure the model to use a specific voice for its audio response.
  generationConfig: {
    responseModalities: [ResponseModality.AUDIO],
    speechConfig: {
      voiceConfig: {
        prebuiltVoiceConfig: { voiceName: "VOICE_NAME" },
      },
    },
  },
});

// ...

Dart


// ...

final _liveModel = FirebaseAI.googleAI().liveGenerativeModel(
  model: 'GEMINI_LIVE_API_MODEL_NAME',
  // Configure the model to use a specific voice for its audio response.
  liveGenerationConfig: LiveGenerationConfig(
    responseModalities: [ResponseModalities.audio],
    speechConfig: SpeechConfig(voiceName: 'VOICE_NAME'),
  ),
);

// ...

Unity


// ...

var liveModel = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetLiveModel(
    modelName: "GEMINI_LIVE_API_MODEL_NAME",
    // Configure the model to use a specific voice for its audio response
    liveGenerationConfig: new LiveGenerationConfig(
        responseModalities: new[] { ResponseModality.Audio },
        speechConfig: SpeechConfig.UsePrebuiltVoice("VOICE_NAME")
    )
);

// ...

উত্তর দেওয়ার ভাষাকে প্রভাবিত করে

Live API মডেল অটোমেটিক উত্তরের জন্য উপযুক্ত ভাষা বেছে নেয়।

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

  • মডেলকে আরও ভালভাবে বোঝান যে ইংরেজি ছাড়া অন্য ভাষা উপযুক্ত হতে পারে

    Listen to the speaker carefully. If you detect a non-English language, respond
    in the language you hear from the speaker. You must respond unmistakably in the
    speaker's language.
    
  • মডেলকে সবসময় নির্দিষ্ট ভাষায় উত্তর দিতে বলুন

    RESPOND IN LANGUAGE. YOU MUST RESPOND UNMISTAKABLY IN LANGUAGE.
    



অডিও ইনপুট ও আউটপুটের জন্য ট্রান্সক্রিপশন

এই পৃষ্ঠায় প্রদানকারী-নির্দিষ্ট কন্টেন্ট এবং কোড দেখতে আপনার Gemini API প্রদানকারীর উপর ক্লিক করুন।

মডেলের উত্তরের অংশ হিসেবে, আপনি অডিও ইনপুট ও মডেলের অডিও উত্তরের ট্রান্সক্রিপশন পেতে পারেন। আপনি এই কনফিগারেশনটি মডেল কনফিগারেশন-এর অংশ হিসেবে সেট করেছেন।

  • অডিও ইনপুটের ট্রান্সক্রিপশনের জন্য, inputAudioTranscription যোগ করুন।

  • মডেলের অডিও উত্তরের ট্রান্সক্রিপশনের জন্য, outputAudioTranscription যোগ করুন।

এগুলি মনে রাখবেন:

  • আপনি ইনপুট এবং আউটপুট উভয়ের ট্রান্সক্রিপশন ফেরত দেওয়ার জন্য মডেলটি কনফিগার করতে পারেন (নিম্নলিখিত উদাহরণে দেখানো হয়েছে), অথবা আপনি এটি শুধুমাত্র একটি বা অন্যটি ফেরত দেওয়ার জন্য কনফিগার করতে পারেন।

  • অডিওর সাথে ট্রান্সস্ক্রিপ্ট স্ট্রিম করা হয়, তাই প্রতিটি টার্নে টেক্সট পার্টের মতো এগুলি সংগ্রহ করা সবচেয়ে ভালো।

  • অডিও ইনপুট এবং মডেলের অডিও উত্তর থেকে ট্রান্সক্রিপশনের ভাষা অনুমান করা হয়।

Swift


// ...

let liveModel = FirebaseAI.firebaseAI(backend: .googleAI()).liveModel(
  modelName: "GEMINI_LIVE_API_MODEL_NAME",
  // Configure the model to return transcriptions of the audio input and output.
  generationConfig: LiveGenerationConfig(
    responseModalities: [.audio],
    inputAudioTranscription: AudioTranscriptionConfig(),
    outputAudioTranscription: AudioTranscriptionConfig()
  )
)

var inputTranscript: String = ""
var outputTranscript: String = ""

do {
  let session = try await liveModel.connect()
  for try await response in session.responses {
    if case let .content(content) = response.payload {
      if let inputText = content.inputAudioTranscription?.text {
        // Handle transcription text of the audio input.
        inputTranscript += inputText
      }

      if let outputText = content.outputAudioTranscription?.text {
        // Handle transcription text of the audio output.
        outputTranscript += outputText
      }

      if content.isTurnComplete {
        // Log the transcripts after the current turn is complete.
        print("Input audio: \(inputTranscript)")
        print("Output audio: \(outputTranscript)")

        // Reset the transcripts for the next turn.
        inputTranscript = ""
        outputTranscript = ""
      }
    }
  }


} catch {
  // Handle error
}

// ...

Kotlin


// ...

val liveModel = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel(
    modelName = "GEMINI_LIVE_API_MODEL_NAME",
    // Configure the model to return transcriptions of the audio input and output.
    generationConfig = liveGenerationConfig {
        responseModality = ResponseModality.AUDIO
        inputAudioTranscription = AudioTranscriptionConfig()
        outputAudioTranscription = AudioTranscriptionConfig()
   }
)

val liveSession = liveModel.connect()

fun handleTranscription(input: Transcription?, output: Transcription?) {
    input?.text?.let { text ->
        // Handle transcription text of the audio input.
        println("Input Transcription: $text")
    }
    output?.text?.let { text ->
        // Handle transcription text of the audio output.
        println("Output Transcription: $text")
    }
}

liveSession.startAudioConversation(null, ::handleTranscription)

// ...

Java


// ...

ExecutorService executor = Executors.newFixedThreadPool(1);

LiveGenerativeModel lm = FirebaseAI.getInstance(GenerativeBackend.googleAI()).liveModel(
    "GEMINI_LIVE_API_MODEL_NAME",
    // Configure the model to return transcriptions of the audio input and output.
    new LiveGenerationConfig.Builder()
            .setResponseModality(ResponseModality.AUDIO)
            .setInputAudioTranscription(new AudioTranscriptionConfig())
            .setOutputAudioTranscription(new AudioTranscriptionConfig())
            .build()
    );

LiveModelFutures liveModel = LiveModelFutures.from(lm);
ListenableFuture<LiveSessionFutures> sessionFuture = liveModel.connect();

Futures.addCallback(sessionFuture, new FutureCallback<LiveSessionFutures>() {
    @Override
    public void onSuccess(LiveSessionFutures ses) {
        LiveSessionFutures session = ses;
        session.startAudioConversation((Transcription input, Transcription output) -> {
            if (input != null) {
                // Handle transcription text of the audio input.
                System.out.println("Input Transcription: " + input.getText());
            }
            if (output != null) {
                // Handle transcription text of the audio output.
                System.out.println("Output Transcription: " + output.getText());
            }
            return null;
        });
    }

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

// ...

Web


// ...

const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

const liveModel = getLiveGenerativeModel(ai, {
  model: 'GEMINI_LIVE_API_MODEL_NAME',
  // Configure the model to return transcriptions of the audio input and output.
  generationConfig: {
    responseModalities: [ResponseModality.AUDIO],
    inputAudioTranscription: {},
    outputAudioTranscription: {},
  },
});

const liveSession = await liveModel.connect();

liveSession.sendAudioRealtime({ data, mimeType: "audio/pcm" });

const messages = liveSession.receive();
for await (const message of messages) {
  switch (message.type) {
    case 'serverContent':
      if (message.inputTranscription) {
        // Handle transcription text of the audio input.
        console.log(`Input transcription: ${message.inputTranscription.text}`);
      }
      if (message.outputTranscription) {
        // Handle transcription text of the audio output.
        console.log(`Output transcription: ${message.outputTranscription.text}`);
      } else {
      	 // Handle other message types (modelTurn, turnComplete, interruption).
      }
    default:
      // Handle other message types (toolCall, toolCallCancellation).
  }
}

// ...

Dart


// ...

final _liveModel = FirebaseAI.googleAI().liveGenerativeModel(
  model: 'GEMINI_LIVE_API_MODEL_NAME',
  // Configure the model to return transcriptions of the audio input and output.
  liveGenerationConfig: LiveGenerationConfig(
    responseModalities: [ResponseModalities.audio],
    inputAudioTranscription: AudioTranscriptionConfig(),
    outputAudioTranscription: AudioTranscriptionConfig(),
  ),
);

final LiveSession _session = await _liveModel.connect();

await for (final response in _session.receive()) {
  if (response.message case LiveServerContent message) {
    if (message.inputTranscription?.text case final inputText?) {
      // Handle transcription text of the audio input.
      print('Input: $inputText');
    }

    if (message.outputTranscription?.text case final outputText?) {
      // Handle transcription text of the audio output.
      print('Output: $outputText');
    }
  }
}

// ...

Unity


// ...

var liveModel = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetLiveModel(
    modelName: "GEMINI_LIVE_API_MODEL_NAME",
    // Configure the model to return transcriptions of the audio input and output
    liveGenerationConfig: new LiveGenerationConfig(
        responseModalities: new[] { ResponseModality.Audio },
        inputAudioTranscription: new AudioTranscriptionConfig(),
        outputAudioTranscription: new AudioTranscriptionConfig()
    )
);

try
{
    var session = await liveModel.ConnectAsync();
    var stream = session.ReceiveAsync();
    await foreach (var response in stream) {
        if (response.Message is LiveSessionContent sessionContent) {
            if (!string.IsNullOrEmpty(sessionContent.InputTranscription?.Text)) {
              // handle transcription text of input audio
            }

            if (!string.IsNullOrEmpty(sessionContent.OutputTranscription?.Text)) {
              // handle transcription text of output audio
            }
        }
    }
}
catch (Exception e)
{
    // Handle error
}

// ...



ভয়েস অ্যাক্টিভিটি শনাক্তকরণ (VAD)

ভয়েস অ্যাক্টিভিটি শনাক্তকরণ (VAD) ফিচার কোনও ব্যক্তি কথা বলছেন কিনা তা মডেলকে বুঝতে সাহায্য করে। স্বাভাবিক কথোপকথন তৈরি করার জন্য এটি অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি আপনাকে যেকোনও সময় মডেলকে বাধা দিতে দেয়। VAD ডিফল্ট হিসেবে চালু করা থাকে।

আপনি VAD-এর আচরণ কাস্টমাইজ করতে পারবেন, যার মধ্যে বাধা ম্যানেজ করা অন্তর্ভুক্ত। আপনি বিকল্প হিসেবে কথোপকথনের টার্নের (যেমন, পুশ-টু-টক ইন্টারফেসের জন্য) উপর সম্পূর্ণ ম্যানুয়াল কন্ট্রোল নিতে অটোমেটিক VAD বন্ধ করতে পারেন।

ভয়েস অ্যাক্টিভিটি শনাক্তকরণ (VAD) কনফিগার করুন

এই পৃষ্ঠায় প্রদানকারী-নির্দিষ্ট কন্টেন্ট এবং কোড দেখতে আপনার Gemini API প্রদানকারীর উপর ক্লিক করুন।

নিম্নলিখিত উদাহরণ থেকে আপনি জানতে পারবেন যে কীভাবে মডেল কনফিগারেশনের অংশ হিসেবে realtimeInputConfig সেট করে VAD-এর আচরণ কাস্টমাইজ করতে পারবেন। এই বিভাগের শেষে দেওয়া সারণী থেকে এই কনফিগারেশনের জন্য উপলভ্য সেটিংস সম্পর্কে জানুন।

Swift


// ...

let liveModel = FirebaseAI.firebaseAI(backend: .googleAI()).liveModel(
  modelName: "GEMINI_LIVE_API_MODEL_NAME",
  generationConfig: LiveGenerationConfig(
    responseModalities: [.audio],
    // Configure voice activity detection (VAD), interruption handling, and turn coverage.
    // IMPORTANT: Example values shown here. Make sure to update for your use case.
    realtimeInputConfig: RealtimeInputConfig(
      automaticActivityDetection: ActivityDetectionConfig(
        startSensitivity: .low,
        endSensitivity: .low,
        prefixPadding: .milliseconds(20),
        silenceDuration: .milliseconds(500)
      ),
      activityHandling: .interrupt,
      turnCoverage: .onlyActivity
    )
  )
)

Kotlin


// ...

val liveModel = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel(
    modelName = "GEMINI_LIVE_API_MODEL_NAME",
    generationConfig = liveGenerationConfig {
        responseModality = ResponseModality.AUDIO
        // Configure voice activity detection (VAD), interruption handling, and turn coverage.
        // IMPORTANT: Example values shown here. Make sure to update for your use case.
        realtimeInputConfig = realtimeInputConfig {
            automaticActivityDetection = ActivityDetectionConfig.builder()
                .setStartSensitivity(ActivityDetectionConfig.Sensitivity.LOW)
                .setEndSensitivity(ActivityDetectionConfig.Sensitivity.LOW)
                .setPrefixPaddingMs(20)
                .setSilenceDurationMs(500)
                .build()
            activityHandling = RealtimeInputConfig.ActivityHandling.INTERRUPT
            turnCoverage = RealtimeInputConfig.TurnCoverage.ONLY_ACTIVITY
        }
    }
)

Java


// ...

LiveGenerativeModel lm = FirebaseAI.getInstance(GenerativeBackend.googleAI()).liveModel(
        "GEMINI_LIVE_API_MODEL_NAME",
        new LiveGenerationConfig.Builder()
                .setResponseModality(ResponseModality.AUDIO)
                // Configure voice activity detection (VAD), interruption handling, and turn coverage.
                // IMPORTANT: Example values shown here. Make sure to update for your use case.
                .setRealtimeInputConfig(RealtimeInputConfig.builder()
                        .setAutomaticActivityDetection(ActivityDetectionConfig.builder()
                                .setStartSensitivity(ActivityDetectionConfig.Sensitivity.LOW)
                                .setEndSensitivity(ActivityDetectionConfig.Sensitivity.LOW)
                                .setPrefixPaddingMs(20)
                                .setSilenceDurationMs(500)
                                .build())
                        .setActivityHandling(RealtimeInputConfig.ActivityHandling.INTERRUPT)
                        .setTurnCoverage(RealtimeInputConfig.TurnCoverage.ONLY_ACTIVITY)
                        .build())
                .build()
);

Web

Not yet supported for Web apps - check back soon!

Dart


// ...

final _liveModel = FirebaseAI.googleAI().liveGenerativeModel(
  model: 'GEMINI_LIVE_API_MODEL_NAME',
  liveGenerationConfig: LiveGenerationConfig(
    responseModalities: [ResponseModalities.audio],
    // Configure voice activity detection (VAD), interruption handling, and turn coverage.
    // IMPORTANT: Example values shown here. Make sure to update for your use case.
    realtimeInputConfig: RealtimeInputConfig(
      automaticActivityDetection: ActivityDetectionConfig(
        startSensitivity: Sensitivity.low,
        endSensitivity: Sensitivity.low,
        prefixPaddingMS: 20,
        silenceDurationMS: 500,
      ),
      activityHandling: ActivityHandling.interrupt,
      turnCoverage: TurnCoverage.onlyActivity,
    ),
  ),
);

Unity


// ...

var liveModel = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetLiveModel(
    modelName: "GEMINI_LIVE_API_MODEL_NAME",
    liveGenerationConfig: new LiveGenerationConfig(
        responseModalities: new[] { ResponseModality.Audio },
        // Configure voice activity detection (VAD), interruption handling, and turn coverage.
        // IMPORTANT: Example values shown here. Make sure to update for your use case.
        realtimeInputConfig: new RealtimeInputConfig(
            automaticActivityDetection: new ActivityDetectionConfig(
                startSensitivity: ActivityDetectionConfig.Sensitivity.Low,
                endSensitivity: ActivityDetectionConfig.Sensitivity.Low,
                prefixPaddingMS: 20,
                silenceDurationMS: 500
            ),
            activityHandling: RealtimeInputConfig.ActivityHandling.Interrupt,
            turnCoverage: RealtimeInputConfig.TurnCoverage.OnlyActivity
        )
    )
);

উপলভ্য VAD কনফিগারেশন সেটিংস

সেটিং সাপোর্ট করা ভ্যালু বিবরণ
অটোমেটিক অ্যাক্টিভিটি শনাক্তকরণ (automaticActivityDetection)
startSensitivity
  • LOW (ডিফল্ট)
  • HIGH

ব্যবহারকারী কথা বলা শুরু করলে সার্ভার কত দ্রুত তা শনাক্ত করে তা নির্ধারণ করে:

  • LOW: ক্ষীণ সাউন্ডের ক্ষেত্রে কম সংবেদনশীল। এটি অ্যাম্বিয়েন্ট নয়েজের কারণে অনিচ্ছাকৃতভাবে স্পিচ টার্ন শুরু হওয়া আটকায়।
  • HIGH: আরও সংবেদনশীল। এটি আস্তে বলা কথা বা মৃদু শব্দ দ্রুত শনাক্ত করতে সাহায্য করে।
endSensitivity
  • LOW (ডিফল্ট)
  • HIGH

ব্যবহারকারী কথা বলা বন্ধ করলে, সার্ভার কত দ্রুত তা শনাক্ত করে তা নির্ধারণ করে:

  • LOW: ট্রেলিং পজের ক্ষেত্রে কম সংবেদনশীল। সার্ভার বাক্যের শেষে স্বাভাবিক দ্বিধা বা শান্ত শব্দ গ্রহণ করে।
  • HIGH: আরও সংবেদনশীল। ভয়েস লেভেল কমে গেলে সার্ভার স্পিচ টার্ন দ্রুত শেষ করে।
prefixPadding মিলিসেকেন্ডে সময়সীমা
(ডিফল্ট: কিছু নয় (০ মিলিসেকেন্ড))

স্পিচ শনাক্ত করার আগে কতটা অডিও অন্তর্ভুক্ত করা হবে তা নির্ধারণ করে।

এই "লুক-ব্যাক" বাফার নিশ্চিত করে যে মডেলটি স্পিচের সম্পূর্ণ শুরু ক্যাপচার করে, যার মধ্যে প্রথম সিলেবলও অন্তর্ভুক্ত থাকে যা প্রায়শই ডিটেক্টর ট্রিগার করার আগে শুরু হয়।

  • 0-এর ডিফল্ট ভ্যালুর কারণে শব্দের শুরুটা কেটে যেতে পারে।
  • সাজেস্ট করা হয়েছে: ২০-৫০ মিলিসেকেন্ড
silenceDuration মিলিসেকেন্ডে সময়সীমা
(ডিফল্ট: ~৮০০ মিলিসেকেন্ড)

স্পিচ টার্ন শেষ করার আগে সার্ভার কতক্ষণ সাইলেন্সের মাধ্যমে অপেক্ষা করে তা নির্ধারণ করে। এটি নির্ধারণ করে যে সিস্টেমটি বাক্যের মাঝখানে স্বাভাবিক বিরতির (যেমন চিন্তা করা, শ্বাস নেওয়া বা ক্লজ বাউন্ডারি) প্রতি কতটা সহনশীল।

  • সাজেস্ট করা (৫০০-৮০০ মিলি সেকেন্ড): একটি ভালো ভারসাম্য প্রদান করে—মডেলটি সম্পূর্ণ, প্রাসঙ্গিকভাবে সমৃদ্ধ অডিও গ্রহণ করে এবং উত্তরের লেটেন্সি যুক্তিসঙ্গত রাখে।
  • খুব কম (২০০ মিলি সেকেন্ডের কম): স্বাভাবিক বিরতির সময় স্পিচ টার্ন শেষ করে, উচ্চারণকে ছোট ছোট টুকরোতে বিভক্ত করে যা ট্রান্সক্রিপশন এবং উত্তরের কোয়ালিটি খারাপ করতে পারে।
  • খুব বেশি (২০০০ মিলি সেকেন্ডের বেশি): মডেল উত্তর দেওয়া শুরু করার আগে উল্লেখযোগ্য বিলম্ব যোগ করে।
বাধা দেওয়ার আচরণ (activityHandling)
activityHandling
  • INTERRUPT (ডিফল্ট)
  • NO_INTERRUPT

উত্তর তৈরি করার সময় সার্ভার কীভাবে ইনকামিং ব্যবহারকারীর অ্যাক্টিভিটি ম্যানেজ করে তা নির্ধারণ করে:

  • INTERRUPT: ব্যবহারকারীর অ্যাক্টিভিটি শনাক্ত করা হলে, মডেলের বর্তমান উত্তর অবিলম্বে বাতিল করে দেয়।
  • NO_INTERRUPT: কোনও বাধা ছাড়াই উত্তর জেনারেট করা চালিয়ে যায়।
টার্ন কনটেক্সট কভারেজ (turnCoverage)
turnCoverage
  • ONLY_ACTIVITY (ডিফল্ট)
  • ALL_INPUT
  • AUDIO_ACTIVITY_AND_ALL_VIDEO

কথোপকথনের সময় কোন স্ট্রিম করা ইনপুট অন্তর্ভুক্ত করা হয়েছে তা ব্যাখ্যা করে প্রসঙ্গ:

  • ONLY_ACTIVITY: নীরবতা বাদ দেয়, শুধুমাত্র সেইসব অংশ রাখে যেখানে ব্যবহারকারীর অ্যাক্টিভিটি শনাক্ত করা হয়েছে।
  • ALL_INPUT: অডিও সাইলেন্স সহ স্ট্রিম করা সব ইনপুট রেখে দেয়।
  • AUDIO_ACTIVITY_AND_ALL_VIDEO: স্ট্রিম করা সব ভিডিও ফ্রেম রেখে দেয়, তবে শুধু সেইসব অডিও সেগমেন্ট রাখে যেখানে অ্যাক্টিভিটি শনাক্ত করা হয়েছে।

বাধা সামলানো

মডেল যখন উত্তর তৈরি করছে এবং activityHandling-কে INTERRUPT (ডিফল্ট) হিসেবে সেট করা আছে, তখন সার্ভার যদি ব্যবহারকারীর ইনকামিং স্পিচ শনাক্ত করে, তাহলে নিম্নলিখিত আচরণ সম্পর্কে সচেতন থাকুন:

  • জেনারেট করা বাতিল করা হয়েছে: মডেলটি অবিলম্বে তার উত্তর দেওয়া বন্ধ করে দেয় এবং যেকোনও মুলতুবি টুল কল বাতিল করে দেয়।

  • সেশন ইতিহাস ট্রাঙ্কেট করা হয়েছে: বাধা পাওয়ার আগে আপনার অ্যাপে আগে থেকে ট্রান্সমিট করা কন্টেন্টই শুধু সেশন কন্টেক্সট উইন্ডোতে সংরক্ষিত থাকে।

  • বাধা দেওয়ার সিগন্যাল পাঠানো হয়েছে: সার্ভার একটি উত্তর মেসেজ পাঠায় যা থেকে বোঝা যায় যে জেনারেশন প্রসেসে বাধা দেওয়া হয়েছে (যেমন Swift-এ wasInterrupted বা Kotlin, Java, Web, Flutter ও Unity-তে interrupted)।

অটোমেটিক ভয়েস অ্যাক্টিভিটি শনাক্তকরণ (VAD) বন্ধ করুন

কথোপকথনের টার্নের উপর সম্পূর্ণ ম্যানুয়াল কন্ট্রোল নিতে (যেমন, পুশ-টু-টক ইন্টারফেসের জন্য), আপনি সংবেদনশীলতা প্যারামিটার কনফিগার করার পরিবর্তে অটোমেটিক ভয়েস অ্যাক্টিভিটি শনাক্তকরণ (VAD) বন্ধ করতে পারেন।

অটোমেটিক শনাক্তকরণ বন্ধ করা থাকলে, সার্ভার অটোমেটিক স্পিচ শনাক্ত করবে না বা অডিও সাইলেন্সের ভিত্তিতে ট্রিগার রেসপন্স করবে না। পরিবর্তে, আপনার অ্যাপকে অবশ্যই অ্যাক্টিভ সেশন চলাকালীন ব্যবহারকারীর অ্যাক্টিভিটির সীমা ম্যানুয়ালি সিগন্যাল করতে হবে।

১. মডেল কনফিগারেশনে অটোমেটিক VAD বন্ধ করুন

এই পৃষ্ঠায় প্রদানকারী-নির্দিষ্ট কন্টেন্ট এবং কোড দেখতে আপনার Gemini API প্রদানকারীর উপর ক্লিক করুন।

Swift


// ...

let liveModel = FirebaseAI.firebaseAI(backend: .googleAI()).liveModel(
  modelName: "GEMINI_LIVE_API_MODEL_NAME",
  generationConfig: LiveGenerationConfig(
    responseModalities: [.audio],
    // Disable automatic voice activity detection (VAD).
    realtimeInputConfig: RealtimeInputConfig(
      automaticActivityDetection: .disabled()
    )
  )
)

Kotlin


// ...

val liveModel = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel(
    modelName = "GEMINI_LIVE_API_MODEL_NAME",
    generationConfig = liveGenerationConfig {
        responseModality = ResponseModality.AUDIO
        // Disable automatic voice activity detection (VAD).
        realtimeInputConfig = realtimeInputConfig {
            automaticActivityDetection = ActivityDetectionConfig.disabled()
        }
    }
)

Java


// ...

LiveGenerativeModel lm = FirebaseAI.getInstance(GenerativeBackend.googleAI()).liveModel(
        "GEMINI_LIVE_API_MODEL_NAME",
        new LiveGenerationConfig.Builder()
                .setResponseModality(ResponseModality.AUDIO)
                // Disable automatic voice activity detection (VAD).
                .setRealtimeInputConfig(RealtimeInputConfig.builder()
                        .setAutomaticActivityDetection(ActivityDetectionConfig.disabled())
                        .build())
                .build()
);

Web

Not yet supported for Web apps - check back soon!

Dart


// ...

final _liveModel = FirebaseAI.googleAI().liveGenerativeModel(
  model: 'GEMINI_LIVE_API_MODEL_NAME',
  liveGenerationConfig: LiveGenerationConfig(
    responseModalities: [ResponseModalities.audio],
    // Disable automatic voice activity detection (VAD).
    realtimeInputConfig: RealtimeInputConfig(
      automaticActivityDetection: ActivityDetectionConfig.disabled(),
    ),
  ),
);

Unity


// ...

var liveModel = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetLiveModel(
    modelName: "GEMINI_LIVE_API_MODEL_NAME",
    liveGenerationConfig: new LiveGenerationConfig(
        responseModalities: new[] { ResponseModality.Audio },
        // Disable automatic voice activity detection (VAD).
        realtimeInputConfig: new RealtimeInputConfig(
            automaticActivityDetection: ActivityDetectionConfig.Disabled()
        )
    )
);

২. ব্যবহারকারীর অ্যাক্টিভিটি বাউন্ডারি ম্যানুয়ালি সিগন্যাল করুন

আপনি VAD বন্ধ করে দিলে, আপনার অ্যাপকে প্রতিটি ব্যবহারকারীর অ্যাক্টিভিটি টার্নের সীমানা ম্যানুয়ালি চিহ্নিত করতে হবে:

  1. সিগন্যাল অ্যাক্টিভিটি শুরু: অডিও ডেটা পাঠানোর আগে sendStartActivityRealtime কল করুন (যেমন, কোনও ব্যবহারকারী পুশ-টু-টক বোতাম প্রেস করলে)।

  2. ব্যবহারকারীর ইনপুট স্ট্রিম করুন: sendAudioRealtime ব্যবহার করে একটানা অডিও (বা ভিডিও) ডেটা স্ট্রিম করুন।

  3. অ্যাক্টিভিটি শেষ হওয়ার সিগন্যাল: ব্যবহারকারী কথা বলা শেষ করলে (যেমন, ব্যবহারকারী পুশ-টু-টক বোতাম ছেড়ে দিলে) sendStopActivityRealtime-এ কল করুন। এটি ব্যবহারকারীর টার্ন শেষ হওয়ার সিগন্যাল দেয় এবং মডেলের উত্তর ট্রিগার করে।

Swift

// If you disable automatic voice activity detection (VAD), you need to manually demarcate user activity.

// Signal the start of user activity (for example, on push-to-talk button press).
await session.sendStartActivityRealtime()

// Stream user audio data while the user speaks.
await session.sendAudioRealtime(audioData)

// Signal the end of user activity (for example, on button release) to trigger model response.
await session.sendStopActivityRealtime()

Kotlin

// If you disable automatic voice activity detection (VAD), you need to manually demarcate user activity.

// Signal the start of user activity (for example, on push-to-talk button press).
session.sendStartActivityRealtime()

// Stream user audio data while the user speaks.
session.sendAudioRealtime(audioData)

// Signal the end of user activity (for example, on button release) to trigger model response.
session.sendStopActivityRealtime()

Java

// If you disable automatic voice activity detection (VAD), you need to manually demarcate user activity.

// Signal the start of user activity (for example, on push-to-talk button press).
session.sendStartActivityRealtime();

// Stream user audio data while the user speaks.
session.sendAudioRealtime(audioData);

// Signal the end of user activity (for example, on button release) to trigger model response.
session.sendStopActivityRealtime();

Web

Not yet supported for Web apps - check back soon!

Dart

// If you disable automatic voice activity detection (VAD), you need to manually demarcate user activity.

// Signal the start of user activity (for example, on push-to-talk button press).
await session.sendStartActivityRealtime();

// Stream user audio data while the user speaks.
await session.sendAudioRealtime(audioData);

// Signal the end of user activity (for example, on button release) to trigger model response.
await session.sendStopActivityRealtime();

Unity

// If you disable automatic voice activity detection (VAD), you need to manually demarcate user activity.

// Signal the start of user activity (for example, on push-to-talk button press).
await session.SendStartActivityRealtimeAsync();

// Stream user audio data while the user speaks.
await session.SendAudioRealtimeAsync(audio: audioData);

// Signal the end of user activity (for example, on button release) to trigger model response.
await session.SendStopActivityRealtimeAsync();



সেশন ম্যানেজমেন্ট

সেশন সম্পর্কিত নিম্নলিখিত বিষয়গুলি সম্পর্কে জানুন: