From 1c687e33809dd9647c34d0c1436e61a6554468ab Mon Sep 17 00:00:00 2001
From: cai <cai@nbcai.cc>
Date: Sat, 08 Aug 2026 18:22:26 +0800
Subject: [PATCH] fix: refresh ASR ingress attributes per session

---
 src/main.rs |   28 ++++++++++++++--------------
 1 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/src/main.rs b/src/main.rs
index c3fa805..eed3859 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -30,7 +30,7 @@
     options::TrackPublishOptions,
     prelude::{
         DataPacket, LocalAudioTrack, LocalTrack, ParticipantIdentity, RemoteAudioTrack,
-        RemoteTrack, Room, RoomEvent, RoomOptions,
+        RemoteParticipant, RemoteTrack, Room, RoomEvent, RoomOptions,
     },
 };
 use reqwest::Client;
@@ -780,16 +780,6 @@
                         "runtime helper ignored non-user audio participant");
                     continue;
                 }
-                let ingress_metadata =
-                    match AudioIngressMetadata::from_participant(&participant.attributes()) {
-                        Ok(value) => value,
-                        Err(reason) => {
-                            warn!(call_id = %call_id, trace_id = %trace_id,
-                            metadata_status = "invalid", reason = reason,
-                            "runtime helper ignored invalid audio ingress metadata");
-                            None
-                        }
-                    };
                 let participant_alias = redact(&participant.identity().to_string());
                 let track_sid_alias = redact(&track.sid().to_string());
                 let track_name = track.name();
@@ -801,9 +791,6 @@
                     track_sid_alias = %track_sid_alias,
                     track_name = %track_name,
                     track_source = %track_source,
-                    metadata_status = if ingress_metadata.is_some() { "bound" } else { "absent" },
-                    metadata_source = ingress_metadata.as_ref().map(|_| "controlled_fixture"),
-                    metadata_sequence_present = ingress_metadata.is_some(),
                     "runtime helper user_track_subscribed"
                 );
                 spawn_user_audio_frame_observer(
@@ -818,6 +805,7 @@
                     turn_bridge_config.clone(),
                     http.clone(),
                     sink.clone(),
+                    participant,
                 );
             }
             RoomEvent::TrackSubscribed {
@@ -2929,6 +2917,7 @@
     turn_bridge_config: TurnBridgeConfig,
     http: Client,
     sink: Arc<BotAudioOutputSink>,
+    participant: RemoteParticipant,
 ) -> JoinHandle<()> {
     tokio::spawn(async move {
         let mut stream = NativeAudioStream::new(
@@ -3054,6 +3043,17 @@
 
                     if !was_in_speech && is_in_speech {
                         let turn_id = format!("turn-{:04}", vad.turn_index);
+                        let ingress_metadata = match AudioIngressMetadata::from_participant(
+                            &participant.attributes(),
+                        ) {
+                            Ok(value) => value,
+                            Err(reason) => {
+                                warn!(call_id = %call_id, trace_id = %trace_id,
+                                    turn_id = %turn_id, metadata_status = "invalid", reason = reason,
+                                    "runtime helper ignored invalid audio ingress metadata");
+                                None
+                            }
+                        };
                         match RealtimeAsrUpload::start(
                             http.clone(),
                             turn_bridge_config.realtime_asr_config(),

--
Gitblit v1.9.3