Skip to content

Commit a0232f9

Browse files
mandelclaudiosv
authored andcommitted
feat: update rust Repeat AST to use Expr for for attr (#904)
Signed-off-by: Louis Mandel <[email protected]> Signed-off-by: Claudio Spiess <[email protected]>
1 parent a3a9849 commit a0232f9

File tree

3 files changed

+22
-9
lines changed

3 files changed

+22
-9
lines changed

pdl-live-react/src-tauri/src/compile/beeai.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use serde_json::{Map, Value, from_reader, json, to_string};
1212
use tempfile::Builder;
1313

1414
use crate::pdl::ast::{
15-
ArrayBlockBuilder, CallBlock, EvalsTo, FunctionBlock, ListOrString, MessageBlock,
15+
ArrayBlockBuilder, CallBlock, EvalsTo, Expr, FunctionBlock, ListOrString, MessageBlock,
1616
MetadataBuilder, ModelBlockBuilder, ObjectBlock, PdlBaseType, PdlBlock, PdlOptionalType,
1717
PdlParser, PdlType, PythonCodeBlock, RepeatBlock, Role, TextBlock, TextBlockBuilder,
1818
};
@@ -239,7 +239,12 @@ fn call_tools(model: &String, parameters: &HashMap<String, Value>) -> PdlBlock {
239239
let mut for_ = HashMap::new();
240240
for_.insert(
241241
"tool".to_string(),
242-
ListOrString::String("${ response.choices[0].message.tool_calls }".to_string()),
242+
EvalsTo::Expr(Expr {
243+
pdl_expr: ListOrString::String(
244+
"${ response.choices[0].message.tool_calls }".to_string(),
245+
),
246+
pdl_result: None,
247+
}),
243248
);
244249

245250
// response.choices[0].message.tool_calls

pdl-live-react/src-tauri/src/pdl/ast.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ pub struct RepeatBlock {
344344

345345
/// Arrays to iterate over
346346
#[serde(rename = "for")]
347-
pub for_: HashMap<String, ListOrString>,
347+
pub for_: HashMap<String, EvalsTo<ListOrString, Vec<PdlResult>>>,
348348

349349
/// Body of the loop
350350
pub repeat: Box<PdlBlock>,

pdl-live-react/src-tauri/src/pdl/interpreter.rs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -284,18 +284,26 @@ impl<'a> Interpreter<'a> {
284284
/// Evaluate an string or list of Values into a list of Values
285285
fn eval_list_or_string(
286286
&self,
287-
expr: &ListOrString,
287+
expr: &EvalsTo<ListOrString, Vec<PdlResult>>,
288288
state: &State,
289289
) -> Result<Vec<PdlResult>, PdlError> {
290290
match expr {
291-
ListOrString::String(s) => match self.eval(s, state)? {
292-
PdlResult::List(a) => Ok(a),
291+
EvalsTo::Const(c) => Ok(c.clone()),
292+
EvalsTo::Jinja(s)
293+
| EvalsTo::Expr(Expr {
294+
pdl_expr: ListOrString::String(s),
295+
..
296+
}) => match self.eval(s, state)? {
297+
PdlResult::List(l) => Ok(l),
293298
x => Err(Box::from(format!(
294-
"Jinja string expanded to non-list. {} -> {:?}",
295-
s, x
299+
"Expression {s} evaluated to non-list {:?}",
300+
x
296301
))),
297302
},
298-
ListOrString::List(l) => l.iter().map(|v| self.eval_json(v, state)).collect(),
303+
EvalsTo::Expr(Expr {
304+
pdl_expr: ListOrString::List(l),
305+
..
306+
}) => l.iter().map(|v| self.eval_json(v, state)).collect(),
299307
}
300308
}
301309

0 commit comments

Comments
 (0)