sim_lib_agent_runner_core/
terminal.rs1use sim_kernel::{Error, Expr, Result};
2
3use crate::ModelResponse;
4
5pub fn terminal_model_content(response: &ModelResponse) -> Result<&Expr> {
7 response
8 .content
9 .last()
10 .ok_or_else(|| Error::Eval("model response had no terminal content".to_owned()))
11}
12
13#[cfg(test)]
14mod tests {
15 use super::terminal_model_content;
16 use crate::ModelResponse;
17 use sim_kernel::{Expr, Symbol};
18
19 #[test]
20 fn terminal_content_is_last_item() {
21 let response = ModelResponse::new(
22 Symbol::qualified("runner", "fixture"),
23 "fixture",
24 vec![
25 Expr::String("tool progress".to_owned()),
26 Expr::String("final answer".to_owned()),
27 ],
28 Symbol::new("stop"),
29 );
30
31 assert_eq!(
32 terminal_model_content(&response).unwrap(),
33 &Expr::String("final answer".to_owned())
34 );
35 }
36
37 #[test]
38 fn empty_content_is_an_error() {
39 let response = ModelResponse::new(
40 Symbol::qualified("runner", "fixture"),
41 "fixture",
42 Vec::new(),
43 Symbol::new("stop"),
44 );
45
46 assert!(terminal_model_content(&response).is_err());
47 }
48}