Skip to content

desktop/src-tauri/crates/core/src/adapters/usage_map.rs

Comment 1, line 1

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:1

//! V01 shared token mappings based on native source field meanings.

Comment 2, line 2

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:2

//!

Comment 3, line 3

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:3

//! Directory layout follows architecture.md#adapter-layout. Product-specific mappings live in

Comment 4, line 4

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:4

//! adapters/codex/common.rs, adapters/claude/,

Comment 5, line 5

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:5

//! adapters/zcode/common.rs (M4, map_zcode_ai_sdk and map_zcode_anthropic),

Comment 6, line 6

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:6

//! adapters/kilo/common.rs (M3, map_kilo and KiloUsage),

Comment 7, line 7

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:7

//! and adapters/kimi_wire.rs (M4, map_kimi_wire and KimiWireUsage),

Comment 8, line 8

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:8

//! shared by Kimi Code and Kimi Work. This module retains cross-Agent types and helpers:

Comment 9, line 9

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:9

//!

Comment 10, line 10

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:10

//! - pi/omp share map_pi_family, with rules checked in fixed source versions;

Comment 11, line 11

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:11

//! - gemini/qwen share map_genai_usage for the matching usageMetadata field shape.

Comment 12, line 12

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:12

//!

Comment 13, line 13

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:13

//! Source checks recorded in m0-agent-fixtures.md establish:

Comment 14, line 14

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:14

//! - Kimi wire has independent inputOther/inputCacheRead/inputCacheCreation/output, without total

Comment 15, line 15

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:15

//! (mapping in adapters/kimi_wire.rs).

Comment 16, line 16

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:16

//! - ZCode AI SDK inputTokens includes cache reads; Anthropic input_tokens excludes cache

Comment 17, line 17

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:17

//! (separate mappings in adapters/zcode/common.rs).

Comment 18, line 18

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:18

//! - Copilot input includes uncached input, cache read and cache write (adapters/copilot/common.rs).

Comment 19, line 19

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:19

//! - Kilo total sums independent input/output/reasoning/cache.read/cache.write

Comment 20, line 20

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:20

//! (mapping in adapters/kilo/common.rs).

Comment 21, line 21

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:21

//!

Comment 22, line 22

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:22

//! Map only verified fields; missing values stay None (unknown), without replacement zeros.

Comment 23, line 23

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:23

//! Diagnose contradictions such as cache read above total input; do not hide them with max(0, ...).

Comment 24, line 28

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:28

/// Normalized usage, per-field quality and consistency diagnostics.

Comment 25, line 44

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:44

/// Map independently reported fields when inclusion relationships are unverified, as in Zed.

Comment 26, line 45

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:45

/// Subset checks such as cache <= input_total require known inclusion relationships and can falsely

Comment 27, line 46

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:46

/// reject independent reports. Domain validation still checks nonnegative values and upper limits.

Comment 28, line 103

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:103

// M4 moved the four independent Kimi wire fields to adapters/kimi_wire.rs, shared by

Comment 29, line 104

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:104

// Kimi Code/Kimi Work, and the two ZCode mappings to adapters/zcode/common.rs.

Comment 30, line 105

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:105

// Each source file documents its own calculation references.

Comment 31, line 107

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:107

/// Shared pi/oh-my-pi Usage meanings, within the limits documented in adapters.md.

Comment 32, line 108

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:108

/// Fixed source references:

Comment 33, line 109

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:109

/// - pi-mono b4559750 packages/ai/src/types.ts: Usage has input/output/cacheRead/cacheWrite,

Comment 34, line 110

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:110

/// optional cacheWrite1h (subset of cacheWrite), reasoning (subset of output), totalTokens and cost.

Comment 35, line 111

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:111

/// anthropic-messages.ts/openai-completions.ts normalize input as the uncached bucket:

Comment 36, line 112

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:112

/// input = max(0, prompt_tokens - cached - cache_write);

Comment 37, line 113

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:113

/// totalTokens = input + output + cacheRead + cacheWrite.

Comment 38, line 114

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:114

/// - oh-my-pi 62bc57b packages/catalog/src/types.ts defines input as uncached

Comment 39, line 115

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:115

/// conversation input. totalTokens sums the four buckets plus provider orchestration,

Comment 40, line 116

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:116

/// when present; reasoningTokens is within output, and cttl subdivides cacheWrite.

Comment 41, line 117

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:117

///

Comment 42, line 118

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:118

/// input/cacheRead/cacheWrite are independent; do not add reasoning again. Diagnose a mismatch

Comment 43, line 119

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:119

/// between totalTokens and derived totals, such as OMP orchestration, without truncating values.

Comment 44, line 127

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:127

/// Optional pi reasoning/OMP reasoningTokens: absence is Unknown;

Comment 45, line 128

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:128

/// preserve zero when supplied as a verified reported value.

Comment 46, line 195

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:195

/// genai usageMetadata has six categories in Gemini CLI session tokens and Qwen Code

Comment 47, line 196

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:196

/// ChatRecord.usageMetadata at the checked source versions:

Comment 48, line 197

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:197

/// optional prompt(input), candidates(output), cached, thoughts, tool and total.

Comment 49, line 198

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:198

/// The references verify fields/categories, but inclusion of cached/thoughts/tool in input/output

Comment 50, line 199

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:199

/// has not been checked for each provider. Preserve unknowns without inferred relationships:

Comment 51, line 200

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:200

/// - keep input_uncached/output_reasoning None without verified independence/subset rules;

Comment 52, line 201

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:201

/// - take total_tokens only from reported total, without summing incomplete components;

Comment 53, line 202

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:202

/// thoughts/tool may sit outside input+output;

Comment 54, line 203

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:203

/// - tool has no normalized field; do not force it into input_total to match total.

Comment 55, line 204

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:204

///

Comment 56, line 205

desktop/src-tauri/crates/core/src/adapters/usage_map.rs:205

/// finish() still diagnoses contradictions such as cached above prompt.