From 5320960f3f9001bb839b40c40644fa65ea66952e Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 22 Apr 2025 19:07:38 +0000 Subject: [PATCH] docs: add flow plot visualization example to documentation (#2668) Co-Authored-By: Joe Moura --- docs/concepts/flows.mdx | 3 +++ docs/images/flow_plot_example.png | Bin 0 -> 31240 bytes 2 files changed, 3 insertions(+) create mode 100644 docs/images/flow_plot_example.png diff --git a/docs/concepts/flows.mdx b/docs/concepts/flows.mdx index b7793c60c..82fdd906e 100644 --- a/docs/concepts/flows.mdx +++ b/docs/concepts/flows.mdx @@ -790,6 +790,9 @@ Visualizing your AI workflows can provide valuable insights into the structure a Plots in CrewAI are graphical representations of your AI workflows. They display the various tasks, their connections, and the flow of data between them. This visualization helps in understanding the sequence of operations, identifying bottlenecks, and ensuring that the workflow logic aligns with your expectations. +![Example of a Flow Plot](/images/flow_plot_example.png) +*An example visualization of a simple flow with start method, sequential steps, and directional execution.* + ### How to Generate a Plot CrewAI provides two convenient methods to generate plots of your flows: diff --git a/docs/images/flow_plot_example.png b/docs/images/flow_plot_example.png new file mode 100644 index 0000000000000000000000000000000000000000..55bf94061eabca58ded3ca508e073f40df6ed032 GIT binary patch literal 31240 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