Skip to main content

supercode_runtime/
model_limits.rs

1//! Conservative context-window metadata used by the native runtime.
2
3/// Known context-window sizes in tokens, keyed by full model slug.
4const 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
17/// Conservative fallback context limit for an unrecognized model.
18pub const UNKNOWN_MODEL_CONTEXT_FLOOR: u64 = 200_000;
19
20/// Look up a model's context-window size by its full provider slug.
21pub 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}