@@ -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 , FunctionBlock , ListOrString , MessageBlock ,
16- MetadataBuilder , ModelBlockBuilder , ObjectBlock , PdlBaseType , PdlBlock , PdlOptionalType ,
17- PdlParser , PdlType , PythonCodeBlock , RepeatBlock , Role , TextBlock , TextBlockBuilder ,
15+ ArrayBlockBuilder , Block :: * , CallBlock , EvalsTo , FunctionBlock , ListOrString , MessageBlock ,
16+ MetadataBuilder , ModelBlockBuilder , ObjectBlock , PdlBaseType , PdlBlock , PdlBlock :: Advanced ,
17+ PdlOptionalType , PdlParser , PdlType , PythonCodeBlock , RepeatBlock , Role , TextBlock ,
18+ 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 (
@@ -243,11 +244,11 @@ fn call_tools(model: &String, parameters: &HashMap<String, Value>) -> PdlBlock {
243244 ) ;
244245
245246 // response.choices[0].message.tool_calls
246- PdlBlock :: Repeat ( RepeatBlock {
247+ Advanced ( Repeat ( RepeatBlock {
247248 metadata : None ,
248249 for_ : for_,
249250 repeat : Box :: new ( repeat) ,
250- } )
251+ } ) )
251252}
252253
253254fn json_loads (
@@ -258,7 +259,7 @@ fn json_loads(
258259 let mut m = indexmap:: IndexMap :: new ( ) ;
259260 m. insert (
260261 outer_name. to_owned ( ) ,
261- PdlBlock :: Text (
262+ Advanced ( Text (
262263 TextBlockBuilder :: default ( )
263264 . text ( vec ! [ PdlBlock :: String ( format!(
264265 "{{\" {}\" : {}}}" ,
@@ -273,7 +274,7 @@ fn json_loads(
273274 . parser ( PdlParser :: Json )
274275 . build ( )
275276 . unwrap ( ) ,
276- ) ,
277+ ) ) ,
277278 ) ;
278279 m
279280}
@@ -422,7 +423,7 @@ pub fn compile(source_file_path: &str, debug: bool) -> Result<PdlBlock, Box<dyn
422423 tool_name. clone ( ) ,
423424 PdlBlock :: Function ( FunctionBlock {
424425 function : schema,
425- return_ : Box :: new ( PdlBlock :: PythonCode ( PythonCodeBlock {
426+ return_ : Box :: new ( Advanced ( PythonCode ( PythonCodeBlock {
426427 // tool function definition
427428 metadata : None ,
428429 lang : "python" . to_string ( ) ,
@@ -456,7 +457,7 @@ asyncio.run(invoke())
456457 "" . to_string( )
457458 }
458459 ) ,
459- } ) ) ,
460+ } ) ) ) ,
460461 } ) ,
461462 )
462463 } )
@@ -485,7 +486,7 @@ asyncio.run(invoke())
485486 let model = format ! ( "{}/{}" , provider, model) ;
486487
487488 if let Some ( instructions) = instructions {
488- model_call. push ( PdlBlock :: Text ( TextBlock {
489+ model_call. push ( Advanced ( Text ( TextBlock {
489490 role : Some ( Role :: System ) ,
490491 text : vec ! [ PdlBlock :: String ( instructions) ] ,
491492 metadata : Some (
@@ -495,7 +496,7 @@ asyncio.run(invoke())
495496 . unwrap ( ) ,
496497 ) ,
497498 parser : None ,
498- } ) ) ;
499+ } ) ) ) ;
499500 }
500501
501502 let mut model_builder = ModelBlockBuilder :: default ( ) ;
@@ -518,7 +519,7 @@ asyncio.run(invoke())
518519 }
519520 }
520521
521- model_call. push ( PdlBlock :: Model ( model_builder. build ( ) . unwrap ( ) ) ) ;
522+ model_call. push ( Advanced ( Model ( model_builder. build ( ) . unwrap ( ) ) ) ) ;
522523
523524 if let Some ( tools) = tools {
524525 if tools. len ( ) > 0 {
@@ -532,7 +533,7 @@ asyncio.run(invoke())
532533 closure_name. clone ( ) ,
533534 PdlBlock :: Function ( FunctionBlock {
534535 function : HashMap :: new ( ) ,
535- return_ : Box :: new ( PdlBlock :: Text ( TextBlock {
536+ return_ : Box :: new ( Advanced ( Text ( TextBlock {
536537 metadata : Some (
537538 MetadataBuilder :: default ( )
538539 . description ( format ! ( "Model call {}" , & model) )
@@ -542,10 +543,10 @@ asyncio.run(invoke())
542543 role : None ,
543544 parser : None ,
544545 text : model_call,
545- } ) ) ,
546+ } ) ) ) ,
546547 } ) ,
547548 ) ;
548- PdlBlock :: Text ( TextBlock {
549+ Advanced ( Text ( TextBlock {
549550 metadata : Some (
550551 MetadataBuilder :: default ( )
551552 . description ( "Model call wrapper" . to_string ( ) )
@@ -555,11 +556,11 @@ asyncio.run(invoke())
555556 ) ,
556557 role : None ,
557558 parser : None ,
558- text : vec ! [ PdlBlock :: Call ( CallBlock :: new( format!(
559+ text : vec ! [ Advanced ( Call ( CallBlock :: new( format!(
559560 "${{ {} }}" ,
560561 closure_name
561- ) ) ) ] ,
562- } )
562+ ) ) ) ) ] ,
563+ } ) )
563564 } ,
564565 )
565566 . collect :: < Vec < _ > > ( ) ;
@@ -574,19 +575,19 @@ asyncio.run(invoke())
574575 let mut defs = indexmap:: IndexMap :: new ( ) ;
575576 defs. insert (
576577 "pdl__tools" . to_string ( ) ,
577- PdlBlock :: Object ( ObjectBlock {
578+ Advanced ( Object ( ObjectBlock {
578579 object : tool_declarations,
579- } ) ,
580+ } ) ) ,
580581 ) ;
581582 metadata. defs ( defs) ;
582583 }
583584
584- let pdl: PdlBlock = PdlBlock :: Text ( TextBlock {
585+ let pdl: PdlBlock = Advanced ( Text ( TextBlock {
585586 metadata : Some ( metadata. build ( ) . unwrap ( ) ) ,
586587 role : None ,
587588 parser : None ,
588589 text : body,
589- } ) ;
590+ } ) ) ;
590591
591592 Ok ( pdl)
592593}
0 commit comments