link-assistant-router 1.4.2

Link.Assistant.Router — Claude MAX OAuth proxy and token gateway for Anthropic APIs
Documentation
use super::provider_tests::{bearer_for, lefine_upstream, store_lefine};
use super::tests::auto_state;
use axum::extract::{Query, State};
use axum::http::{HeaderValue, StatusCode};
use http_body_util::BodyExt as _;
use std::collections::BTreeMap;

#[tokio::test]
async fn every_lefine_compatible_client_preserves_the_complete_chat_fixture() {
    const SUCCESS: &str = r#"{"id":"chat-native","object":"chat.completion","model":"vendor/live-exact","choices":[{"index":0,"message":{"role":"assistant","content":null,"tool_calls":[{"id":"call-1","type":"function","function":{"name":"lookup","arguments":"{}"}}]},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":7,"completion_tokens":3,"total_tokens":10}}"#;
    for client in [
        crate::clients::ClientKind::Opencode,
        crate::clients::ClientKind::GrokCli,
        crate::clients::ClientKind::QwenCode,
    ] {
        let (base_url, requests, task) =
            lefine_upstream(StatusCode::OK, "application/json", SUCCESS).await;
        let data_dir = tempfile::tempdir().expect("data dir");
        let state = auto_state(Vec::new(), data_dir.path());
        store_lefine(&state, base_url);
        let mut headers = bearer_for(&state, client);
        headers.insert("content-type", HeaderValue::from_static("application/json"));
        headers.insert("connection", HeaderValue::from_static("x-hop-secret"));
        headers.insert("x-hop-secret", HeaderValue::from_static("private-hop"));
        headers.insert(
            "x-forwarded-client-cert",
            HeaderValue::from_static("By=spiffe://private;Subject=client"),
        );
        let request_body = serde_json::json!({
            "model": "vendor/live-exact",
            "messages": [
                {"role": "system", "content": "be exact"},
                {"role": "user", "content": "use a tool"}
            ],
            "tools": [{"type":"function","function":{"name":"lookup","parameters":{"type":"object"}}}],
            "tool_choice": "auto"
        });

        let response = crate::proxy::openai_chat_completions(
            State(state),
            Query(BTreeMap::new()),
            headers,
            Ok(axum::Json(request_body.clone())),
        )
        .await;

        assert_eq!(response.status(), StatusCode::OK, "{client:?}");
        assert_eq!(
            response
                .into_body()
                .collect()
                .await
                .unwrap()
                .to_bytes()
                .as_ref(),
            SUCCESS.as_bytes(),
            "{client:?}"
        );
        let captured = requests.lock().unwrap();
        assert_eq!(captured.len(), 1, "{client:?}");
        assert_eq!(
            serde_json::from_slice::<serde_json::Value>(&captured[0].body).unwrap(),
            request_body,
            "{client:?}"
        );
        assert_eq!(captured[0].headers["authorization"], "Bearer lefine-secret");
        assert!(!captured[0].headers.contains_key("connection"));
        assert!(!captured[0].headers.contains_key("x-hop-secret"));
        assert!(!captured[0].headers.contains_key("x-forwarded-client-cert"));
        drop(captured);
        task.abort();
    }
}