Skip to content

Commit ef27624

Browse files
committed
feat: continue to flesh out block metadata structure in rust
Signed-off-by: Nick Mitchell <[email protected]>
1 parent ee0b5c6 commit ef27624

File tree

5 files changed

+191
-157
lines changed

5 files changed

+191
-157
lines changed

pdl-live-react/src-tauri/Cargo.lock

Lines changed: 32 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pdl-live-react/src-tauri/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ indexmap = { version = "2.9.0", features = ["serde"] }
4646
rustpython-stdlib = { version = "0.4.0", features = ["zlib"] }
4747
schemars = "0.8.22"
4848
fs4 = "0.13.1"
49+
derive_builder = "0.20.2"
4950

5051
[target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies]
5152
tauri-plugin-cli = "2"

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

Lines changed: 75 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ 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, 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
};
1919
use crate::pdl::pip::pip_install_if_needed;
2020
use crate::pdl::requirements::BEEAI_FRAMEWORK;
@@ -191,28 +191,35 @@ fn with_tools(
191191

192192
fn 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

259273
fn 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

Comments
 (0)