Realtime Session Update Configuration
Mantenedores costumam responder em até 1 dia
@LuminaX-alt já está trabalhando nisso.
Desde 2/8/2025.
Avaliação
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 42/100
Direção de pesquisa
Comece em openai.resources.beta.realtime.AsyncRealtimeConnection.send e inspecione como SessionUpdateEvent é serializado com exclude_defaults=True. Compare o valor padrão de turn_detection do modelo Session com os valores de VAD do lado do servidor mostrados nos exemplos de SessionCreatedEvent e SessionUpdatedEvent. Considera-se concluído quando um SessionUpdateEvent com turn_detection=None puder alterar a configuração da sessão realtime conforme pretendido.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Confirm this is an issue with the Python library and not an underlying OpenAI API
- This is an issue with the Python library
Describe the bug
The intended behavior is to disable server-side VAD for the OpenAI Realtime model. We are using LiveKit to facilitate the websocket connection, but the bug is in the OpenAI library.
In particular, the openai.resources.beta.realtime.AsyncRealtimeConnection.send method uses event.to_json(use_api_names=True, exclude_defaults=True, exclude_unset=True) to serialize the SessionUpdateEvent. The issue is with the exclude_defaults=True parameter which doesn't include any values that are equal to their default values.
We have confirmed the two serial SessionUpdateEvents get composed, so a change from the first event is reflected in the resulting configuration of the second event. This makes the exclude_defaults=True argument particularly problematic because there is now no way to ever change a default and then change it back.
There are a couple of problems here. For VAD in particular, despite the default value of turn_detection=None in Session(BaseModel), it is in fact not None and instead some default server-side VAD values. When you try to pass None in the SessionUpdateEvent you can't change the turn_detection value because (1) exclude_defaults=True prevents you and (2) the default value is inconsistent with what actually exists by default.
There are two solutions:
- Remove
exclude_defaults=True - Update the default
turn_detectioninSession
To Reproduce
Please follow the steps below.
Code snippets
When running python minimal_worker.py console using LiveKit agents on branch dev-1.0 with the following model configuration:
agent = VoiceAgent(
instructions="You are a helpful assistant that can answer questions and help with tasks.",
llm=openai.realtime.RealtimeModel(
model="gpt-4o-realtime-preview-2024-12-17",
voice="alloy"
)
)
Then, within the _main_task of RealtimeSession, we hardcode the turn_detection=None parameter as follows:
self._msg_ch.send_nowait(
SessionUpdateEvent(
type="session.update",
session=session_update_event.Session(
model=self._realtime_model._opts.model, # type: ignore
voice=self._realtime_model._opts.voice, # type: ignore
input_audio_transcription=input_audio_transcription,
turn_detection=None
),
event_id=utils.shortuuid("session_update_"),
)
)
The issue here is that turn_detection never gets updated properly according to the SessionUpdatedEvent. This is related to the problem that this PR was attempting to solve.
For example, we get:
- The
SessionCreatedEventwith the defaultturn_detector. By the way, even after passing the query param to the websocket uriturn_detector=for a null value, it still returns with server-side VAD.
SessionCreatedEvent(..., turn_detection=TurnDetection(create_response=True, interrupt_response=True, prefix_padding_ms=300, silence_duration_ms=200, threshold=0.5, type='server_vad'), ...) type='session.created')
- After passing the
turn_detector=Noneargument to theSessionUpdateEventas mentioned above, we still eventually observe theSessionUpdatedEvent.
SessionUpdatedEvent(..., turn_detection=TurnDetection(create_response=True, interrupt_response=True, prefix_padding_ms=300, silence_duration_ms=200, threshold=0.5, type='server_vad'), ...), type='session.updated')
OS
macOS
Python version
Python v3.13
Library version
openai v1.66.3
- Linguagem predominante
- Python
- Estrelas
- 32k
- Forks
- 7.3k
- Merge médio
- 16h 38min
- PRs com merge (30d)
- 170
Preparar o ambiente
Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de openai/openai-python
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
openai/openai-python#4156 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
openai/openai-python#4022 · 23 comentários ·
Mantenedores costumam responder em até 1 dia
-
fix(auth): SubjectTokenProviderError drops response and duplicates error message in workload identity providersTalvez já em andamento @mohmedmm assumiu há 26 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 86/100
openai/openai-python#4017 · 5 comentários ·
Mantenedores costumam responder em até 1 dia
-
Define + export `ServiceTiers` string literalTalvez já em andamento @SparshGarg999 assumiu há 75 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
openai/openai-python#3556 · 3 comentários ·
Mantenedores costumam responder em até 1 dia
-
Empty OPENAI_BASE_URL prevents fallback to default API endpointTalvez já em andamento @Sehastrajit-S assumiu há 41 dias. Abertabug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
openai/openai-python#2927 · 7 comentários ·
Mantenedores costumam responder em até 1 dia
Todas as issues de openai/openai-python
Issues semelhantes
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 72/100
MIT-LCP/wfdb-python#590 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 77/100
pollen-robotics/reachy_mini#1517 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 69/100
NRLMMD-GEOIPS/pluginify#41 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 67/100
scverse/spatialdata#1293 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
UKGovernmentBEIS/inspect_evals#2788 ·
Mantenedores costumam responder em até 1 dia