#graph #graph-node #inference #dag #async-task

inference_graph

通过每个节点仅引用其自身的输入来构建异步任务图

1 个不稳定发布

0.1.0 2022年11月14日

#42#dag

MIT 许可证

11KB
123

inference_graph 提供了一些主要项目

  • 一个 Graph 定义。
  • 一种通过 graph.stage_nodeGraph 添加 Node 的方法。
  • 一种使用某些输入执行 Graph 的方法。
  • 一个 wrap! 宏,将您的异步函数转换为与操作兼容的函数。

节点还需要指定一个 op,这几乎是一个 async fn(Vec<String>) -> String,但由于 Rust 类型别名不喜欢异步函数,所以并不是 完全 那种类型。幸运的是,我们还提供了一个 wrap!,它允许您传入一个 async fn(Vec<String>) -> String 并将其转换为所需的确切类型。

创建一个图,添加一些使用操作来连接传递给参数的字符串的节点,并检索输出可能看起来像这样

use inference_graph::graph::Graph;
use inference_graph::wrap;

async fn concat(x: Vec<String>) -> String {
  x.concat()
}

#[tokio::main]
async fn main() {
  let mut graph = Graph::default();
  graph.stage_node("A".into(), vec!["entrypoint".into()], wrap!(concat));
  graph.stage_node("B".into(), vec!["entrypoint".into()], wrap!(concat));
  graph.stage_node("C".into(), vec!["A".into(), "B".into()], wrap!(concat));
  let output = graph.run("hubba".into(), "C".into()).await;
  assert_eq!(output.unwrap(), "hubbahubba".to_string());
}

依赖关系

~2.8–4.5MB
~72K SLoC