kcode-k1-daemon-lib-testkit 0.5.8

Source contract verifier for the K1 daemon composition root
Documentation
#![doc = include_str!("../Documentation.md")]
#![forbid(unsafe_code)]

pub fn verify_manifest(manifest: &str) {
    for required in [
        "kcode-k1-daemon-http-composition = \"0.1.2\"",
        "kcode-k1-daemon-provider-config = \"0.2.1\"",
        "kcode-k1-text-inference = \"0.1.0\"",
        "kcode-k1-daemon-lib-testkit = \"0.5.8\"",
    ] {
        assert!(manifest.contains(required), "daemon manifest selection");
    }
    for stale in [
        "kcode-k1-daemon-http-composition = \"0.1.1\"",
        "kcode-k1-daemon-provider-config = \"0.2.0\"",
        "kcode-k1-daemon-lib-testkit = \"0.5.7\"",
    ] {
        assert!(!manifest.contains(stale), "stale daemon manifest selection");
    }
}

pub fn verify_source(source: &str) {
    for required in [
        "text_inference_config(",
        "CodexTextInference::new(",
        "text_inference: text_inference as Arc<dyn TextInference>",
        "kcode_k1_daemon_http_composition::prepare(",
    ] {
        assert!(
            source.contains(required),
            "daemon text-inference composition"
        );
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn accepts_current_contract() {
        verify_manifest(
            "kcode-k1-daemon-http-composition = \"0.1.2\"\n\
             kcode-k1-daemon-provider-config = \"0.2.1\"\n\
             kcode-k1-text-inference = \"0.1.0\"\n\
             kcode-k1-daemon-lib-testkit = \"0.5.8\"",
        );
        verify_source(
            "text_inference_config( CodexTextInference::new( \
             text_inference: text_inference as Arc<dyn TextInference> \
             kcode_k1_daemon_http_composition::prepare(",
        );
    }
}