Skip to main content

sim_lib_agent_runner_core/
terminal.rs

1use sim_kernel::{Error, Expr, Result};
2
3use crate::ModelResponse;
4
5/// Returns the terminal content item from a model response.
6pub 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}