:orphan: .. _advanced_examples: Advanced Examples ################# .. contents:: Table of Contents Preface ******* As advanced examples, we are going to use the following tutorials from LangGraph: * `Agent Architectures - Multi-Agent Network `_ * `Agent Architectures - Multi-Agent Supervisor `_ * `Agent Architectures - Hierarchical Agent Teams `_ We are also not going to focus on a basic usage - the main focus is going to be on :class:`langgraph_compare.jsons_to_csv.GraphConfig`. If You want to check basic usage, refer to: :ref:`getting_started`. Multi-Agent Network ******************* This example is based on `Agent Architectures - Multi-Agent Network `_ and expands on :ref:`exporting_jsons_to_csv` from :ref:`getting_started`. .. figure:: img/network.png :width: 800 `Multi-Agent Network diagram - LangGraph Documentation `_ The premise of this example is to show that :code:`GraphConfig` can have multiple nodes. In case of this example - we will have 2 nodes - :code:`researcher`, :code:`chart_generator`. **Example:** .. code-block:: python # Needed imports from langgraph_compare.experiment import create_experiment from langgraph_compare.jsons_to_csv import GraphConfig, export_jsons_to_csv # Init for experiment project structure exp = create_experiment("test") # We can add multiple nodes! graph_config = GraphConfig( nodes=['researcher','chart_generator'] ) # You can provide You own file name as an optional attribute csv_path. # Otherwise it will use the default file name - "csv_output.csv" export_jsons_to_csv(exp, graph_config) Multi-Agent Supervisor ********************** This example is based on `Agent Architectures - Multi-Agent Supervisor `_. It introduces the concept of a :code:`Supervisor` - a node that controls other nodes. .. figure:: img/supervisor.png :width: 800 `Multi-Agent Supervisor diagram - LangGraph Documentation `_ In this example, we will introduce :class:`langgraph_compare.jsons_to_csv.SupervisorConfig`. It will supervise the graph - working more or less work the same as :code:`GraphConfig`. The concept of supervisors will make more sense in :ref:`hierarchical_agent_teams`. **Example:** .. code-block:: python # Needed imports from langgraph_compare.experiment import create_experiment from langgraph_compare.jsons_to_csv import GraphConfig, SupervisorConfig, export_jsons_to_csv # Init for experiment project structure exp = create_experiment("test") # Supervisor for graph supervisor = SupervisorConfig( name="supervisor", supervisor_type="graph" ) # Config with supervisor and additional nodes graph_config = GraphConfig( supervisors=[supervisor], nodes=["Researcher", "Coder"] ) # You can provide You own file name as an optional attribute csv_path. # Otherwise it will use the default file name - "csv_output.csv" export_jsons_to_csv(exp, graph_config) .. _hierarchical_agent_teams: Hierarchical Agent Teams ************************ This example is based on `Agent Architectures - Hierarchical Agent Teams `_. It introduces the concept of a :code:`SubgraphConfig` - a node that controls other nodes. .. figure:: img/hierarchical.png :width: 800 `Hierarchical Agent Teams diagram - LangGraph Documentation `_ In this example, we have a :code:`Graph` that is build from two :code:`SubGraphs`. Those graphs are controlled by a :code:`Supervisor` - that routes traffic to subgraphs. Furthermore, every graph has its own supervisor - that controls what is happening inside of it. IMPORTANT: Be sure to call supervisors with different names - so you can differentiate between them! Calling supervisors with the same names WILL brake the parser. **Example:** .. code-block:: python # Needed imports from langgraph_compare.experiment import create_experiment from langgraph_compare.jsons_to_csv import GraphConfig, SubgraphConfig, SupervisorConfig, export_jsons_to_csv # Init for experiment project structure exp = create_experiment("test") # Config for entire graph supervisor graph_supervisor = SupervisorConfig( name="graph_supervisor", supervisor_type="graph" ) # Config for Research Team subgraph supervisor research_supervisor = SupervisorConfig( name="research_supervisor", supervisor_type="subgraph" ) # Config for Paper Writing Team subgraph supervisor paper_supervisor = SupervisorConfig( name="paper_supervisor", supervisor_type="subgraph" ) # Config for Research Team subgraph research_team = SubgraphConfig( name="ResearchTeam", nodes=["Search", "WebScraper"], supervisor=research_supervisor ) # Config for Paper Writing Team subgraph paper_team = SubgraphConfig( name="PaperWritingTeam", nodes=["DocWriter", "NoteTaker","ChartGenerator"], supervisor=paper_supervisor ) # Config for complete graph graph_config = GraphConfig( supervisors=[graph_supervisor], subgraphs=[research_team, paper_supervisor] ) # You can provide You own file name as an optional attribute csv_path. # Otherwise it will use the default file name - "csv_output.csv" export_jsons_to_csv(exp, graph_config) Notice how: * every supervisor has a config (both graph and subgraphs) - but they have a different :code:`supervisor_type`. * every graph has a config (both graph and subgraphs) - but they are using different classes: :code:`GraphConfig` or :code:`SubgraphConfig` * :code:`GraphConfig` doesn't have :code:`nodes` defined - since they are being taken care of by subgraphs.