diff --git a/pdl-live-react/src-tauri/src/compile/beeai.rs b/pdl-live-react/src-tauri/src/compile/beeai.rs index 081c75c34..9e5371afb 100644 --- a/pdl-live-react/src-tauri/src/compile/beeai.rs +++ b/pdl-live-react/src-tauri/src/compile/beeai.rs @@ -12,7 +12,7 @@ use serde_json::{Map, Value, from_reader, json, to_string}; use tempfile::Builder; use crate::pdl::ast::{ - ArrayBlockBuilder, CallBlock, EvalsTo, FunctionBlock, ListOrString, MessageBlock, + ArrayBlockBuilder, CallBlock, EvalsTo, Expr, FunctionBlock, ListOrString, MessageBlock, MetadataBuilder, ModelBlockBuilder, ObjectBlock, PdlBaseType, PdlBlock, PdlOptionalType, PdlParser, PdlType, PythonCodeBlock, RepeatBlock, Role, TextBlock, TextBlockBuilder, }; @@ -239,7 +239,12 @@ fn call_tools(model: &String, parameters: &HashMap) -> PdlBlock { let mut for_ = HashMap::new(); for_.insert( "tool".to_string(), - ListOrString::String("${ response.choices[0].message.tool_calls }".to_string()), + EvalsTo::Expr(Expr { + pdl_expr: ListOrString::String( + "${ response.choices[0].message.tool_calls }".to_string(), + ), + pdl_result: None, + }), ); // response.choices[0].message.tool_calls diff --git a/pdl-live-react/src-tauri/src/pdl/ast.rs b/pdl-live-react/src-tauri/src/pdl/ast.rs index 0b8d88ed5..1fe8d76a5 100644 --- a/pdl-live-react/src-tauri/src/pdl/ast.rs +++ b/pdl-live-react/src-tauri/src/pdl/ast.rs @@ -344,7 +344,7 @@ pub struct RepeatBlock { /// Arrays to iterate over #[serde(rename = "for")] - pub for_: HashMap, + pub for_: HashMap>>, /// Body of the loop pub repeat: Box, diff --git a/pdl-live-react/src-tauri/src/pdl/interpreter.rs b/pdl-live-react/src-tauri/src/pdl/interpreter.rs index 521f161fa..6c09697fc 100644 --- a/pdl-live-react/src-tauri/src/pdl/interpreter.rs +++ b/pdl-live-react/src-tauri/src/pdl/interpreter.rs @@ -284,18 +284,26 @@ impl<'a> Interpreter<'a> { /// Evaluate an string or list of Values into a list of Values fn eval_list_or_string( &self, - expr: &ListOrString, + expr: &EvalsTo>, state: &State, ) -> Result, PdlError> { match expr { - ListOrString::String(s) => match self.eval(s, state)? { - PdlResult::List(a) => Ok(a), + EvalsTo::Const(c) => Ok(c.clone()), + EvalsTo::Jinja(s) + | EvalsTo::Expr(Expr { + pdl_expr: ListOrString::String(s), + .. + }) => match self.eval(s, state)? { + PdlResult::List(l) => Ok(l), x => Err(Box::from(format!( - "Jinja string expanded to non-list. {} -> {:?}", - s, x + "Expression {s} evaluated to non-list {:?}", + x ))), }, - ListOrString::List(l) => l.iter().map(|v| self.eval_json(v, state)).collect(), + EvalsTo::Expr(Expr { + pdl_expr: ListOrString::List(l), + .. + }) => l.iter().map(|v| self.eval_json(v, state)).collect(), } }