@@ -12,9 +12,9 @@ use serde_json::{from_reader, json, to_string, Map, Value};
1212use tempfile:: Builder ;
1313
1414use crate :: pdl:: ast:: {
15- ArrayBlock , CallBlock , EvalsTo , FunctionBlock , ListOrString , MessageBlock , Metadata ,
15+ ArrayBlock , CallBlock , EvalsTo , FunctionBlock , ListOrString , MessageBlock , MetadataBuilder ,
1616 ModelBlock , ObjectBlock , PdlBaseType , PdlBlock , PdlOptionalType , PdlParser , PdlType ,
17- PythonCodeBlock , RepeatBlock , Role , TextBlock ,
17+ PythonCodeBlock , RepeatBlock , Role , TextBlock , TextBlockBuilder ,
1818} ;
1919use crate :: pdl:: pip:: pip_install_if_needed;
2020use crate :: pdl:: requirements:: BEEAI_FRAMEWORK ;
@@ -191,28 +191,35 @@ fn with_tools(
191191
192192fn call_tools ( model : & String , parameters : & HashMap < String , Value > ) -> PdlBlock {
193193 let repeat = PdlBlock :: Text ( TextBlock {
194- metadata : None ,
194+ metadata : Some (
195+ MetadataBuilder :: default ( )
196+ . description ( "Calling tool ${ tool.function.name }" . to_string ( ) )
197+ . build ( )
198+ . unwrap ( ) ,
199+ ) ,
195200 role : None ,
196201 parser : None ,
197- description : Some ( "Calling tool ${ tool.function.name }" . to_string ( ) ) ,
198202 text : vec ! [ PdlBlock :: Model (
199203 ModelBlock :: new( model. as_str( ) )
200204 . parameters( & strip_nulls( parameters) )
201205 . input( PdlBlock :: Array ( ArrayBlock {
202206 array: vec![ PdlBlock :: Message ( MessageBlock {
207+ metadata: None ,
203208 role: Role :: Tool ,
204- description : None ,
209+ defsite : None ,
205210 name: Some ( "${ tool.function.name }" . to_string( ) ) ,
206211 tool_call_id: Some ( "${ tool.id }" . to_string( ) ) ,
207212 content: Box :: new( PdlBlock :: Call ( CallBlock {
208- metadata: Some ( Metadata {
209- def: None ,
210- defs: json_loads(
211- & "args" ,
212- & "pdl__args" ,
213- & "${ tool.function.arguments }" ,
214- ) ,
215- } ) ,
213+ metadata: Some (
214+ MetadataBuilder :: default ( )
215+ . defs( json_loads(
216+ & "args" ,
217+ & "pdl__args" ,
218+ & "${ tool.function.arguments }" ,
219+ ) )
220+ . build( )
221+ . unwrap( ) ,
222+ ) ,
216223 call: EvalsTo :: Jinja ( "${ pdl__tools[tool.function.name] }" . to_string( ) ) , // look up tool in tool_declarations def (see below)
217224 args: Some ( "${ args }" . into( ) ) , // invoke with arguments as specified by the model
218225 } ) ) ,
@@ -239,21 +246,28 @@ fn json_loads(
239246 outer_name : & str ,
240247 inner_name : & str ,
241248 value : & str ,
242- ) -> Option < indexmap:: IndexMap < String , PdlBlock > > {
249+ ) -> indexmap:: IndexMap < String , PdlBlock > {
243250 let mut m = indexmap:: IndexMap :: new ( ) ;
244251 m. insert (
245252 outer_name. to_owned ( ) ,
246253 PdlBlock :: Text (
247- TextBlock :: new ( vec ! [ PdlBlock :: String ( format!(
248- "{{\" {}\" : {}}}" ,
249- inner_name, value
250- ) ) ] )
251- . description ( format ! ( "Parsing json for {}={}" , inner_name, value) )
252- . parser ( PdlParser :: Json )
253- . build ( ) ,
254+ TextBlockBuilder :: default ( )
255+ . text ( vec ! [ PdlBlock :: String ( format!(
256+ "{{\" {}\" : {}}}" ,
257+ inner_name, value
258+ ) ) ] )
259+ . metadata (
260+ MetadataBuilder :: default ( )
261+ . description ( format ! ( "Parsing json for {}={}" , inner_name, value) )
262+ . build ( )
263+ . unwrap ( ) ,
264+ )
265+ . parser ( PdlParser :: Json )
266+ . build ( )
267+ . unwrap ( ) ,
254268 ) ,
255269 ) ;
256- Some ( m )
270+ m
257271}
258272
259273fn json_schema_type_to_pdl_type ( spec : & Value ) -> PdlType {
@@ -465,9 +479,13 @@ asyncio.run(invoke())
465479 model_call. push ( PdlBlock :: Text ( TextBlock {
466480 role : Some ( Role :: System ) ,
467481 text : vec ! [ PdlBlock :: String ( instructions) ] ,
468- metadata : None ,
482+ metadata : Some (
483+ MetadataBuilder :: default ( )
484+ . description ( "Model instructions" . to_string ( ) )
485+ . build ( )
486+ . unwrap ( ) ,
487+ ) ,
469488 parser : None ,
470- description : Some ( "Model instructions" . into ( ) ) ,
471489 } ) ) ;
472490 }
473491
@@ -481,12 +499,15 @@ asyncio.run(invoke())
481499 } ;
482500
483501 model_call. push ( PdlBlock :: Model ( ModelBlock {
484- metadata : None ,
502+ metadata : Some (
503+ MetadataBuilder :: default ( )
504+ . description ( description)
505+ . build ( )
506+ . unwrap ( ) ,
507+ ) ,
485508 input : None ,
486- description : Some ( description) ,
487509 model : model. clone ( ) ,
488510 model_response : model_response,
489- pdl_result : None ,
490511 pdl_usage : None ,
491512 parameters : Some ( with_tools ( & tools, & parameters. state . dict ) ) ,
492513 } ) ) ;
@@ -504,22 +525,28 @@ asyncio.run(invoke())
504525 PdlBlock :: Function ( FunctionBlock {
505526 function : HashMap :: new ( ) ,
506527 return_ : Box :: new ( PdlBlock :: Text ( TextBlock {
507- metadata : None ,
528+ metadata : Some (
529+ MetadataBuilder :: default ( )
530+ . description ( format ! ( "Model call {}" , & model) )
531+ . build ( )
532+ . unwrap ( ) ,
533+ ) ,
508534 role : None ,
509535 parser : None ,
510- description : Some ( format ! ( "Model call {}" , & model) ) ,
511536 text : model_call,
512537 } ) ) ,
513538 } ) ,
514539 ) ;
515540 PdlBlock :: Text ( TextBlock {
516- metadata : Some ( Metadata {
517- def : None ,
518- defs : Some ( defs) ,
519- } ) ,
541+ metadata : Some (
542+ MetadataBuilder :: default ( )
543+ . description ( "Model call wrapper" . to_string ( ) )
544+ . defs ( defs)
545+ . build ( )
546+ . unwrap ( ) ,
547+ ) ,
520548 role : None ,
521549 parser : None ,
522- description : Some ( "Model call wrapper" . to_string ( ) ) ,
523550 text : vec ! [ PdlBlock :: Call ( CallBlock :: new( format!(
524551 "${{ {} }}" ,
525552 closure_name
@@ -533,23 +560,21 @@ asyncio.run(invoke())
533560 . flat_map ( |( a, b) | [ a, b] )
534561 . collect :: < Vec < _ > > ( ) ;
535562
563+ let mut metadata = MetadataBuilder :: default ( ) ;
564+ metadata. description ( bee. workflow . workflow . name ) ;
565+ if tool_declarations. len ( ) > 0 {
566+ let mut defs = indexmap:: IndexMap :: new ( ) ;
567+ defs. insert (
568+ "pdl__tools" . to_string ( ) ,
569+ PdlBlock :: Object ( ObjectBlock {
570+ object : tool_declarations,
571+ } ) ,
572+ ) ;
573+ metadata. defs ( defs) ;
574+ }
575+
536576 let pdl: PdlBlock = PdlBlock :: Text ( TextBlock {
537- metadata : if tool_declarations. len ( ) == 0 {
538- None
539- } else {
540- let mut m = indexmap:: IndexMap :: new ( ) ;
541- m. insert (
542- "pdl__tools" . to_string ( ) ,
543- PdlBlock :: Object ( ObjectBlock {
544- object : tool_declarations,
545- } ) ,
546- ) ;
547- Some ( Metadata {
548- def : None ,
549- defs : Some ( m) ,
550- } )
551- } ,
552- description : Some ( bee. workflow . workflow . name ) ,
577+ metadata : Some ( metadata. build ( ) . unwrap ( ) ) ,
553578 role : None ,
554579 parser : None ,
555580 text : body,
0 commit comments