use std::collections::HashMap;
use once_cell::sync::Lazy;
use serde_json::Value;
const LMARENA_SNAPSHOT: &str = include_str!("data/lmarena_text.json");
const REASONING_SNAPSHOT: &str = include_str!("data/model_reasoning.json");
static REASONING: Lazy<HashMap<String, bool>> = Lazy::new(|| {
let parsed: Value = serde_json::from_str(REASONING_SNAPSHOT)
.expect("embedded reasoning snapshot is valid json");
parsed["models"]
.as_object()
.expect("snapshot has a `models` object")
.iter()
.filter_map(|(name, flag)| Some((name.to_ascii_lowercase(), flag.as_bool()?)))
.collect()
});
const CONTEXT_SNAPSHOT: &str = include_str!("data/model_context.json");
static CONTEXT: Lazy<HashMap<String, u32>> = Lazy::new(|| {
let parsed: Value =
serde_json::from_str(CONTEXT_SNAPSHOT).expect("embedded context snapshot is valid json");
parsed["models"]
.as_object()
.expect("snapshot has a `models` object")
.iter()
.filter_map(|(name, window)| {
Some((
name.to_ascii_lowercase(),
u32::try_from(window.as_u64()?).ok()?,
))
})
.collect()
});
const CAPABILITY_THRESHOLD: u64 = 1400;
static RATINGS: Lazy<HashMap<String, u64>> = Lazy::new(|| {
let parsed: Value =
serde_json::from_str(LMARENA_SNAPSHOT).expect("embedded lmarena snapshot is valid json");
parsed["models"]
.as_object()
.expect("snapshot has a `models` object")
.iter()
.filter_map(|(name, rating)| Some((name.to_ascii_lowercase(), rating.as_u64()?)))
.collect()
});
fn rating_for(model_id: &str) -> Option<u64> {
let id = model_id.to_ascii_lowercase();
let id = id.split_once('/').map_or(id.as_str(), |(_, rest)| rest);
if let Some(&r) = RATINGS.get(id) {
return Some(r);
}
let prefix = format!("{id}-");
RATINGS
.iter()
.filter(|(k, _)| {
k.strip_prefix(&prefix)
.is_some_and(|rest| rest.starts_with(|c: char| c.is_ascii_digit()))
})
.map(|(_, &r)| r)
.max()
}
pub(crate) fn model_honors_steering(model_id: &str) -> bool {
rating_for(model_id).is_none_or(|r| r > CAPABILITY_THRESHOLD)
}
pub(crate) fn model_is_reasoning_capable(model_id: &str) -> bool {
let id = model_id.to_ascii_lowercase();
let id = id.split_once('/').map_or(id.as_str(), |(_, rest)| rest);
if let Some(&flag) = REASONING.get(id) {
return flag;
}
let prefix = format!("{id}-");
REASONING
.iter()
.filter(|(k, _)| {
k.strip_prefix(&prefix)
.is_some_and(|rest| rest.starts_with(|c: char| c.is_ascii_digit()))
})
.any(|(_, &flag)| flag)
}
pub(crate) fn context_window_for(model_id: &str) -> Option<u32> {
let id = model_id.to_ascii_lowercase();
let id = id.split_once('/').map_or(id.as_str(), |(_, rest)| rest);
CONTEXT.get(id).copied()
}
pub(crate) fn latest_model_for_family(family: &str) -> Option<String> {
let prefix = format!("claude-{}-", family.to_ascii_lowercase());
CONTEXT
.keys()
.filter_map(|id| {
let rest = id.strip_prefix(&prefix)?;
let mut parts: Vec<&str> = rest.split('-').collect();
if parts
.last()
.is_some_and(|p| p.len() == 8 && p.bytes().all(|b| b.is_ascii_digit()))
{
parts.pop();
}
let version = parts
.iter()
.map(|p| p.parse::<u32>())
.collect::<Result<Vec<u32>, _>>()
.ok()?;
(!version.is_empty()).then(|| (version, format!("{prefix}{}", parts.join("-"))))
})
.max_by(|a, b| a.0.cmp(&b.0))
.map(|(_, id)| id)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn latest_family_scanned_from_snapshot_picks_highest_version() {
assert_eq!(
latest_model_for_family("sonnet").as_deref(),
Some("claude-sonnet-5")
);
assert_eq!(
latest_model_for_family("haiku").as_deref(),
Some("claude-haiku-4-5")
);
assert_eq!(
latest_model_for_family("opus").as_deref(),
Some("claude-opus-4-8")
);
assert_eq!(latest_model_for_family("nonesuch"), None);
}
#[test]
fn weak_models_are_below_the_bar() {
for id in [
"openai/gpt-oss-20b",
"gpt-oss-20b",
"gpt-4o-mini",
"gpt-4o-mini-2024-07-18",
"gpt-4o",
"claude-3-5-haiku",
"claude-3-5-sonnet-20241022",
] {
assert!(!model_honors_steering(id), "{id} should be gated out");
}
}
#[test]
fn capable_models_clear_the_bar() {
for id in [
"claude-opus-4-8",
"claude-opus-4-8-thinking",
"claude-sonnet-4-6",
"gpt-5.5",
"gpt-5.5-high",
"gemini-3-pro",
"anthropic/claude-opus-4-6",
] {
assert!(model_honors_steering(id), "{id} should be injected");
}
}
#[test]
fn reasoning_capability_read_from_models_dev_snapshot() {
for id in [
"claude-sonnet-5",
"anthropic/claude-sonnet-5", "claude-opus-4-8",
"gpt-5",
"o3",
] {
assert!(
model_is_reasoning_capable(id),
"{id} should read as reasoning-capable"
);
}
for id in [
"gpt-4o-mini",
"gpt-4o",
"claude-3-5-haiku",
"",
"totally-unknown-model",
] {
assert!(
!model_is_reasoning_capable(id),
"{id} must not read as reasoning-capable"
);
}
}
#[test]
fn context_window_read_from_models_dev_snapshot() {
for (id, window) in [
("gpt-5", 400_000),
("gpt-5-codex", 400_000),
("gpt-5.6-terra", 1_050_000),
("openai/gpt-5", 400_000), ("gpt-4o", 128_000),
] {
assert_eq!(context_window_for(id), Some(window), "{id}");
}
for id in ["totally-unknown-model", ""] {
assert_eq!(context_window_for(id), None, "{id}");
}
}
#[test]
fn unknown_and_empty_ids_inject() {
assert!(model_honors_steering("claude-sonnet-5")); assert!(model_honors_steering("some-model-shipped-tomorrow"));
assert!(model_honors_steering(""));
}
#[test]
fn date_suffix_match_resolves_a_bare_id_without_borrowing_a_sibling() {
assert_eq!(RATINGS.get("gpt-4o-mini"), None); assert_eq!(rating_for("gpt-4o-mini"), Some(1287));
assert!(!model_honors_steering("gpt-4o-mini"));
}
#[test]
fn snapshot_parses_and_is_populated() {
assert!(RATINGS.len() > 100, "snapshot should carry the full board");
assert!(RATINGS["claude-sonnet-5-high"] > CAPABILITY_THRESHOLD);
}
}