From 78509565852f55232f75b2d2640299fe490eb0f8 Mon Sep 17 00:00:00 2001 From: Louis Mandel Date: Fri, 11 Apr 2025 15:56:21 -0400 Subject: [PATCH 1/2] feat: update rust Repeat AST to use Expr for `for` attr Signed-off-by: Louis Mandel --- pdl-live-react/src-tauri/src/compile/beeai.rs | 9 ++++++-- pdl-live-react/src-tauri/src/pdl/ast.rs | 2 +- .../src-tauri/src/pdl/interpreter.rs | 21 +++++++++++++------ 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/pdl-live-react/src-tauri/src/compile/beeai.rs b/pdl-live-react/src-tauri/src/compile/beeai.rs index 4a0862055..bf6c7b068 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::{from_reader, json, to_string, Map, Value}; use tempfile::Builder; use crate::pdl::ast::{ - ArrayBlock, CallBlock, EvalsTo, FunctionBlock, ListOrString, MessageBlock, MetadataBuilder, + ArrayBlock, CallBlock, EvalsTo, Expr, FunctionBlock, ListOrString, MessageBlock, MetadataBuilder, ModelBlock, ObjectBlock, PdlBaseType, PdlBlock, PdlOptionalType, PdlParser, PdlType, PythonCodeBlock, RepeatBlock, Role, TextBlock, TextBlockBuilder, }; @@ -232,7 +232,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 555db9412..4b44371a4 100644 --- a/pdl-live-react/src-tauri/src/pdl/ast.rs +++ b/pdl-live-react/src-tauri/src/pdl/ast.rs @@ -350,7 +350,7 @@ pub enum ListOrString { 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 ac2bf706a..e44af5c02 100644 --- a/pdl-live-react/src-tauri/src/pdl/interpreter.rs +++ b/pdl-live-react/src-tauri/src/pdl/interpreter.rs @@ -284,18 +284,27 @@ 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::Const(l) | + EvalsTo::Expr(Expr { + pdl_expr: ListOrString::List(l), + .. + }) => l.iter().map(|v| self.eval_json(v, state)).collect(), } } From d8a0d8a8eb74ff7aa9f4bd4760f9981638f0c63a Mon Sep 17 00:00:00 2001 From: Louis Mandel Date: Fri, 11 Apr 2025 16:16:36 -0400 Subject: [PATCH 2/2] Code cleanup Signed-off-by: Louis Mandel --- pdl-live-react/src-tauri/src/pdl/interpreter.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/pdl-live-react/src-tauri/src/pdl/interpreter.rs b/pdl-live-react/src-tauri/src/pdl/interpreter.rs index e44af5c02..e13b47dbe 100644 --- a/pdl-live-react/src-tauri/src/pdl/interpreter.rs +++ b/pdl-live-react/src-tauri/src/pdl/interpreter.rs @@ -300,7 +300,6 @@ impl<'a> Interpreter<'a> { x ))), }, - // EvalsTo::Const(l) | EvalsTo::Expr(Expr { pdl_expr: ListOrString::List(l), ..