Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions .changeset/curly-mails-think.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/little-taxis-glow.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/shiny-rabbits-suffer.md

This file was deleted.

2 changes: 1 addition & 1 deletion examples/participant-entrypoint/requirements.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
livekit-agents>=0.10.1
livekit-agents>=0.10.2
2 changes: 1 addition & 1 deletion examples/simple-color/requirements.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
livekit-agents>=0.10.1
livekit-agents>=0.10.2
2 changes: 1 addition & 1 deletion examples/speech-to-text/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
livekit-agents>=0.10.1
livekit-agents>=0.10.2
livekit-plugins-deepgram>=0.6.8
4 changes: 2 additions & 2 deletions examples/text-to-speech/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
livekit-agents>=0.10.1
livekit-plugins-openai>=0.10.3
livekit-agents>=0.10.2
livekit-plugins-openai>=0.10.4
livekit-plugins-cartesia>=0.4.2
livekit-plugins-elevenlabs>=0.7.5
4 changes: 2 additions & 2 deletions examples/voice-pipeline-agent/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
livekit-agents>=0.10.1
livekit-plugins-openai>=0.10.3
livekit-agents>=0.10.2
livekit-plugins-openai>=0.10.4
livekit-plugins-deepgram>=0.6.8
livekit-plugins-silero>=0.7.1
livekit-plugins-rag>=0.2.2
Expand Down
8 changes: 8 additions & 0 deletions livekit-agents/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# livekit-agents

## 0.10.2

### Patch Changes

- Fix split_paragraphs and simple-rag example - [#896](https://github.com/livekit/agents/pull/896) ([@davidzhao](https://github.com/davidzhao))

- Allow forcing interruptions of incomplete audio - [#891](https://github.com/livekit/agents/pull/891) ([@martin-purplefish](https://github.com/martin-purplefish))

## 0.10.1

### Patch Changes
Expand Down
4 changes: 4 additions & 0 deletions livekit-agents/livekit/agents/pipeline/pipeline_agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -656,6 +656,10 @@ def _commit_user_question_if_needed() -> None:
)

_commit_user_question_if_needed()

if speech_handle.interrupted:
logger.warning(f"speech interrupted, quit loop")
break

if speech_handle.interrupted:
break
Expand Down
2 changes: 1 addition & 1 deletion livekit-agents/livekit/agents/version.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.

__version__ = "0.10.1"
__version__ = "0.10.2"
2 changes: 1 addition & 1 deletion livekit-agents/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "livekit-agents",
"private": true,
"version": "0.10.1"
"version": "0.10.2"
}
6 changes: 6 additions & 0 deletions livekit-plugins/livekit-plugins-openai/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# livekit-plugins-openai

## 0.10.4

### Patch Changes

- add x.ai support - [#907](https://github.com/livekit/agents/pull/907) ([@theomonnom](https://github.com/theomonnom))

## 0.10.3

### Patch Changes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -770,43 +770,7 @@ def _queue_msg(self, msg: api_proto.ClientEvents) -> None:

@utils.log_exceptions(logger=logger)
async def _main_task(self) -> None:
try:
headers = {"User-Agent": "LiveKit Agents"}
query_params: dict[str, str] = {}

base_url = self._opts.base_url
if self._opts.is_azure:
if self._opts.entra_token:
headers["Authorization"] = f"Bearer {self._opts.entra_token}"

if self._opts.api_key:
headers["api-key"] = self._opts.api_key

if self._opts.api_version:
query_params["api-version"] = self._opts.api_version

if self._opts.azure_deployment:
query_params["deployment"] = self._opts.azure_deployment
else:
# OAI endpoint
headers["Authorization"] = f"Bearer {self._opts.api_key}"
headers["OpenAI-Beta"] = "realtime=v1"

if self._opts.model:
query_params["model"] = self._opts.model

url = f"{base_url.rstrip('/')}/realtime?{urlencode(query_params)}"
if url.startswith("http"):
url = url.replace("http", "ws", 1)

ws_conn = await self._http_session.ws_connect(
url,
headers=headers,
)
except Exception:
logger.exception("failed to connect to OpenAI API S2S")
return


closing = False

@utils.log_exceptions(logger=logger)
Expand Down Expand Up @@ -890,16 +854,58 @@ async def _recv_task():
"failed to handle OpenAI S2S message",
extra={"websocket_message": msg, **self.logging_extra()},
)

while not closing:
try:
headers = {"User-Agent": "LiveKit Agents"}
query_params: dict[str, str] = {}

base_url = self._opts.base_url
if self._opts.is_azure:
if self._opts.entra_token:
headers["Authorization"] = f"Bearer {self._opts.entra_token}"

if self._opts.api_key:
headers["api-key"] = self._opts.api_key

if self._opts.api_version:
query_params["api-version"] = self._opts.api_version

if self._opts.azure_deployment:
query_params["deployment"] = self._opts.azure_deployment
else:
# OAI endpoint
headers["Authorization"] = f"Bearer {self._opts.api_key}"
headers["OpenAI-Beta"] = "realtime=v1"

if self._opts.model:
query_params["model"] = self._opts.model

url = f"{base_url.rstrip('/')}/realtime?{urlencode(query_params)}"
if url.startswith("http"):
url = url.replace("http", "ws", 1)

ws_conn = await self._http_session.ws_connect(
url,
headers=headers,
)
except Exception:
logger.exception("failed to connect to OpenAI API S2S")
return


tasks = [
asyncio.create_task(_send_task(), name="openai-realtime-send"),
asyncio.create_task(_recv_task(), name="openai-realtime-recv"),
]
tasks = [
asyncio.create_task(_send_task(), name="openai-realtime-send"),
asyncio.create_task(_recv_task(), name="openai-realtime-recv"),
]

try:
await asyncio.gather(*tasks)
finally:
await utils.aio.gracefully_cancel(*tasks)
try:
await asyncio.gather(*tasks)
except Exception:
logger.exception("Exception occurred during the OpenAI API S2S process. Try to reconnect.")
continue
finally:
await utils.aio.gracefully_cancel(*tasks)

def _handle_session_created(
self, session_created: api_proto.ServerEvent.SessionCreated
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.

__version__ = "0.10.3"
__version__ = "0.10.4"
2 changes: 1 addition & 1 deletion livekit-plugins/livekit-plugins-openai/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "livekit-plugins-openai",
"private": true,
"version": "0.10.3"
"version": "0.10.4"
}