Skip to content

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 include

Comment 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 subscription

Comment 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 tiers

Comment 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.