Skip to main content

vtcode_core/llm/providers/ollama/
url.rs

1/// URL utilities for Ollama base URL handling.
2/// Adapted from OpenAI Codex's codex-ollama/src/url.rs
3///
4/// Identify whether a base_url points at an OpenAI-compatible root (".../v1").
5pub fn is_openai_compatible_base_url(base_url: &str) -> bool {
6    base_url.trim_end_matches('/').ends_with("/v1")
7}
8
9/// Convert a provider base_url into the native Ollama host root.
10/// For example, "http://localhost:11434/v1" -> "http://localhost:11434".
11pub fn base_url_to_host_root(base_url: &str) -> String {
12    let trimmed = base_url.trim_end_matches('/');
13    if trimmed.ends_with("/v1") {
14        trimmed
15            .trim_end_matches("/v1")
16            .trim_end_matches('/')
17            .to_string()
18    } else {
19        trimmed.to_string()
20    }
21}
22
23#[cfg(test)]
24mod tests {
25    use super::*;
26
27    #[test]
28    fn test_is_openai_compatible_base_url() {
29        assert!(is_openai_compatible_base_url("http://localhost:11434/v1"));
30        assert!(is_openai_compatible_base_url("https://api.ollama.com/v1/"));
31        assert!(!is_openai_compatible_base_url("http://localhost:11434"));
32        assert!(!is_openai_compatible_base_url("https://api.ollama.com/"));
33    }
34
35    #[test]
36    fn test_base_url_to_host_root() {
37        assert_eq!(
38            base_url_to_host_root("http://localhost:11434/v1"),
39            "http://localhost:11434"
40        );
41        assert_eq!(
42            base_url_to_host_root("http://localhost:11434"),
43            "http://localhost:11434"
44        );
45        assert_eq!(
46            base_url_to_host_root("http://localhost:11434/"),
47            "http://localhost:11434"
48        );
49        assert_eq!(
50            base_url_to_host_root("https://api.example.com/v1/"),
51            "https://api.example.com"
52        );
53    }
54}