supercode_runtime/
model_limits.rs1const KNOWN_MODEL_CONTEXT_LIMITS: &[(&str, u64)] = &[
5 ("z-ai/glm-5.2", 1_048_576),
6 ("deepseek/deepseek-v4-flash", 1_048_576),
7 ("deepseek/deepseek-v4-pro", 1_048_576),
8 ("google/gemini-2.5-pro", 1_048_576),
9 ("meta-llama/llama-4-maverick", 1_048_576),
10 ("openai/gpt-5.5", 400_000),
11 ("openai/gpt-5", 400_000),
12 ("anthropic/claude-opus-4-8", 500_000),
13 ("anthropic/claude-sonnet-4-6", 500_000),
14 ("anthropic/claude-haiku-4-5", 200_000),
15];
16
17pub const UNKNOWN_MODEL_CONTEXT_FLOOR: u64 = 200_000;
19
20pub fn model_context_limit(model: &str) -> Option<u64> {
22 KNOWN_MODEL_CONTEXT_LIMITS
23 .iter()
24 .find(|(slug, _)| *slug == model)
25 .map(|(_, limit)| *limit)
26}
27
28#[cfg(test)]
29mod tests {
30 use super::*;
31
32 #[test]
33 fn exact_slug_resolves_and_alias_does_not() {
34 assert_eq!(model_context_limit("openai/gpt-5"), Some(400_000));
35 assert_eq!(model_context_limit("gpt-5"), None);
36 }
37
38 #[test]
39 fn fallback_is_no_larger_than_any_known_limit() {
40 assert!(KNOWN_MODEL_CONTEXT_LIMITS
41 .iter()
42 .all(|(_, limit)| UNKNOWN_MODEL_CONTEXT_FLOOR <= *limit));
43 }
44}