cai
2026-08-11 dbb73f5406a884a108d2498bb40501e9a876c52d
src/asr_realtime.rs
@@ -37,6 +37,20 @@
}
impl AudioIngressMetadata {
    pub(crate) fn origin_status(attributes: &HashMap<String, String>) -> &'static str {
        let source = attributes.get("inputSourceCategory").map(String::as_str);
        let sequence = attributes.get("clientFixtureSequence").map(String::as_str);
        match (source, sequence) {
            (None, None) => "ordinary_mic_absent",
            (Some("controlled_fixture"), Some(sequence)) if valid_sequence(sequence) => {
                "controlled_fixture_bound"
            }
            (Some("controlled_fixture"), None) => "sequence_absent",
            (Some("controlled_fixture"), Some(_)) => "participant_attributes_invalid",
            (Some(_), _) | (None, Some(_)) => "participant_attributes_invalid",
        }
    }
    pub(crate) fn from_participant(
        attributes: &HashMap<String, String>,
    ) -> Result<Option<Self>, &'static str> {
@@ -373,6 +387,10 @@
        line["inputSourceCategory"] = json!(metadata.input_source_category);
        line["clientFixtureSequence"] = json!(metadata.client_fixture_sequence);
    }
    line["audioIngressOriginStatus"] = json!(match ingress_metadata {
        Some(_) => "controlled_fixture_bound",
        None => "ordinary_mic_absent",
    });
    encode_line(line)
}
@@ -483,6 +501,7 @@
        assert_eq!("pcm_s16le", value["audio"]["format"]);
        assert_eq!(16000, value["audio"]["sampleRate"]);
        assert_eq!(1, value["audio"]["channels"]);
        assert_eq!("ordinary_mic_absent", value["audioIngressOriginStatus"]);
    }
    #[test]
@@ -505,6 +524,10 @@
            }),
            metadata
        );
        assert_eq!(
            "controlled_fixture_bound",
            AudioIngressMetadata::origin_status(&attributes)
        );
        attributes.insert(
            "clientFixtureSequence".to_string(),
@@ -517,6 +540,23 @@
        assert_eq!(
            Ok(None),
            AudioIngressMetadata::from_participant(&HashMap::new())
        );
        attributes.remove("clientFixtureSequence");
        assert_eq!(
            "sequence_absent",
            AudioIngressMetadata::origin_status(&attributes)
        );
        attributes.insert(
            "clientFixtureSequence".to_string(),
            "bad sequence".to_string(),
        );
        assert_eq!(
            "participant_attributes_invalid",
            AudioIngressMetadata::origin_status(&attributes)
        );
        assert_eq!(
            "ordinary_mic_absent",
            AudioIngressMetadata::origin_status(&HashMap::new())
        );
    }
@@ -532,6 +572,7 @@
        )
        .expect("absent json");
        assert!(absent.get("inputSourceCategory").is_none());
        assert_eq!("ordinary_mic_absent", absent["audioIngressOriginStatus"]);
        let with_metadata = serde_json::from_slice::<serde_json::Value>(
            &session_start_line(
                "call-001",
@@ -545,6 +586,10 @@
        .expect("bound json");
        assert_eq!("controlled_fixture", with_metadata["inputSourceCategory"]);
        assert_eq!("fixture-01", with_metadata["clientFixtureSequence"]);
        assert_eq!(
            "controlled_fixture_bound",
            with_metadata["audioIngressOriginStatus"]
        );
        let next = AudioIngressMetadata {
            input_source_category: "controlled_fixture".to_string(),
            client_fixture_sequence: "fixture-02".to_string(),