checkpoint

⚒️ Generated with [Fabro](https://fabro.sh)
This commit is contained in:
Fabro 2026-05-22 16:08:25 -04:00
parent 57e4a32963
commit a770e1c720
4 changed files with 429 additions and 95 deletions

447
run.json

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,66 @@
diff --git a/lib/crates/fabro-types/src/lib.rs b/lib/crates/fabro-types/src/lib.rs
index b6e1ab4ae..00c686649 100644
--- a/lib/crates/fabro-types/src/lib.rs
+++ b/lib/crates/fabro-types/src/lib.rs
@@ -137,5 +137,5 @@ pub use timing::{RunTiming, StageTiming};
pub use todo::{TodoListKind, TodoListProjection, TodoPatch, TodoProjection, TodoStatus};
pub use transcript::{
AudioData, ContentPart, DocumentData, ImageData, MessageId, MessageKind, MessageSource,
- PairMessageRef, ThinkingData, ToolCall, ToolResult, TranscriptMessage, TranscriptUsage,
+ PairMessageRef, ThinkingData, ToolCall, ToolResult, TranscriptMessage,
};
diff --git a/lib/crates/fabro-types/src/transcript.rs b/lib/crates/fabro-types/src/transcript.rs
index 361d9700a..8dcd3971b 100644
--- a/lib/crates/fabro-types/src/transcript.rs
+++ b/lib/crates/fabro-types/src/transcript.rs
@@ -6,10 +6,8 @@
//! parallel DTOs between layers. `fabro-llm::types` re-exports these so
//! existing imports keep working.
-use std::collections::BTreeMap;
-
use chrono::{DateTime, Utc};
-use fabro_model::ModelRef;
+use fabro_model::{ModelRef, TokenCounts};
use serde::{Deserialize, Serialize, de};
use strum::{Display, EnumString, IntoStaticStr};
@@ -325,22 +323,6 @@ pub struct PairMessageRef {
pub client_message_id: Option<String>,
}
-/// Optional usage attribution carried on a committed message.
-#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
-pub struct TranscriptUsage {
- #[serde(default, skip_serializing_if = "Option::is_none")]
- pub input_tokens: Option<u64>,
- #[serde(default, skip_serializing_if = "Option::is_none")]
- pub output_tokens: Option<u64>,
- #[serde(default, skip_serializing_if = "Option::is_none")]
- pub cached_input_tokens: Option<u64>,
- #[serde(default, skip_serializing_if = "Option::is_none")]
- pub reasoning_tokens: Option<u64>,
- /// Additional provider-specific usage counters.
- #[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
- pub extra: BTreeMap<String, u64>,
-}
-
/// Canonical durable transcript message.
///
/// Named `TranscriptMessage` rather than `Message` to avoid import ambiguity
@@ -369,7 +351,7 @@ pub struct TranscriptMessage {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub response_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
- pub usage: Option<TranscriptUsage>,
+ pub usage: Option<TokenCounts>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub created_at: Option<DateTime<Utc>>,
}
@@ -505,4 +487,4 @@ mod tests {
let v = serde_json::to_value(&r).unwrap();
assert!(v.as_object().unwrap().get("client_message_id").is_none());
}
-}
\ No newline at end of file
+}

View file

@ -0,0 +1,6 @@
{
"outcome": "succeeded",
"notes": "Stage completed: simplify_gpt",
"failure_reason": null,
"timestamp": "2026-05-22T20:04:12.100941Z"
}

View file

@ -0,0 +1,5 @@
{
"script": "cargo +nightly-2026-04-14 clippy -q --workspace --all-targets -- -D warnings 2>&1 && cargo nextest run --cargo-quiet --workspace --status-level fail 2>&1 && cargo dev docs refresh 2>&1 && cargo dev docs check 2>&1",
"command": "exec 2>&1\ncargo +nightly-2026-04-14 clippy -q --workspace --all-targets -- -D warnings 2>&1 && cargo nextest run --cargo-quiet --workspace --status-level fail 2>&1 && cargo dev docs refresh 2>&1 && cargo dev docs check 2>&1",
"language": "shell"
}