desktop/src-tauri/crates/core/src/models_dev.rs
Comment 1, line 1
desktop/src-tauri/crates/core/src/models_dev.rs:1
//! Convert the models.dev api.json catalog to price snapshots for F2 online refresh.Comment 2, line 2
desktop/src-tauri/crates/core/src/models_dev.rs:2
//! Rules: docs/design/desktop-usage/pricing.md, online refresh design.Comment 3, line 3
desktop/src-tauri/crates/core/src/models_dev.rs:3
//!Comment 4, line 4
desktop/src-tauri/crates/core/src/models_dev.rs:4
//! S24 structure observed on 2026-10-01: provider_id maps to id/name/doc/env/Comment 5, line 5
desktop/src-tauri/crates/core/src/models_dev.rs:5
//! npm/models, with model_id mapping to ModelEntry. Its cost fields includeComment 6, line 6
desktop/src-tauri/crates/core/src/models_dev.rs:6
//! input/output/cache_read/cache_write/input_audio/output_audio/reasoning/Comment 7, line 7
desktop/src-tauri/crates/core/src/models_dev.rs:7
//! tiers/context_over_200k, denominated in USD per million tokens without a currency field.Comment 8, line 8
desktop/src-tauri/crates/core/src/models_dev.rs:8
//! canonical_model_id, such as openai/gpt-6-astra, supplies catalog provider attribution.Comment 9, line 9
desktop/src-tauri/crates/core/src/models_dev.rs:9
//!Comment 10, line 10
desktop/src-tauri/crates/core/src/models_dev.rs:10
//! Select official-provider pay-as-you-go entries by the catalog rules:Comment 11, line 11
desktop/src-tauri/crates/core/src/models_dev.rs:11
//! - provider IDs must match a canonical_model_id prefix or its -cn variant;Comment 12, line 12
desktop/src-tauri/crates/core/src/models_dev.rs:12
//! exclude IDs containing -plan, including coding-plan/token-plan subscriptionComment 13, line 13
desktop/src-tauri/crates/core/src/models_dev.rs:13
//! placeholders whose observed costs were all zero;Comment 14, line 14
desktop/src-tauri/crates/core/src/models_dev.rs:14
//! - skip models with input/output both zero or absent; subscription placeholders are not prices;Comment 15, line 15
desktop/src-tauri/crates/core/src/models_dev.rs:15
//! - raw zero components become NULL, without treating placeholder zeros as free rates;Comment 16, line 16
desktop/src-tauri/crates/core/src/models_dev.rs:16
//! - map cache_write to cache_write_5m because the catalog lacks TTL tiers; context-type tiersComment 17, line 17
desktop/src-tauri/crates/core/src/models_dev.rs:17
//! become context_threshold_tokens rows, without duplicating context_over_200k;Comment 18, line 18
desktop/src-tauri/crates/core/src/models_dev.rs:18
//! do not import audio/reasoning rates separately; reasoning remains within output pricing;Comment 19, line 19
desktop/src-tauri/crates/core/src/models_dev.rs:19
//! - set region cn for -cn variants, otherwise global; channel api, currency USD,Comment 20, line 20
desktop/src-tauri/crates/core/src/models_dev.rs:20
//! service_tier standard and official_vendor true;Comment 21, line 21
desktop/src-tauri/crates/core/src/models_dev.rs:21
//! - convert USD/million tokens to hundredths of a cent/million with multiplication by 10^4 and rounding.Comment 22, line 29
desktop/src-tauri/crates/core/src/models_dev.rs:29
/// Only built-in online price source; HTTPS GET sends no local data.Comment 23, line 32
desktop/src-tauri/crates/core/src/models_dev.rs:32
/// Response-size limit; S24 observed about 5.3 MiB.Comment 24, line 79
desktop/src-tauri/crates/core/src/models_dev.rs:79
/// Convert USD/million tokens to hundredths of a cent/million by 10^4 and rounding.Comment 25, line 80
desktop/src-tauri/crates/core/src/models_dev.rs:80
/// Raw zero placeholders become None rather than free prices.Comment 26, line 91
desktop/src-tauri/crates/core/src/models_dev.rs:91
// Skip negative/non-finite raw rates before snapshot validation.Comment 27, line 96
desktop/src-tauri/crates/core/src/models_dev.rs:96
/// Select provider IDs from canonical_model_id prefixes and their -cn variants;Comment 28, line 97
desktop/src-tauri/crates/core/src/models_dev.rs:97
/// exclude -plan subscription placeholders.Comment 29, line 127
desktop/src-tauri/crates/core/src/models_dev.rs:127
/// Convert raw api.json to a community price snapshot (source_type=community).Comment 30, line 128
desktop/src-tauri/crates/core/src/models_dev.rs:128
/// Successful fetched_at_ms determines the snapshot date and effective start.Comment 31, line 129
desktop/src-tauri/crates/core/src/models_dev.rs:129
/// Raw-response FNV-1a hash contributes to snapshot identity and duplicate detection.Comment 32, line 155
desktop/src-tauri/crates/core/src/models_dev.rs:155
// Use the fetched UTC date as effective start because the catalog has no rate-effective intervals.Comment 33, line 171
desktop/src-tauri/crates/core/src/models_dev.rs:171
// Skip subscription placeholders or entries without usable rates.Comment 34, line 213
desktop/src-tauri/crates/core/src/models_dev.rs:213
// Import context-type long-context tiers, keeping the first entry for each size.Comment 35, line 247
desktop/src-tauri/crates/core/src/models_dev.rs:247
// Reuse SnapshotFile validation for intervals, nonnegative values and enums before normalization.Comment 36, line 295
desktop/src-tauri/crates/core/src/models_dev.rs:295
/// Raw-response FNV-1a hash uses the pricing algorithm for snapshot identity.Comment 37, line 304
desktop/src-tauri/crates/core/src/models_dev.rs:304
/// Synthetic catalog includes canonical vendorA, its vendorA-cn variant,Comment 38, line 305
desktop/src-tauri/crates/core/src/models_dev.rs:305
/// subscription placeholders, an aggregator, zero-rate models, context tiers and zero components.Comment 39, line 371
desktop/src-tauri/crates/core/src/models_dev.rs:371
// vendorA: m-one base and 272K tier, m-free-cache and m-tiny; vendorA-cn: m-one.Comment 40, line 372
desktop/src-tauri/crates/core/src/models_dev.rs:372
// Exclude all-zero m-zero and coding-plan/aggregator entries.Comment 41, line 383
desktop/src-tauri/crates/core/src/models_dev.rs:383
// -cn variants use region cn; other entries use global.Comment 42, line 390
desktop/src-tauri/crates/core/src/models_dev.rs:390
// 0.115 * 10^4.Comment 43, line 401
desktop/src-tauri/crates/core/src/models_dev.rs:401
// USD 10 per million tokens.Comment 44, line 402
desktop/src-tauri/crates/core/src/models_dev.rs:402
// USD 12.5 per million tokens, in the five-minute tier.Comment 45, line 403
desktop/src-tauri/crates/core/src/models_dev.rs:403
// The catalog has no one-hour tier.Comment 46, line 411
desktop/src-tauri/crates/core/src/models_dev.rs:411
// USD 75 per million tokens.Comment 47, line 412
desktop/src-tauri/crates/core/src/models_dev.rs:412
// Raw zero components become NULL instead of free placeholder rates.Comment 48, line 420
desktop/src-tauri/crates/core/src/models_dev.rs:420
// Round USD 0.003625/M * 10^4 = 36.25 to 36.Comment 49, line 438
desktop/src-tauri/crates/core/src/models_dev.rs:438
// Changed bytes produce a different snapshot ID, as required for corrected snapshots.Comment 50, line 453
desktop/src-tauri/crates/core/src/models_dev.rs:453
// Subscription-only zero placeholders yield no rows and must be rejected.