use crate::types::{InputItem, ModelResponse, RunItem, Usage};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RunResult {
pub input: Vec<InputItem>,
pub new_items: Vec<RunItem>,
pub raw_responses: Vec<ModelResponse>,
pub final_output: String,
pub usage: Usage,
}
impl RunResult {
pub fn new(
input: Vec<InputItem>,
new_items: Vec<RunItem>,
raw_responses: Vec<ModelResponse>,
final_output: String,
usage: Usage,
) -> Self {
Self {
input,
new_items,
raw_responses,
final_output,
usage,
}
}
pub fn to_input_list(&self) -> Vec<InputItem> {
let mut items = self.input.clone();
items.extend(self.new_items.iter().map(|item| item.to_input_item()));
items
}
pub fn last_message(&self) -> Option<&str> {
self.new_items.iter().rev().find_map(|item| {
if let RunItem::Message { content, .. } = item {
Some(content.as_str())
} else {
None
}
})
}
}
#[derive(Debug)]
pub struct RunResultStreaming {
_placeholder: (),
}
impl RunResultStreaming {
pub(crate) fn _new() -> Self {
Self { _placeholder: () }
}
}