From 0a204490748af7dbd644e6a55e0bbafc40e58858 Mon Sep 17 00:00:00 2001 From: marcus-daily <111281783+marcus-daily@users.noreply.github.com> Date: Tue, 28 Oct 2025 12:06:20 +0000 Subject: [PATCH] Updating Small WebRTC transport to Pipecat Client v1.1.0 --- .../client/android/gradle/libs.versions.toml | 2 +- .../small-webrtc-client/build.gradle.kts | 6 +- .../small_webrtc_client/VoiceClientManager.kt | 60 ++++++++----------- 3 files changed, 30 insertions(+), 38 deletions(-) diff --git a/p2p-webrtc/video-transform/client/android/gradle/libs.versions.toml b/p2p-webrtc/video-transform/client/android/gradle/libs.versions.toml index be90d31..45e6dab 100644 --- a/p2p-webrtc/video-transform/client/android/gradle/libs.versions.toml +++ b/p2p-webrtc/video-transform/client/android/gradle/libs.versions.toml @@ -2,7 +2,7 @@ accompanistPermissions = "0.34.0" agp = "8.7.3" constraintlayoutCompose = "1.1.0" -pipecatClient = "0.3.7" +pipecatClient = "1.1.0" kotlin = "2.0.20" coreKtx = "1.15.0" lifecycleRuntimeKtx = "2.8.7" diff --git a/p2p-webrtc/video-transform/client/android/small-webrtc-client/build.gradle.kts b/p2p-webrtc/video-transform/client/android/small-webrtc-client/build.gradle.kts index c1810cd..2fb4fe2 100644 --- a/p2p-webrtc/video-transform/client/android/small-webrtc-client/build.gradle.kts +++ b/p2p-webrtc/video-transform/client/android/small-webrtc-client/build.gradle.kts @@ -32,12 +32,12 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 } kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "11" } buildFeatures { diff --git a/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/VoiceClientManager.kt b/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/VoiceClientManager.kt index 2225d8a..55bda53 100644 --- a/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/VoiceClientManager.kt +++ b/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/VoiceClientManager.kt @@ -1,20 +1,20 @@ package ai.pipecat.small_webrtc_client -import ai.pipecat.client.RTVIClient -import ai.pipecat.client.RTVIClientOptions -import ai.pipecat.client.RTVIClientParams -import ai.pipecat.client.RTVIEventCallbacks +import ai.pipecat.client.PipecatClient +import ai.pipecat.client.PipecatClientOptions +import ai.pipecat.client.PipecatEventCallbacks import ai.pipecat.client.result.Future import ai.pipecat.client.result.RTVIError -import ai.pipecat.client.result.Result +import ai.pipecat.client.small_webrtc_transport.PipecatClientSmallWebRTC import ai.pipecat.client.small_webrtc_transport.SmallWebRTCTransport -import ai.pipecat.client.types.ActionDescription +import ai.pipecat.client.types.APIRequest +import ai.pipecat.client.types.BotReadyData import ai.pipecat.client.types.Participant import ai.pipecat.client.types.PipecatMetrics -import ai.pipecat.client.types.ServiceConfig import ai.pipecat.client.types.Tracks import ai.pipecat.client.types.Transcript import ai.pipecat.client.types.TransportState +import ai.pipecat.client.types.Value import ai.pipecat.small_webrtc_client.utils.Timestamp import android.content.Context import android.util.Log @@ -34,14 +34,12 @@ class VoiceClientManager(private val context: Context) { private const val TAG = "VoiceClientManager" } - private val client = mutableStateOf(null) + private val client = mutableStateOf(null) val state = mutableStateOf(null) val errors = mutableStateListOf() - val actionDescriptions = - mutableStateOf, RTVIError>?>(null) val expiryTime = mutableStateOf(null) @@ -66,15 +64,9 @@ class VoiceClientManager(private val context: Context) { return } - val options = RTVIClientOptions( - params = RTVIClientParams(baseUrl = null), - enableMic = true, - enableCam = true - ) - state.value = TransportState.Disconnected - val callbacks = object : RTVIEventCallbacks() { + val callbacks = object : PipecatEventCallbacks() { override fun onTransportStateChanged(state: TransportState) { this@VoiceClientManager.state.value = state } @@ -86,18 +78,12 @@ class VoiceClientManager(private val context: Context) { } } - override fun onBotReady(version: String, config: List) { - - Log.i(TAG, "Bot ready. Version $version, config: $config") - + override fun onBotReady(data: BotReadyData) { + Log.i(TAG, "Bot ready: $data") botReady.value = true - - client.value?.describeActions()?.withCallback { - actionDescriptions.value = it - } } - override fun onPipecatMetrics(data: PipecatMetrics) { + override fun onMetrics(data: PipecatMetrics) { Log.i(TAG, "Pipecat metrics: $data") } @@ -138,17 +124,11 @@ class VoiceClientManager(private val context: Context) { this@VoiceClientManager.mic.value = mic } - override fun onConnected() { - expiryTime.value = client.value?.expiry?.let(Timestamp::ofEpochSecs) - } - override fun onDisconnected() { expiryTime.value = null - actionDescriptions.value = null botIsTalking.value = false userIsTalking.value = false state.value = null - actionDescriptions.value = null botReady.value = false tracks.value = null @@ -165,9 +145,21 @@ class VoiceClientManager(private val context: Context) { } } - val client = RTVIClient(SmallWebRTCTransport.Factory(context, baseUrl), callbacks, options) + val options = PipecatClientOptions( + enableMic = true, + enableCam = true, + callbacks = callbacks + ) + + val client = PipecatClient( + transport = SmallWebRTCTransport(context), + options = options + ) - client.connect().displayErrors().withErrorCallback { + client.startBotAndConnect(APIRequest( + endpoint = baseUrl, + requestData = Value.Object(), + )).displayErrors().withErrorCallback { callbacks.onDisconnected() }