টুল ব্যবহার লাইভ এপিআইকে বাস্তব-বিশ্বে ক্রিয়া সম্পাদন করতে এবং একটি রিয়েল টাইম সংযোগ বজায় রেখে বাহ্যিক প্রসঙ্গে টানতে সক্ষম করে কেবল কথোপকথনের বাইরে যেতে দেয়। আপনি লাইভ API এর সাথে ফাংশন কলিং , কোড এক্সিকিউশন এবং Google অনুসন্ধানের মতো সরঞ্জামগুলি সংজ্ঞায়িত করতে পারেন।
সমর্থিত টুলের ওভারভিউ
এখানে প্রতিটি মডেলের জন্য উপলব্ধ সরঞ্জামগুলির একটি সংক্ষিপ্ত বিবরণ রয়েছে:
টুল | ক্যাসকেড মডেলgemini-2.0-flash-live-001 | gemini-2.5-flash-preview-native-audio-dialog | gemini-2.5-flash-exp-native-audio-thinking-dialog |
---|---|---|---|
অনুসন্ধান করুন | হ্যাঁ | হ্যাঁ | হ্যাঁ |
ফাংশন কলিং | হ্যাঁ | হ্যাঁ | না |
কোড এক্সিকিউশন | হ্যাঁ | না | না |
ইউআরএল প্রসঙ্গ | হ্যাঁ | না | না |
ফাংশন কলিং
লাইভ API ফাংশন কলিং সমর্থন করে, ঠিক নিয়মিত সামগ্রী তৈরির অনুরোধের মতো। ফাংশন কলিং লাইভ এপিআইকে বাহ্যিক ডেটা এবং প্রোগ্রামগুলির সাথে ইন্টারঅ্যাক্ট করতে দেয়, যা আপনার অ্যাপ্লিকেশনগুলি কী করতে পারে তা ব্যাপকভাবে বৃদ্ধি করে৷
আপনি সেশন কনফিগারেশনের অংশ হিসাবে ফাংশন ঘোষণা সংজ্ঞায়িত করতে পারেন। টুল কল পাওয়ার পর, ক্লায়েন্টকে session.send_tool_response
পদ্ধতি ব্যবহার করে FunctionResponse
অবজেক্টের একটি তালিকা দিয়ে সাড়া দেওয়া উচিত।
আরও জানতে ফাংশন কলিং টিউটোরিয়াল দেখুন।
পাইথন
import asyncio
from google import genai
from google.genai import types
client = genai.Client(api_key="GEMINI_API_KEY")
model = "gemini-2.0-flash-live-001"
# Simple function definitions
turn_on_the_lights = {"name": "turn_on_the_lights"}
turn_off_the_lights = {"name": "turn_off_the_lights"}
tools = [{"function_declarations": [turn_on_the_lights, turn_off_the_lights]}]
config = {"response_modalities": ["TEXT"], "tools": tools}
async def main():
async with client.aio.live.connect(model=model, config=config) as session:
prompt = "Turn on the lights please"
await session.send_client_content(turns={"parts": [{"text": prompt}]})
async for chunk in session.receive():
if chunk.server_content:
if chunk.text is not None:
print(chunk.text)
elif chunk.tool_call:
function_responses = []
for fc in chunk.tool_call.function_calls:
function_response = types.FunctionResponse(
id=fc.id,
name=fc.name,
response={ "result": "ok" } # simple, hard-coded function response
)
function_responses.append(function_response)
await session.send_tool_response(function_responses=function_responses)
if __name__ == "__main__":
asyncio.run(main())
জাভাস্ক্রিপ্ট
import { GoogleGenAI, Modality } from '@google/genai';
const ai = new GoogleGenAI({ apiKey: "GOOGLE_API_KEY" });
const model = 'gemini-2.0-flash-live-001';
// Simple function definitions
const turn_on_the_lights = { name: "turn_on_the_lights" } // , description: '...', parameters: { ... }
const turn_off_the_lights = { name: "turn_off_the_lights" }
const tools = [{ functionDeclarations: [turn_on_the_lights, turn_off_the_lights] }]
const config = {
responseModalities: [Modality.TEXT],
tools: tools
}
async function live() {
const responseQueue = [];
async function waitMessage() {
let done = false;
let message = undefined;
while (!done) {
message = responseQueue.shift();
if (message) {
done = true;
} else {
await new Promise((resolve) => setTimeout(resolve, 100));
}
}
return message;
}
async function handleTurn() {
const turns = [];
let done = false;
while (!done) {
const message = await waitMessage();
turns.push(message);
if (message.serverContent && message.serverContent.turnComplete) {
done = true;
} else if (message.toolCall) {
done = true;
}
}
return turns;
}
const session = await ai.live.connect({
model: model,
callbacks: {
onopen: function () {
console.debug('Opened');
},
onmessage: function (message) {
responseQueue.push(message);
},
onerror: function (e) {
console.debug('Error:', e.message);
},
onclose: function (e) {
console.debug('Close:', e.reason);
},
},
config: config,
});
const inputTurns = 'Turn on the lights please';
session.sendClientContent({ turns: inputTurns });
let turns = await handleTurn();
for (const turn of turns) {
if (turn.serverContent && turn.serverContent.modelTurn && turn.serverContent.modelTurn.parts) {
for (const part of turn.serverContent.modelTurn.parts) {
if (part.text) {
console.debug('Received text: %s\n', part.text);
}
}
}
else if (turn.toolCall) {
const functionResponses = [];
for (const fc of turn.toolCall.functionCalls) {
functionResponses.push({
id: fc.id,
name: fc.name,
response: { result: "ok" } // simple, hard-coded function response
});
}
console.debug('Sending tool response...\n');
session.sendToolResponse({ functionResponses: functionResponses });
}
}
// Check again for new messages
turns = await handleTurn();
for (const turn of turns) {
if (turn.serverContent && turn.serverContent.modelTurn && turn.serverContent.modelTurn.parts) {
for (const part of turn.serverContent.modelTurn.parts) {
if (part.text) {
console.debug('Received text: %s\n', part.text);
}
}
}
}
session.close();
}
async function main() {
await live().catch((e) => console.error('got error', e));
}
main();
একটি একক প্রম্পট থেকে, মডেলটি একাধিক ফাংশন কল এবং তাদের আউটপুট চেইন করার জন্য প্রয়োজনীয় কোড তৈরি করতে পারে। এই কোডটি একটি স্যান্ডবক্স পরিবেশে কার্যকর করে, পরবর্তী BidiGenerateContentToolCall বার্তা তৈরি করে।
অ্যাসিঙ্ক্রোনাস ফাংশন কলিং
ফাংশন কলিং ডিফল্টভাবে ক্রমানুসারে সঞ্চালিত হয়, যার অর্থ প্রতিটি ফাংশন কলের ফলাফল উপলব্ধ না হওয়া পর্যন্ত এক্সিকিউশন বিরতি দেয়। এটি ক্রমিক প্রক্রিয়াকরণ নিশ্চিত করে, যার মানে আপনি ফাংশন চালানোর সময় মডেলের সাথে ইন্টারঅ্যাক্ট করা চালিয়ে যেতে পারবেন না।
আপনি যদি কথোপকথনটি ব্লক করতে না চান তবে আপনি মডেলটিকে অ্যাসিঙ্ক্রোনাসভাবে ফাংশনগুলি চালানোর জন্য বলতে পারেন৷ এটি করার জন্য, আপনাকে প্রথমে ফাংশন সংজ্ঞাগুলিতে একটি behavior
যুক্ত করতে হবে:
পাইথন
# Non-blocking function definitions
turn_on_the_lights = {"name": "turn_on_the_lights", "behavior": "NON_BLOCKING"} # turn_on_the_lights will run asynchronously
turn_off_the_lights = {"name": "turn_off_the_lights"} # turn_off_the_lights will still pause all interactions with the model
জাভাস্ক্রিপ্ট
import { GoogleGenAI, Modality, Behavior } from '@google/genai';
// Non-blocking function definitions
const turn_on_the_lights = {name: "turn_on_the_lights", behavior: Behavior.NON_BLOCKING}
// Blocking function definitions
const turn_off_the_lights = {name: "turn_off_the_lights"}
const tools = [{ functionDeclarations: [turn_on_the_lights, turn_off_the_lights] }]
NON-BLOCKING
নিশ্চিত করে যে ফাংশনটি অ্যাসিঙ্ক্রোনাসভাবে চলে যখন আপনি মডেলের সাথে ইন্টারঅ্যাক্ট করা চালিয়ে যেতে পারেন।
তারপরে আপনাকে মডেলটিকে বলতে হবে কিভাবে আচরণ করতে হবে যখন এটি scheduling
পরামিতি ব্যবহার করে FunctionResponse
পায়। এটি হতে পারে:
- এটি যা করছে তাতে বাধা দিন এবং এটির প্রতিক্রিয়া সম্পর্কে আপনাকে বলুন (
scheduling="INTERRUPT"
), - এটি বর্তমানে যা করছে তা শেষ না হওয়া পর্যন্ত অপেক্ষা করুন (
scheduling="WHEN_IDLE"
), অথবা কিছুই করবেন না এবং সেই জ্ঞানটি পরে আলোচনায় ব্যবহার করুন (
scheduling="SILENT"
)
পাইথন
# for a non-blocking function definition, apply scheduling in the function response:
function_response = types.FunctionResponse(
id=fc.id,
name=fc.name,
response={
"result": "ok",
"scheduling": "INTERRUPT" # Can also be WHEN_IDLE or SILENT
}
)
জাভাস্ক্রিপ্ট
import { GoogleGenAI, Modality, Behavior, FunctionResponseScheduling } from '@google/genai';
// for a non-blocking function definition, apply scheduling in the function response:
const functionResponse = {
id: fc.id,
name: fc.name,
response: {
result: "ok",
scheduling: FunctionResponseScheduling.INTERRUPT // Can also be WHEN_IDLE or SILENT
}
}
কোড এক্সিকিউশন
আপনি সেশন কনফিগারেশনের অংশ হিসাবে কোড এক্সিকিউশন সংজ্ঞায়িত করতে পারেন। এটি লাইভ এপিআইকে পাইথন কোড জেনারেট ও এক্সিকিউট করতে দেয় এবং আপনার ফলাফলের সুবিধার জন্য গতিশীলভাবে গণনা করতে দেয়। আরও জানতে কোড এক্সিকিউশন টিউটোরিয়াল দেখুন।
পাইথন
import asyncio
from google import genai
from google.genai import types
client = genai.Client(api_key="GEMINI_API_KEY")
model = "gemini-2.0-flash-live-001"
tools = [{'code_execution': {}}]
config = {"response_modalities": ["TEXT"], "tools": tools}
async def main():
async with client.aio.live.connect(model=model, config=config) as session:
prompt = "Compute the largest prime palindrome under 100000."
await session.send_client_content(turns={"parts": [{"text": prompt}]})
async for chunk in session.receive():
if chunk.server_content:
if chunk.text is not None:
print(chunk.text)
model_turn = chunk.server_content.model_turn
if model_turn:
for part in model_turn.parts:
if part.executable_code is not None:
print(part.executable_code.code)
if part.code_execution_result is not None:
print(part.code_execution_result.output)
if __name__ == "__main__":
asyncio.run(main())
জাভাস্ক্রিপ্ট
import { GoogleGenAI, Modality } from '@google/genai';
const ai = new GoogleGenAI({ apiKey: "GOOGLE_API_KEY" });
const model = 'gemini-2.0-flash-live-001';
const tools = [{codeExecution: {}}]
const config = {
responseModalities: [Modality.TEXT],
tools: tools
}
async function live() {
const responseQueue = [];
async function waitMessage() {
let done = false;
let message = undefined;
while (!done) {
message = responseQueue.shift();
if (message) {
done = true;
} else {
await new Promise((resolve) => setTimeout(resolve, 100));
}
}
return message;
}
async function handleTurn() {
const turns = [];
let done = false;
while (!done) {
const message = await waitMessage();
turns.push(message);
if (message.serverContent && message.serverContent.turnComplete) {
done = true;
} else if (message.toolCall) {
done = true;
}
}
return turns;
}
const session = await ai.live.connect({
model: model,
callbacks: {
onopen: function () {
console.debug('Opened');
},
onmessage: function (message) {
responseQueue.push(message);
},
onerror: function (e) {
console.debug('Error:', e.message);
},
onclose: function (e) {
console.debug('Close:', e.reason);
},
},
config: config,
});
const inputTurns = 'Compute the largest prime palindrome under 100000.';
session.sendClientContent({ turns: inputTurns });
const turns = await handleTurn();
for (const turn of turns) {
if (turn.serverContent && turn.serverContent.modelTurn && turn.serverContent.modelTurn.parts) {
for (const part of turn.serverContent.modelTurn.parts) {
if (part.text) {
console.debug('Received text: %s\n', part.text);
}
else if (part.executableCode) {
console.debug('executableCode: %s\n', part.executableCode.code);
}
else if (part.codeExecutionResult) {
console.debug('codeExecutionResult: %s\n', part.codeExecutionResult.output);
}
}
}
}
session.close();
}
async function main() {
await live().catch((e) => console.error('got error', e));
}
main();
Google অনুসন্ধানের সাথে গ্রাউন্ডিং
আপনি সেশন কনফিগারেশনের অংশ হিসাবে Google অনুসন্ধানের সাথে গ্রাউন্ডিং সক্ষম করতে পারেন। এটি লাইভ API এর নির্ভুলতা বাড়ায় এবং হ্যালুসিনেশন প্রতিরোধ করে। আরও জানতে গ্রাউন্ডিং টিউটোরিয়াল দেখুন।
পাইথন
import asyncio
from google import genai
from google.genai import types
client = genai.Client(api_key="GEMINI_API_KEY")
model = "gemini-2.0-flash-live-001"
tools = [{'google_search': {}}]
config = {"response_modalities": ["TEXT"], "tools": tools}
async def main():
async with client.aio.live.connect(model=model, config=config) as session:
prompt = "When did the last Brazil vs. Argentina soccer match happen?"
await session.send_client_content(turns={"parts": [{"text": prompt}]})
async for chunk in session.receive():
if chunk.server_content:
if chunk.text is not None:
print(chunk.text)
# The model might generate and execute Python code to use Search
model_turn = chunk.server_content.model_turn
if model_turn:
for part in model_turn.parts:
if part.executable_code is not None:
print(part.executable_code.code)
if part.code_execution_result is not None:
print(part.code_execution_result.output)
if __name__ == "__main__":
asyncio.run(main())
জাভাস্ক্রিপ্ট
import { GoogleGenAI, Modality } from '@google/genai';
const ai = new GoogleGenAI({ apiKey: "GOOGLE_API_KEY" });
const model = 'gemini-2.0-flash-live-001';
const tools = [{googleSearch: {}}]
const config = {
responseModalities: [Modality.TEXT],
tools: tools
}
async function live() {
const responseQueue = [];
async function waitMessage() {
let done = false;
let message = undefined;
while (!done) {
message = responseQueue.shift();
if (message) {
done = true;
} else {
await new Promise((resolve) => setTimeout(resolve, 100));
}
}
return message;
}
async function handleTurn() {
const turns = [];
let done = false;
while (!done) {
const message = await waitMessage();
turns.push(message);
if (message.serverContent && message.serverContent.turnComplete) {
done = true;
} else if (message.toolCall) {
done = true;
}
}
return turns;
}
const session = await ai.live.connect({
model: model,
callbacks: {
onopen: function () {
console.debug('Opened');
},
onmessage: function (message) {
responseQueue.push(message);
},
onerror: function (e) {
console.debug('Error:', e.message);
},
onclose: function (e) {
console.debug('Close:', e.reason);
},
},
config: config,
});
const inputTurns = 'When did the last Brazil vs. Argentina soccer match happen?';
session.sendClientContent({ turns: inputTurns });
const turns = await handleTurn();
for (const turn of turns) {
if (turn.serverContent && turn.serverContent.modelTurn && turn.serverContent.modelTurn.parts) {
for (const part of turn.serverContent.modelTurn.parts) {
if (part.text) {
console.debug('Received text: %s\n', part.text);
}
else if (part.executableCode) {
console.debug('executableCode: %s\n', part.executableCode.code);
}
else if (part.codeExecutionResult) {
console.debug('codeExecutionResult: %s\n', part.codeExecutionResult.output);
}
}
}
}
session.close();
}
async function main() {
await live().catch((e) => console.error('got error', e));
}
main();
একাধিক টুল একত্রিত করা
আপনি লাইভ API-এর মধ্যে একাধিক টুল একত্রিত করতে পারেন, আপনার অ্যাপ্লিকেশনের ক্ষমতা আরও বাড়িয়ে দিতে পারেন:
পাইথন
prompt = """
Hey, I need you to do three things for me.
1. Compute the largest prime palindrome under 100000.
2. Then use Google Search to look up information about the largest earthquake in California the week of Dec 5 2024?
3. Turn on the lights
Thanks!
"""
tools = [
{"google_search": {}},
{"code_execution": {}},
{"function_declarations": [turn_on_the_lights, turn_off_the_lights]},
]
config = {"response_modalities": ["TEXT"], "tools": tools}
# ... remaining model call
জাভাস্ক্রিপ্ট
const prompt = `Hey, I need you to do three things for me.
1. Compute the largest prime palindrome under 100000.
2. Then use Google Search to look up information about the largest earthquake in California the week of Dec 5 2024?
3. Turn on the lights
Thanks!
`
const tools = [
{ googleSearch: {} },
{ codeExecution: {} },
{ functionDeclarations: [turn_on_the_lights, turn_off_the_lights] }
]
const config = {
responseModalities: [Modality.TEXT],
tools: tools
}
// ... remaining model call
এরপর কি
- টুল ইউজ কুকবুকে লাইভ এপিআই-এর সাথে টুল ব্যবহারের আরও উদাহরণ দেখুন।
- লাইভ API ক্যাপাবিলিটিস গাইড থেকে বৈশিষ্ট্য এবং কনফিগারেশনের সম্পূর্ণ গল্প পান।