@@ -12,9 +12,10 @@ use serde_json::{Map, Value, from_reader, json, to_string};
1212use tempfile:: Builder ;
1313
1414use crate :: pdl:: ast:: {
15- ArrayBlockBuilder , CallBlock , EvalsTo , Expr , FunctionBlock , ListOrString , MessageBlock ,
16- MetadataBuilder , ModelBlockBuilder , ObjectBlock , PdlBaseType , PdlBlock , PdlOptionalType ,
17- PdlParser , PdlType , PythonCodeBlock , RepeatBlock , Role , TextBlock , TextBlockBuilder ,
15+ ArrayBlockBuilder , Block :: * , CallBlock , EvalsTo , Expr , FunctionBlock , ListOrString ,
16+ MessageBlock , MetadataBuilder , ModelBlockBuilder , ObjectBlock , PdlBaseType , PdlBlock ,
17+ PdlBlock :: Advanced , PdlOptionalType , PdlParser , PdlType , PythonCodeBlock , RepeatBlock , Role ,
18+ TextBlock , TextBlockBuilder ,
1819} ;
1920use crate :: pdl:: pip:: pip_install_if_needed;
2021use crate :: pdl:: requirements:: BEEAI_FRAMEWORK ;
@@ -190,7 +191,7 @@ fn with_tools(
190191}
191192
192193fn call_tools ( model : & String , parameters : & HashMap < String , Value > ) -> PdlBlock {
193- let repeat = PdlBlock :: Text ( TextBlock {
194+ let repeat = Advanced ( Text ( TextBlock {
194195 metadata : Some (
195196 MetadataBuilder :: default ( )
196197 . description ( "Calling tool ${ tool.function.name }" . to_string ( ) )
@@ -199,19 +200,19 @@ fn call_tools(model: &String, parameters: &HashMap<String, Value>) -> PdlBlock {
199200 ) ,
200201 role : None ,
201202 parser : None ,
202- text : vec ! [ PdlBlock :: Model (
203+ text : vec ! [ Advanced ( Model (
203204 ModelBlockBuilder :: default ( )
204205 . model( model. as_str( ) )
205206 . parameters( strip_nulls( parameters) )
206- . input( PdlBlock :: Array (
207+ . input( Advanced ( Array (
207208 ArrayBlockBuilder :: default ( )
208- . array( vec![ PdlBlock :: Message ( MessageBlock {
209+ . array( vec![ Advanced ( Message ( MessageBlock {
209210 metadata: None ,
210211 role: Role :: Tool ,
211212 defsite: None ,
212213 name: Some ( "${ tool.function.name }" . to_string( ) ) ,
213214 tool_call_id: Some ( "${ tool.id }" . to_string( ) ) ,
214- content: Box :: new( PdlBlock :: Call ( CallBlock {
215+ content: Box :: new( Advanced ( Call ( CallBlock {
215216 metadata: Some (
216217 MetadataBuilder :: default ( )
217218 . defs( json_loads(
@@ -226,15 +227,15 @@ fn call_tools(model: &String, parameters: &HashMap<String, Value>) -> PdlBlock {
226227 "${ pdl__tools[tool.function.name] }" . to_string( ) ,
227228 ) , // look up tool in tool_declarations def (see below)
228229 args: Some ( "${ args }" . into( ) ) , // invoke with arguments as specified by the model
229- } ) ) ,
230- } ) ] )
230+ } ) ) ) ,
231+ } ) ) ] )
231232 . build( )
232233 . unwrap( ) ,
233- ) )
234+ ) ) )
234235 . build( )
235236 . unwrap( ) ,
236- ) ] ,
237- } ) ;
237+ ) ) ] ,
238+ } ) ) ;
238239
239240 let mut for_ = HashMap :: new ( ) ;
240241 for_. insert (
@@ -248,11 +249,11 @@ fn call_tools(model: &String, parameters: &HashMap<String, Value>) -> PdlBlock {
248249 ) ;
249250
250251 // response.choices[0].message.tool_calls
251- PdlBlock :: Repeat ( RepeatBlock {
252+ Advanced ( Repeat ( RepeatBlock {
252253 metadata : None ,
253254 for_ : for_,
254255 repeat : Box :: new ( repeat) ,
255- } )
256+ } ) )
256257}
257258
258259fn json_loads (
@@ -263,7 +264,7 @@ fn json_loads(
263264 let mut m = indexmap:: IndexMap :: new ( ) ;
264265 m. insert (
265266 outer_name. to_owned ( ) ,
266- PdlBlock :: Text (
267+ Advanced ( Text (
267268 TextBlockBuilder :: default ( )
268269 . text ( vec ! [ PdlBlock :: String ( format!(
269270 "{{\" {}\" : {}}}" ,
@@ -278,7 +279,7 @@ fn json_loads(
278279 . parser ( PdlParser :: Json )
279280 . build ( )
280281 . unwrap ( ) ,
281- ) ,
282+ ) ) ,
282283 ) ;
283284 m
284285}
@@ -427,7 +428,7 @@ pub fn compile(source_file_path: &str, debug: bool) -> Result<PdlBlock, Box<dyn
427428 tool_name. clone ( ) ,
428429 PdlBlock :: Function ( FunctionBlock {
429430 function : schema,
430- return_ : Box :: new ( PdlBlock :: PythonCode ( PythonCodeBlock {
431+ return_ : Box :: new ( Advanced ( PythonCode ( PythonCodeBlock {
431432 // tool function definition
432433 metadata : None ,
433434 lang : "python" . to_string ( ) ,
@@ -461,7 +462,7 @@ asyncio.run(invoke())
461462 "" . to_string( )
462463 }
463464 ) ,
464- } ) ) ,
465+ } ) ) ) ,
465466 } ) ,
466467 )
467468 } )
@@ -490,7 +491,7 @@ asyncio.run(invoke())
490491 let model = format ! ( "{}/{}" , provider, model) ;
491492
492493 if let Some ( instructions) = instructions {
493- model_call. push ( PdlBlock :: Text ( TextBlock {
494+ model_call. push ( Advanced ( Text ( TextBlock {
494495 role : Some ( Role :: System ) ,
495496 text : vec ! [ PdlBlock :: String ( instructions) ] ,
496497 metadata : Some (
@@ -500,7 +501,7 @@ asyncio.run(invoke())
500501 . unwrap ( ) ,
501502 ) ,
502503 parser : None ,
503- } ) ) ;
504+ } ) ) ) ;
504505 }
505506
506507 let mut model_builder = ModelBlockBuilder :: default ( ) ;
@@ -523,7 +524,7 @@ asyncio.run(invoke())
523524 }
524525 }
525526
526- model_call. push ( PdlBlock :: Model ( model_builder. build ( ) . unwrap ( ) ) ) ;
527+ model_call. push ( Advanced ( Model ( model_builder. build ( ) . unwrap ( ) ) ) ) ;
527528
528529 if let Some ( tools) = tools {
529530 if tools. len ( ) > 0 {
@@ -537,7 +538,7 @@ asyncio.run(invoke())
537538 closure_name. clone ( ) ,
538539 PdlBlock :: Function ( FunctionBlock {
539540 function : HashMap :: new ( ) ,
540- return_ : Box :: new ( PdlBlock :: Text ( TextBlock {
541+ return_ : Box :: new ( Advanced ( Text ( TextBlock {
541542 metadata : Some (
542543 MetadataBuilder :: default ( )
543544 . description ( format ! ( "Model call {}" , & model) )
@@ -547,10 +548,10 @@ asyncio.run(invoke())
547548 role : None ,
548549 parser : None ,
549550 text : model_call,
550- } ) ) ,
551+ } ) ) ) ,
551552 } ) ,
552553 ) ;
553- PdlBlock :: Text ( TextBlock {
554+ Advanced ( Text ( TextBlock {
554555 metadata : Some (
555556 MetadataBuilder :: default ( )
556557 . description ( "Model call wrapper" . to_string ( ) )
@@ -560,11 +561,11 @@ asyncio.run(invoke())
560561 ) ,
561562 role : None ,
562563 parser : None ,
563- text : vec ! [ PdlBlock :: Call ( CallBlock :: new( format!(
564+ text : vec ! [ Advanced ( Call ( CallBlock :: new( format!(
564565 "${{ {} }}" ,
565566 closure_name
566- ) ) ) ] ,
567- } )
567+ ) ) ) ) ] ,
568+ } ) )
568569 } ,
569570 )
570571 . collect :: < Vec < _ > > ( ) ;
@@ -579,19 +580,19 @@ asyncio.run(invoke())
579580 let mut defs = indexmap:: IndexMap :: new ( ) ;
580581 defs. insert (
581582 "pdl__tools" . to_string ( ) ,
582- PdlBlock :: Object ( ObjectBlock {
583+ Advanced ( Object ( ObjectBlock {
583584 object : tool_declarations,
584- } ) ,
585+ } ) ) ,
585586 ) ;
586587 metadata. defs ( defs) ;
587588 }
588589
589- let pdl: PdlBlock = PdlBlock :: Text ( TextBlock {
590+ let pdl: PdlBlock = Advanced ( Text ( TextBlock {
590591 metadata : Some ( metadata. build ( ) . unwrap ( ) ) ,
591592 role : None ,
592593 parser : None ,
593594 text : body,
594- } ) ;
595+ } ) ) ;
595596
596597 Ok ( pdl)
597598}
0 commit comments