use crate::core::{
AuthConfig, ConfigurableProtocol, EndpointConfig, ProtocolConfig, ProviderBuilder,
};
use crate::error::LlmConnectorError;
use crate::protocols::OpenAIProtocol;
pub type VolcengineProtocol = ConfigurableProtocol<OpenAIProtocol>;
pub type VolcengineProvider = crate::core::GenericProvider<VolcengineProtocol>;
pub fn volcengine(api_key: &str) -> Result<VolcengineProvider, LlmConnectorError> {
volcengine_with_config(api_key, None, None, None)
}
pub fn volcengine_with_config(
api_key: &str,
base_url: Option<&str>,
timeout_secs: Option<u64>,
proxy: Option<&str>,
) -> Result<VolcengineProvider, LlmConnectorError> {
let protocol = ConfigurableProtocol::new(
OpenAIProtocol::new(api_key),
ProtocolConfig {
name: "volcengine".to_string(),
endpoints: EndpointConfig {
chat_template: "{base_url}/api/v3/chat/completions".to_string(),
models_template: Some("{base_url}/api/v3/models".to_string()),
},
auth: AuthConfig::Bearer,
extra_headers: vec![],
},
);
let mut builder = ProviderBuilder::new(
protocol,
base_url.unwrap_or("https://ark.cn-beijing.volces.com"),
);
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_volcengine() {
let provider = volcengine("test-key");
assert!(provider.is_ok());
}
#[test]
fn test_volcengine_with_config() {
let provider =
volcengine_with_config("test-key", Some("https://custom.url"), Some(60), None);
assert!(provider.is_ok());
}
#[test]
fn test_volcengine_protocol_endpoint() {
let protocol = ConfigurableProtocol::new(
OpenAIProtocol::new("test-key"),
ProtocolConfig {
name: "volcengine".to_string(),
endpoints: EndpointConfig {
chat_template: "{base_url}/api/v3/chat/completions".to_string(),
models_template: Some("{base_url}/api/v3/models".to_string()),
},
auth: AuthConfig::Bearer,
extra_headers: vec![],
},
);
let endpoint = protocol.chat_endpoint("https://ark.cn-beijing.volces.com");
assert_eq!(
endpoint,
"https://ark.cn-beijing.volces.com/api/v3/chat/completions"
);
}
}