astonishing-waitress-60915
02/16/2026, 2:33 PMtall-airline-16756
02/16/2026, 2:33 PMtall-airline-16756
02/16/2026, 2:34 PMtool_choice parametresini desteklemiyor. Agent yapılandırmanda tool_choice gönderiliyorsa veya framework varsayılan olarak ekliyorsa bu uyarı ortaya çıkar. tool_choice kaldırılırsa uyarı kaybolur.
Neden oluyor
• tool_choice standart LLM’lerde (OpenAI, Anthropic vb.) kullanılan bir parametre; Gemini Live gerçek zamanlı modelinde bu parametre yok. LiveKit agent yapılandırması genel LLM parametrelerini uyguluyorsa tool_choice hala iletiliyor olabilir ve bu yüzden uyarı veriliyor.
Ne yapmalısın (adım adım)
1. Agent/session yapılandırmanı kontrol et
◦ AgentSession veya agent oluştururken llm içinde tool_choice parametresi olup olmadığını ara. Varsa kaldır.
1. RealtimeModel kullan
◦ Gemini Live için google.realtime.RealtimeModel kullan ve tool_choice ekleme.
1. Fonksiyon çağrıları / araç kullanımı (tools) varsa
◦ Araçları (GoogleSearch vb.) sağlayabilirsin, ancak tool_choice ile kontrol edilemez — model araçları otomatik olarak kullanır.
1. Uyarının kod örneği (doğru yapılandırma)
from livekit.plugins import google
from livekit.agents import AgentSession
session = AgentSession(
llm=google.realtime.RealtimeModel(
model="gemini-2.5-flash-native-audio-preview-12-2025",
voice="Puck",
temperature=0.8,
instructions="You are a helpful assistant.",
# ❌ Buraya: tool_choice="auto" gibi parametre ekleme
),
# diğer bileşenler: vad, stt, vb.
)
Ve araçları eklerken:
agent = MyAgent(
llm=google.realtime.RealtimeModel(...),
tools=[google.tools.GoogleSearch()], # araçlar verilir; tool_choice kullanma
)
Notlar
• Bu bir uyarıdır (warning), genelde agent çalışmaya devam eder; fakat tool_choice kaldırmak temiz bir yapı sağlar.
• Eğer tool_choice kodunda görünmüyorsa, framework veya üst seviye konfigürasyon varsayılan olarak ekliyor olabilir — bu durumda agent oluşturulan tüm konfig dosyalarını/varsayılan parametreleri kontrol et.
Eğer istersen yardımcı olayım — lütfen şu bilgileri paylaş:
• Agent/session oluşturduğun kodun ilgili kısmı (llm/agent konfigürü),
• Hangi LiveKit plugin/versiyon veya örnek kodu kullanıyorsun?
Bunları paylaşırsan birlikte tool_choice kaynağını bulup uyarıyı tamamen kaldırabiliriz.
Sources: Gemini Live API plugin | LiveKit Documentation | Google Gemini LLM plugin guide | LiveKit Documentationastonishing-waitress-60915
02/16/2026, 2:34 PMtall-airline-16756
02/16/2026, 2:35 PM@function_tool dekoratörü ile, JavaScript/TypeScript’te ise llm.tool() veya benzeri bir API ile fonksiyonunu tanımla.
• Agent’ine bu araçları ekle; model ihtiyaç duyduğunda bunları çağırır.
• Provider Tools (Google’ın sundukları) ile birlikte çalıştırmak istiyorsan mutlaka google.realtime.RealtimeModel kullan.
Hızlı örnekler
Python (özet):
from livekit.agents import function_tool, Agent
from livekit.plugins import google
@function_tool()
async def lookup_weather(location: str) -> dict:
return {"weather": "sunny", "temperature_f": 70}
class Assistant(Agent):
def __init__(self):
super().__init__(tools=[lookup_weather], instructions="You are a helpful assistant.")
session = AgentSession(
llm=google.realtime.RealtimeModel(voice="Puck"),
agent=Assistant(),
)
JavaScript/TypeScript (özet):
const lookupWeather = llm.tool({
description: 'Look up weather for a given location.',
parameters: z.object({ location: z.string() }),
execute: async ({ location }) => ({ weather: "sunny", temperatureF: 70 }),
});
class Assistant extends voice.Agent {
constructor() {
super({ tools: { lookupWeather }, instructions: 'You are a helpful assistant.' });
}
}
Öneriler ve dikkat edilmesi gerekenler
• Agent veya session yapılandırmanda tool_choice gibi Gemini Live tarafından desteklenmeyen parametreler varsa kaldır; aksi halde uyarılar çıkabilir.
• Fonksiyonların I/O (parametre ve dönüş yapısı) açık tanımlı olsun; model doğru zamanda çağırmayı daha kolay bulur.
• Eğer birlikte çalışmayan bir davranış görürsen, kullandığın Agent/RealtimeModel konfigürasyonunu paylaş; birlikte bakarım.
İstersen: Kendi fonksiyonunun kısa bir örneğini paylaş (kod snippet veya açıklama). Ona göre örneği senin kullanım durumuna göre uyarlayıp test etmen için adım adım yardımcı olayım.
Sources: Google Gemini LLM plugin guide | LiveKit Documentation | Tool definition and use | LiveKit Documentation | Gemini Live API plugin | LiveKit Documentationastonishing-waitress-60915
02/16/2026, 2:35 PMtall-airline-16756
02/16/2026, 2:35 PMtool_choice eklenip uyarıya sebep olduğunu göstereyim.
Lütfen paylaşabilir misin:
• Agent/session oluşturduğun ilgili kod parçacığı (özellikle llm, agent veya AgentSession konfigürasyonu ve tools ekleme kısmı).
• Hangi LiveKit plugin veya paket versiyonunu kullanıyorsun? (ör. livekit.plugins.google sürümü veya proje bağımlılıkları)
• tool_choice parametresini açıkça eklediğin bir yer var mı? Eklemediysen bile tüm agent yapılandırmasını gönder; framework veya varsayılan konfigürasyon bir yerden ekliyor olabilir.
İlk hızlı kontroller (bunları kodunu göndermeden önce gözden geçirebilirsin):
• RealtimeModel kullandığına emin misin? (ör. google.realtime.RealtimeModel) — text-only modeller tool_choice davranışı farklı olabilir.
• Agent/LLM konfigürasyonunda tool_choice ya da benzer bir ayarın (ör. "tool_choice": "auto") otomatik eklendiği bir global konfigürasyon var mı kontrol et.
• Eğer custom function tool’ları ve provider tools’u birlikte kullanıyorsan, RealtimeModel kullanıyor olman gerekiyor.
Kodunu paylaşırsan:
• Nerede `tool_choice`’un geldiğini tespit ederim,
• Gerekli değişikliği (hangi parametreyi kaldıracağın veya nereden temizleyeceğin) açıkça gösteririm,
• İstersen örnek düzeltilmiş kodu da direkt geri gönderirim.astonishing-waitress-60915
02/16/2026, 2:43 PMtall-airline-16756
02/16/2026, 2:43 PMERROR şeklinde bir mesaj görüyorsun: "received a tool call with tool_choice set to 'none', ignoring". Buna göre model tarafına gelen tool çağrısında tool_choice: 'none' olduğu için çağrı görmezden geliniyor.
Ne yapabileceğimize hızlıca özetleyeyim ve sonra birlikte bulmamız için gerekli bilgileri isteyeyim.
Kısa çözüm yönlendirmesi
• Gemini Live (RealtimeModel) tool_choice parametresini desteklemiyor; bu alanın ya gönderilmemesi ya da temizlenmesi gerekiyor.
• Hatanın kaynağı genelde:
◦ Senin kodunda tool_choice açıkça set edilmiş olması,
◦ Ya da kullandığın agent/araç kütüphanesinin varsayılan olarak bu alanı eklemesi,
◦ Veya tool çağrusu sırasında istemeden tool_choice: 'none' ile paketlenen bir ara katman olması.
Hemen yapabileceğin kontroller
1. Agent/session oluşturduğun kodu kontrol et:
◦ AgentSession, Agent veya LLM konfigürasyonunda tool_choice var mı? Varsa kaldır.
1. Tool çağıran kodu kontrol et:
◦ Custom tool’larını çağırırken veya wrapper’larda tool çağrısı oluşturulurken tool_choice parametresi ekleniyor mu?
1. Kullandığın modelin RealtimeModel olduğuna emin ol:
◦ google.realtime.RealtimeModel kullanıyorsan provider+function tools birlikte çalışmalı; ama yine de tool_choice gönderilmemeli.
1. Eğer framework’ün bir yerinde otomatik ekleniyorsa:
◦ Global veya varsayılan konfigürasyon dosyalarını (örn. agent defaults) kontrol et.
Bana gönderebileceğin en yararlı bilgiler (bunları paylaşırsan doğrudan sorunun kaynağını bulup düzeltilmiş kod verebilirim)
• Agent / AgentSession / llm tanımının bulunduğu kod bloğu (özellikle llm=..., agent=..., tools=[...] kısımları).
• Tool çağrısı gerçekleştiğinde tetiklenen fonksiyonun veya wrapper’ın ilgili kısmı (tool'u nasıl register edip çağırdığını gösteren kod).
• Eğer varsa, proje seviyesinde agent/llm varsayılan konfigürasyon dosyaları (ör. global settings).
• Kullandığın LiveKit paket/plug-in sürümleri (örn. livekit plugins google sürümü).
Hızlı örnek düzeltme (muhtemel yer)
• Eğer kodunda bir yerde şuna benzer bir şey varsa:
# ❌ Örnek problemli kod
llm_params = {"tool_choice": "none", ...}
bunu kaldır:
# ✅ Düzeltme
llm_params = {...} # tool_choice yok
Sonuç ve teklif
• Bu bilgileri paylaşırsan ben nereden tool_choice geldiğini tespit edip, sana düzeltilmiş kod örneği veya hangi dosyada neyi değiştirmen gerektiğini adım adım göstereyim. İstersen önce AgentSession ve tools eklediğin kod bloğunu gönder — birlikte çözelim.astonishing-waitress-60915
02/16/2026, 2:44 PMtall-airline-16756
02/16/2026, 2:44 PMtool_choice yoksa bile bu değerin bir yerden otomatik ekleniyor olması muhtemel. Bunu birlikte hızlıca tespit edelim. Aşağıdaki kısa bilgi ve istekleri paylaşırsan nereden geldiğini bulup düzeltilmiş çözümü gösteririm.
Hemen kontrol etmemize yardımcı olacakler (lütfen kopyala/yapıştır gönder)
• Agent/AgentSession ve LLM tanımı (özellikle AgentSession(...), Agent(...), llm=..., google.realtime.RealtimeModel(...) kısımları).
• Tools kayıt/ekleme kısmı (ör. tools=[...], llm.tool(...), @function_tool tanımları).
• Tool çağrısı tetiklenen yerin ilgili fonksiyonu veya wrapper (tool çağrısı sırasında oluşan request/response paketini oluşturan kod).
• Proje seviyesindeki konfigürasyon dosyaları varsa (ör. global agent/llm defaults veya middleware/adapter kodu).
• Kullandığın LiveKit / plugin sürümleri (package.json, requirements.txt veya pip list çıktısı).
İlk hızlı yerleri de şu şekilde kontrol et:
• Agent framework’un varsayılan ayarlarını (örn. bir base Agent sınıfı veya helper) ara — tool_choice orada ekleniyor olabilir.
• Eğer bir adapter/wrapper kullanıyorsan (ör. custom request builder veya dönüşüm katmanı), tool çağrısını gönderirken ekstra parametre eklenip eklenmediğine bak.
• Loglarda `tool_choice`’un geldiği tam log satırına bak — genelde çağrının hangi speech_id/job_id ile ilişkili olduğunu görürüz; o id ile ilgili request payload’ını yakalayabiliriz.
Eğer kodu paylaşırsan:
• Nereden tool_choice: 'none' veya benzeri bir değerin geldiğini tespit edip,
• İlgili satırı/noktayı gösterip nasıl değiştireceğini (ör. parametreyi kaldırma veya temizleme) doğrudan vereceğim,
• Gerekirse düzeltilmiş küçük bir kod snippet’i göndereceğim.
Paylaşırsan hemen bakıyorum.astonishing-waitress-60915
02/16/2026, 2:45 PMtall-airline-16756
02/16/2026, 2:45 PM"auto" yapmak sorunu çözmez. Gemini Live (Google Realtime API) tool_choice parametresini desteklemiyor; "none", "auto" ya da başka bir değer olsun, bu alan gönderildiği sürece uyarı/ignore/errorlara yol açar.
Ne yapmalısın
• tool_choice parametresini tamamen kaldır. Hiçbir yerde ekli olmamalı (kodunda açıkça yoksa bile framework veya bir wrapper tarafından ekleniyor olabilir).
• Gemini Live ile araç kullanımını yönetirken RealtimeModel kullan; araçlar (provider tools veya custom function tools) agent’a eklenir ve model gerektiğinde otomatik çağırır — bunu kontrol etmek için tool_choice kullanılmasına gerek yok.
Hızlı kontroller (hızlıca bak)
• Agent/LLM/AgentSession oluşturduğun her yerde tool_choice olup olmadığını ara (doğrudan yoksa bile varsayılan konfigürasyonları, base class’ları veya helper fonksiyonları kontrol et).
• Eğer bir middleware, adapter veya request-builder kullanıyorsan, orada ekstra parametre ekleniyor olabilir — özellikle tool çağrısı oluşturulan kodu kontrol et.
• Loglarda hata veren job_id veya speech_id ile ilgili request payload’ını yakalayabiliyorsan, payload içinde tool_choice nereden geliyor görebiliriz.
İstersen birlikte bulalım
• Paylaşırsan ben nereden tool_choice eklendiğini bulurum: lütfen Agent/AgentSession konfigün, tools tanımın ve varsa ilgili wrapper/request oluşturma kodunu gönder.
• Gönderince sana tam olarak hangi satırı değiştirmen gerektiğini ve düzeltilmiş bir kod snippet’i vereceğim.
İstersen şimdi kodu yapıştır; birlikte temizleyip çalışır hale getirelim.astonishing-waitress-60915
02/16/2026, 2:45 PMtool_choice bak bu hiç bir yerde yok ve eklenmiyor. Livekit kendisi default'da none gönderiyor olaiblirm i?tall-airline-16756
02/16/2026, 2:45 PMtool_choice değerini (none/auto/required vb.) desteklemiyor. tool_choice parametresi gönderildiği sürece model çağrılarını ya uyarı/ignore ile karşılıyor ya da hata üretiyor.
• Evet, eğer senin kodunda görünmüyorsa, LiveKit veya kullandığın bir ara katman (wrapper/middleware/varsayılan yapı) tool_choice: 'none' değerini otomatik olarak ekliyor olabilir.
Ne yapalım — hızlı kontrol ve çözüm adımları
1. LiveKit / plugin sürüm bilgisi paylaş
◦ Lütfen kullandığın paket sürümlerini gönder (örn. pip/requirements.txt veya package.json’daki livekit ve livekit.plugins.google satırları). Bazı sürümlerde bu davranış düzeltilmiş olabilir.
1. Hangi model tipi kullandığını teyit et
◦ RealtimeModel (ör. google.realtime.RealtimeModel) kullandığından emin ol. Text-only model kullanılıyorsa davranış farklı olabilir.
1. Loglardan gelen tam payload’ı yakala
◦ Hata logunda geçen job_id veya speech_id ile ilgili request payload’ını (varsa debug/trace log) paylaş. Bu payload içinde `tool_choice`'un hangi katmandan geldiğini görürüz.
1. Kontrol etmeni önerdiğim yerler (projende ara)
◦ Global/default konfig dosyaları (ör. base agent config, defaults).
◦ Herhangi bir request-builder, adapter veya middleware (tool çağrısını paketleyen katman).
◦ LiveKit’ın wrapper/agent kütüphanesinin kendi default parametreleri (özellikle eski sürümler).
1. Geçici çözüm / workaround
◦ Eğer acil ve hızlı test etmen gerekirse: gelen outgoing request’leri intercept edip (`fetch`/HTTP client middleware veya ilgili SDK hook) tool_choice alanını kaldıran bir küçük middleware ekleyebilirsin. Bu kalıcı çözüm değil ama hata loglarını durdurur.
1. Benim yapabileceğim
◦ Sürümler + AgentSession/llm/tools tanımını paylaşırsan, nereden eklendiğini tespit edip:
◦ Eğer LiveKit’in bir sürümü kaynaksa, hangi satırı/dosyayı düzeltmen gerektiğini ve olası upgrade/patch yönlendirmesini veririm.
◦ Eğer senin tarafındaki bir adapter ekliyorsa, temizlenmiş kod snippet’ini gönderirim.
◦ Eğer istersen, geçici intercept middleware örneği de paylaşırım.
Özetle: Evet, LiveKit veya bir ara katman default olarak tool_choice: 'none' ekliyor olabilir — net kaynağı bulmak için sürüm ve ilgili konfig/kod/payload bilgisine ihtiyacım var. Paylaşırsan birlikte kaynak satırı buluruz ve kalıcı düzeltme öneririm.astonishing-waitress-60915
02/16/2026, 2:46 PMmessage for the user and return whether playback was interrupted.
Args:
session: The session object (Standard or Realtime).
message: The text to speak.
allow_interruptions: If True, users can interrupt. (Standard only)
add_to_chat_ctx: If True, adds to chat context. (Standard only)
wait_for_playout: If True, waits for audio to finish playing.
Returns:
bool: True if interrupted, else False.
"""
# Check if we are in a realtime session
agent = getattr(session, "_agent", None)
is_realtime = bool(
agent and getattr(agent, "_pipeline_mode", "standard") == "realtime"
)
if is_realtime:
speech_handle = session.generate_reply(
instructions=_REALTIME_INSTRUCTIONS.format(message=message),
)
else:
speech_handle = session.say(
message,
allow_interruptions=allow_interruptions,
add_to_chat_ctx=add_to_chat_ctx,
)
await speech_handle
if wait_for_playout and hasattr(speech_handle, "wait_for_playout"):
await speech_handle.wait_for_playout()
return bool(getattr(speech_handle, "interrupted", False))
@function_tool(
name="end_call",
description="Telefon görüşmesini sonlandır ve çağrıyı kapat. Kapanış mesajını closing_message parametresiyle belirt.",
)
async def end_call(context: RunContext, closing_message: str) -> str:
"""Telefon görüşmesini sonlandır ve çağrıyı kapat.
Kullanıcı 'hoşça kal', 'görüşürüz', 'kapat', 'bitir' gibi ifadeler kullandığında
veya konuşma doğal olarak sonlandığında bu fonksiyonu çağır.
Args:
closing_message: Görüşmeyi kapatırken söylenecek veda/kapanış mesajı.
Örneğin: "Yardımcı olabildiysem ne mutlu, iyi günler dilerim!"
Returns:
Görüşmeyi sonlandırma mesajı
"""
ctx = get_job_context()
session = context.session
logger.info(f"📴 Ending call - room: {ctx.room.name}, message: {closing_message}")
interrupted = await speak_message(
session,
closing_message,
allow_interruptions=False,
add_to_chat_ctx=False,
wait_for_playout=True,
)
# Kullanıcı kapanış mesajı okunurken araya girdiyse, çağrıyı kapatma
if interrupted:
logger.debug("🔄 User interrupted goodbye, keeping call alive")
return "Kullanıcı konuşmaya devam etmek istedi, görüşme devam ediyor."
logger.debug("✅ Closing speech completed, proceeding to hangup")
# Mark as agent-ended for reporting
if hasattr(session, "current_agent") and session.current_agent:
current_agent = session.current_agent
if (
hasattr(current_agent, "_session_report_service")
and current_agent._session_report_service
):
current_agent._session_report_service.set_ended_by("agent")
# Hangup
await hangup(ctx)
# Raise StopResponse to prevent agent from generating any further response
raise StopResponse()
Kodlar böyletall-airline-16756
02/16/2026, 2:46 PMend_call fonksiyonunda değil, LiveKit’in “agent’in araç listesi boşsa otomatik olarak tool_choice='none' eklemesi” davranışından kaynaklanıyor. Aşağıda kısa, uygulanabilir adımlar ve hangi değişiklikleri yaparsan uyarının kaybolacağını anlatıyorum.
Kısa sonuç
• tool_choice Gemini Live tarafından desteklenmiyor; LiveKit bazı durumlarda araç (tools) yoksa otomatik olarak tool_choice: 'none' ekliyor.
• Senin end_call fonksiyonun doğru tanımlanmış; ama muhtemelen agent örneğin başlatılırken LiveKit o anda “araç yok” diye algılıyor ve tool_choice='none' ekiyor.
Ne yapman lazım — seçenekler (uygulaması kolay) 1) En temiz çözüm — Agent’a aracını açıkça kaydet
• Agent sınıfını veya Agent örneğini oluştururken tools=[end_call] şeklinde explicit ekle. Böylece LiveKit “araç var” diye davranır ve tool_choice='none' ekleme ihtimali ortadan kalkar.
Örnek:
class MyAgent(Agent):
def __init__(self):
super().__init__(
instructions="You are a helpful assistant.",
tools=[end_call], # ← buraya ekle
)
2) Geçici/workaround — Dummy (ping) tool ekleme
• Eğer başka sebeplerle doğrudan ekleyemiyorsan, küçük bir dummy tool ekleyerek LiveKit’in “araç yok” durumunu önleyebilirsin. (Gerçek kullanımda zararı yok; sadece injection’ı önler.)
Örnek:
@function_tool(name="ping", description="internal ping")
async def ping(context: RunContext) -> str:
return "pong"
# tools=[end_call, ping]
3) Eğer hiçbir araç istemiyorsan — outgoing request’leri intercept et
• Acil durum için, SDK/HTTP istemcisi seviyesinde gönderilen payload’ı intercept edip tool_choice alanını silen küçük bir middleware yazabilirsin. Bu geçici ve daha karmaşık bir çözüm; önce 1 veya 2’yi dene.
Nasıl doğrulayıp emin olursun
• Agent örneğini başlattıktan sonra debug log ekle:
<http://logger.info|logger.info>(f"Registered tools: {agent.tools}")
• Session başlatıldıktan sonra LLM içindeki tools alanını kontrol et (varsa):
if hasattr(session, "_llm"):
<http://logger.info|logger.info>(f"Session LLM tools: {getattr(session._llm, 'tools', None)}")
• Hala tool_choice gidiyorsa, logdaki `job_id`/`speech_id` ile ilgili request payload’ını yakala ve paylaş; nereden eklendiğini beraber tespit ederiz.
Ek notlar / neden bunu öneriyorum
• Kodunda end_call doğru tanımlı ve speak_message Realtime yolunu kullanıyor; dolayısıyla asıl problem LiveKit’in agent başlatma/zamanlama veya defaults tarafında. Tools açıkça kayıtlıysa LiveKit tool_choice='none' eklemiyor. Bu yüzden explicit kayıt en doğrudan fix.
İstersen şimdi şunu yapalım
• Agent başlatma/AgentSession oluşturduğun kodu (o kısım eksik paylaşılanlardan) yapıştır: ben nerede agent’ın örneklendiğini ve session.start çağrıldığını görüp tam düzeltmeyi göstereyim.
• Hemen istersen ayrıca kullandığın livekit paket/plug-in sürümlerini de gönder (requirements.txt veya pip list), böylece eğer sürüme özel bir davranışsa ona göre yönlendiririm.
Hazırsan agent başlatma kodunu at; birlikte son halini düzeltip tool_choice uyarısını kaldırırız.
Sources: Gemini Live API plugin | LiveKit Documentation | Google Gemini LLM plugin guide | LiveKit Documentation | Tool definition and use | LiveKit Documentationastonishing-waitress-60915
02/16/2026, 3:36 PMtall-airline-16756
02/16/2026, 3:37 PMspeak_message için realtime yoluna (session.generate_reply) gidiliyor; ama session tipi/realtime bağlantısı doğru değil ya da o anda ses çıkışı oynatılamıyor.
• speech_handle beklenmiyor veya await speech_handle hiçbir şey döndürmüyor; dolayısıyla playout başlamıyor.
• wait_for_playout=True kullandığın için playout beklenirken hata oluyor veya playout event’ı gelmiyor.
• Session/room ortamında audio playout yetkisi/bağlantısı yok (ör. webhook/session start sırasındaki eksik parametreler).
• Agent/RealtimeModel konfigürasyonunda voice/tts ayarları eksik veya yanlış.
Hızlı kontrol listesi (kodunda bakman/denemen gerekenler)
• speak_message içindeki is_realtime tespitinin doğru çalıştığını doğrula: agent ve agent._pipeline_mode == "realtime" kontrolü gerçek durumla eşleşiyor mu?
• speech_handle nesnesinin özelliklerini logla hemen: interrupted, wait_for_playout metodu var mı, id veya benzeri.
• await speech_handle satırında istisna/log var mı? (try/except ile sarmalayıp hatayı logla)
• O anda session’ın audio output bağdaştırıcısı / playout target’ı (room client) bağlı mı?
• Eğer lokal test ediyorsan, tarayıcı veya client tarafı ses çalmayı engelleyen autoplay/policy kısıtları olabilir.
Lütfen paylaş Bu 3-4 kısa parçayı paylaşırsan doğrudan sorunu tespit edip tam düzeltme önerisini gönderirim:
1. AgentSession / session başlatma kodun (özellikle AgentSession(...), session.start(...) veya entrypoint kodun).
2. Agent/Agent sınıfının constructor kısmı (tools listesiyle birlikte).
3. speak_message fonksiyonunu çağıran end_call fonksiyonunun tam hali (zaten paylaştın ama entrypoint ve çağırma bağlamı önemli).
4. Test sırasında görülen ilgili log satırları (özellikle speech_id, job_id ile ilişkili loglar) ve varsa speech_handle repr çıktısı.
5. Kullandığın LiveKit / plugin sürümleri (requirements.txt veya pip list / package.json).
Hızlı debugging adımları — şimdi deneyebileceğin
• speak_message içindeki speech_handle üzerine hemen şu debug’ları ekle:
logger.debug(f"speech_handle: {speech_handle}, attrs: {dir(speech_handle)}")
logger.debug(f"interrupted before await: {getattr(speech_handle, 'interrupted', None)}")
• await speech_handle çevresini try/except ile sar:
try:
await speech_handle
except Exception as e:
logger.exception("speech_handle await failed", exc_info=e)
• Eğer wait_for_playout=True kullanıyorsan, speech_handle.wait_for_playout var mı diye kontrol et:
if hasattr(speech_handle, "wait_for_playout"):
await speech_handle.wait_for_playout()
else:
logger.debug("no wait_for_playout on speech_handle")
• Session’ın realtime olup olmadığını çağrılmadan hemen önce logla:
<http://logger.info|logger.info>(f"is_realtime: {is_realtime}, agent pipeline: {getattr(agent, '_pipeline_mode', None)}")
Son olarak
• Kod + logları paylaşırsan ben nerede sesi tetiklemeyi engelleyen adımı bulup, düzeltilmiş speak_message + örnek session başlangıcıyla doğrudan çalışır hâle getirecek bir patch vereyim.
İstersen önce 1-2 log satırını at; ben oradan hızlıca nerede takıldığını gösteririm.