Skip to main content

brainos_cortex/
presets.rs

1//! Built-in presets for OpenAI-compatible LLM providers.
2//!
3//! Users set `provider: groq` (or `openrouter`, `deepseek`, etc.) in config
4//! without hand-assembling the base URL. If `base_url` is also provided, it
5//! wins — the preset is only consulted when base_url is empty.
6
7/// Preset entry: a friendly name → OpenAI-compatible base URL.
8#[derive(Debug, Clone, Copy)]
9pub struct Preset {
10    pub name: &'static str,
11    pub base_url: &'static str,
12}
13
14const PRESETS: &[Preset] = &[
15    Preset {
16        name: "openai",
17        base_url: "https://api.openai.com/v1",
18    },
19    Preset {
20        name: "openrouter",
21        base_url: "https://openrouter.ai/api/v1",
22    },
23    Preset {
24        name: "groq",
25        base_url: "https://api.groq.com/openai/v1",
26    },
27    Preset {
28        name: "deepseek",
29        base_url: "https://api.deepseek.com/v1",
30    },
31    Preset {
32        name: "together",
33        base_url: "https://api.together.xyz/v1",
34    },
35    Preset {
36        name: "gemini-compat",
37        base_url: "https://generativelanguage.googleapis.com/v1beta/openai",
38    },
39    // NVIDIA's "build" platform — generous free tier (40 RPM at the time
40    // of writing) and OpenAI-compatible. Get a key at
41    // https://build.nvidia.com/settings/api-keys
42    Preset {
43        name: "nvidia",
44        base_url: "https://integrate.api.nvidia.com/v1",
45    },
46];
47
48/// Look up a preset by name. Case-insensitive.
49pub fn resolve(name: &str) -> Option<&'static Preset> {
50    let needle = name.trim().to_ascii_lowercase();
51    PRESETS.iter().find(|p| p.name == needle)
52}
53
54/// All preset names — useful for CLI help and config validation.
55pub fn names() -> impl Iterator<Item = &'static str> {
56    PRESETS.iter().map(|p| p.name)
57}
58
59#[cfg(test)]
60mod tests {
61    use super::*;
62
63    #[test]
64    fn resolves_known_presets() {
65        assert_eq!(
66            resolve("groq").map(|p| p.base_url),
67            Some("https://api.groq.com/openai/v1"),
68        );
69        assert_eq!(
70            resolve("OpenRouter").map(|p| p.base_url),
71            Some("https://openrouter.ai/api/v1"),
72        );
73        assert_eq!(
74            resolve("  deepseek  ").map(|p| p.base_url),
75            Some("https://api.deepseek.com/v1"),
76        );
77    }
78
79    #[test]
80    fn unknown_preset_is_none() {
81        assert!(resolve("nonesuch").is_none());
82    }
83
84    #[test]
85    fn names_includes_all() {
86        let all: Vec<_> = names().collect();
87        assert!(all.contains(&"openai"));
88        assert!(all.contains(&"groq"));
89        assert!(all.contains(&"deepseek"));
90        assert!(all.contains(&"gemini-compat"));
91        assert!(all.contains(&"nvidia"));
92    }
93
94    #[test]
95    fn nvidia_preset_targets_integrate_api() {
96        // Locked-in: the build.nvidia.com onboarding flow hands keys
97        // valid against integrate.api.nvidia.com — not build.nvidia.com.
98        assert_eq!(
99            resolve("nvidia").map(|p| p.base_url),
100            Some("https://integrate.api.nvidia.com/v1")
101        );
102    }
103}