Skip to content

Commit a5400eb

Browse files
committed
fix: improve deserialization of python-generated model block traces
Signed-off-by: Nick Mitchell <[email protected]>
1 parent 3966a67 commit a5400eb

File tree

2 files changed

+21
-12
lines changed

2 files changed

+21
-12
lines changed

pdl-live-react/src-tauri/src/pdl/ast.rs

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -57,17 +57,18 @@ pub enum PdlType {
5757
/// Timing information
5858
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
5959
pub struct Timing {
60-
start_nanos: u128,
61-
end_nanos: u128,
60+
// TODO serde_json doesn't support u128, but (below) as_nanos() returns u128...
61+
start_nanos: u64,
62+
end_nanos: u64,
6263
timezone: String,
6364
}
6465

6566
type TimingError = Box<dyn Error + Send + Sync>;
6667
impl Timing {
67-
fn now() -> Result<u128, TimingError> {
68+
fn now() -> Result<u64, TimingError> {
6869
Ok(::std::time::SystemTime::now()
6970
.duration_since(SystemTime::UNIX_EPOCH)?
70-
.as_nanos())
71+
.as_nanos() as u64)
7172
}
7273

7374
pub fn start() -> Result<Timing, TimingError> {
@@ -257,14 +258,16 @@ pub struct FunctionBlock {
257258

258259
#[derive(Serialize, Deserialize, Debug, Clone)]
259260
pub struct PdlUsage {
260-
// Completion tokens consumed
261+
/// Completion tokens consumed
261262
pub completion_tokens: u64,
262-
// Prompt tokens consumed
263+
/// Prompt tokens consumed
263264
pub prompt_tokens: u64,
264-
// Completion nanos
265-
pub completion_nanos: u64,
266-
// Prompt nanos
267-
pub prompt_nanos: u64,
265+
/// Completion nanos
266+
#[serde(skip_serializing_if = "Option::is_none")]
267+
pub completion_nanos: Option<u64>,
268+
/// Prompt nanos
269+
#[serde(skip_serializing_if = "Option::is_none")]
270+
pub prompt_nanos: Option<u64>,
268271
}
269272

270273
#[derive(Serialize, Deserialize, Debug, Clone, Default, derive_builder::Builder)]
@@ -277,11 +280,17 @@ pub struct ModelBlock {
277280
#[serde(skip_serializing_if = "Option::is_none")]
278281
pub input: Option<Box<PdlBlock>>,
279282
#[serde(skip_serializing_if = "Option::is_none")]
283+
pub platform: Option<String>,
284+
#[serde(skip_serializing_if = "Option::is_none")]
285+
pub context: Option<Vec<MessageBlock>>,
286+
#[serde(skip_serializing_if = "Option::is_none")]
280287
#[serde(rename = "modelResponse")]
281288
pub model_response: Option<String>,
282289
#[serde(rename = "pdl__usage")]
283290
#[serde(skip_serializing_if = "Option::is_none")]
284291
pub pdl_usage: Option<PdlUsage>,
292+
#[serde(rename = "pdl__model_input", skip_serializing_if = "Option::is_none")]
293+
pub pdl_model_input: Option<Vec<MessageBlock>>,
285294
}
286295

287296
#[derive(Serialize, Deserialize, Debug, Clone)]

pdl-live-react/src-tauri/src/pdl/interpreter.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -841,9 +841,9 @@ impl<'a> Interpreter<'a> {
841841
if let Some(usage) = res.final_data {
842842
trace.pdl_usage = Some(PdlUsage {
843843
prompt_tokens: usage.prompt_eval_count,
844-
prompt_nanos: usage.prompt_eval_duration,
844+
prompt_nanos: Some(usage.prompt_eval_duration),
845845
completion_tokens: usage.eval_count,
846-
completion_nanos: usage.eval_duration,
846+
completion_nanos: Some(usage.eval_duration),
847847
});
848848
}
849849
let output_messages = vec![ChatMessage::assistant(response_string)];

0 commit comments

Comments
 (0)