Skip to content

Commit 7850956

Browse files
committed
feat: update rust Repeat AST to use Expr for for attr
Signed-off-by: Louis Mandel <[email protected]>
1 parent ef27624 commit 7850956

File tree

3 files changed

+23
-9
lines changed

3 files changed

+23
-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::{from_reader, json, to_string, Map, Value};
1212
use tempfile::Builder;
1313

1414
use crate::pdl::ast::{
15-
ArrayBlock, CallBlock, EvalsTo, FunctionBlock, ListOrString, MessageBlock, MetadataBuilder,
15+
ArrayBlock, CallBlock, EvalsTo, Expr, FunctionBlock, ListOrString, MessageBlock, MetadataBuilder,
1616
ModelBlock, ObjectBlock, PdlBaseType, PdlBlock, PdlOptionalType, PdlParser, PdlType,
1717
PythonCodeBlock, RepeatBlock, Role, TextBlock, TextBlockBuilder,
1818
};
@@ -232,7 +232,12 @@ fn call_tools(model: &String, parameters: &HashMap<String, Value>) -> PdlBlock {
232232
let mut for_ = HashMap::new();
233233
for_.insert(
234234
"tool".to_string(),
235-
ListOrString::String("${ response.choices[0].message.tool_calls }".to_string()),
235+
EvalsTo::Expr(Expr {
236+
pdl_expr: ListOrString::String(
237+
"${ response.choices[0].message.tool_calls }".to_string(),
238+
),
239+
pdl_result: None,
240+
}),
236241
);
237242

238243
// 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
@@ -350,7 +350,7 @@ pub enum ListOrString {
350350
pub struct RepeatBlock {
351351
/// Arrays to iterate over
352352
#[serde(rename = "for")]
353-
pub for_: HashMap<String, ListOrString>,
353+
pub for_: HashMap<String, EvalsTo<ListOrString, Vec<PdlResult>>>,
354354

355355
/// Body of the loop
356356
pub repeat: Box<PdlBlock>,

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

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -284,18 +284,27 @@ 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::Const(l) |
304+
EvalsTo::Expr(Expr {
305+
pdl_expr: ListOrString::List(l),
306+
..
307+
}) => l.iter().map(|v| self.eval_json(v, state)).collect(),
299308
}
300309
}
301310

0 commit comments

Comments
 (0)