use crate::core::{
AuthConfig, ConfigurableProtocol, EndpointConfig, ProtocolConfig, ProviderBuilder,
};
use crate::error::LlmConnectorError;
use crate::protocols::AnthropicProtocol;
pub type LongCatAnthropicProtocol = ConfigurableProtocol<AnthropicProtocol>;
pub type LongCatAnthropicProvider = crate::core::GenericProvider<LongCatAnthropicProtocol>;
pub fn longcat_anthropic(api_key: &str) -> Result<LongCatAnthropicProvider, LlmConnectorError> {
longcat_anthropic_with_config(api_key, None, None, None)
}
pub fn longcat_anthropic_with_config(
api_key: &str,
base_url: Option<&str>,
timeout_secs: Option<u64>,
proxy: Option<&str>,
) -> Result<LongCatAnthropicProvider, LlmConnectorError> {
let protocol = ConfigurableProtocol::new(
AnthropicProtocol::new(api_key),
ProtocolConfig {
name: "longcat-anthropic".to_string(),
endpoints: EndpointConfig {
chat_template: "{base_url}/v1/messages".to_string(),
models_template: None,
},
auth: AuthConfig::Bearer, extra_headers: vec![("anthropic-version".to_string(), "2023-06-01".to_string())],
},
);
let mut builder = ProviderBuilder::new(
protocol,
base_url.unwrap_or("https://api.longcat.chat/anthropic"),
);
if let Some(timeout) = timeout_secs {
builder = builder.timeout(timeout);
}
if let Some(proxy_url) = proxy {
builder = builder.proxy(proxy_url);
}
builder.build()
}
#[cfg(test)]
mod tests {
use super::*;
use crate::core::Protocol;
#[test]
fn test_longcat_anthropic() {
let provider = longcat_anthropic("ak_test");
assert!(provider.is_ok());
}
#[test]
fn test_longcat_anthropic_with_config() {
let provider =
longcat_anthropic_with_config("ak_test", Some("https://custom.url"), Some(60), None);
assert!(provider.is_ok());
}
#[test]
fn test_longcat_anthropic_protocol_auth_headers() {
let protocol = ConfigurableProtocol::new(
AnthropicProtocol::new("ak_test123"),
ProtocolConfig {
name: "longcat-anthropic".to_string(),
endpoints: EndpointConfig {
chat_template: "{base_url}/v1/messages".to_string(),
models_template: None,
},
auth: AuthConfig::Bearer,
extra_headers: vec![("anthropic-version".to_string(), "2023-06-01".to_string())],
},
);
let headers = protocol.auth_headers();
assert!(
headers
.iter()
.any(|(k, v)| k == "Authorization" && v == "Bearer ak_test123")
);
assert!(
headers
.iter()
.any(|(k, v)| k == "anthropic-version" && v == "2023-06-01")
);
assert!(!headers.iter().any(|(k, _)| k == "x-api-key"));
}
}