Spaces:
Sleeping
Sleeping
@startuml Architecture Diagram | |
' Define color variables | |
!define CANVAS_COLOR #FAEBD7 | |
!define DEFAULT_NODE_COLOR #Gold | |
!define TODO_COLOR #FireBrick | |
!define ARROW_COLOR #666666 | |
!define BORDER_COLOR #999999 | |
!define TOOLBOX_MATH_COLOR #LightBlue | |
!define TOOLBOX_WEBSEARCH_COLOR #LightGreen | |
!define TOOLBOX_ENCRYPTION_COLOR #PaleVioletRed | |
!define POWERS_ARROW_COLOR #4285F4 | |
!define TRIGGER_ARROW_COLOR #OrangeRed | |
!define FINAL_ANSWER_COLOR #Orange | |
' Style settings | |
skinparam handwritten true | |
skinparam backgroundColor white | |
skinparam componentStyle uml2 | |
skinparam defaultFontName Arial | |
skinparam arrowColor ARROW_COLOR | |
skinparam componentBorderColor BORDER_COLOR | |
skinparam component { | |
BackgroundColor DEFAULT_NODE_COLOR | |
} | |
' Custom style for toolbox functions | |
skinparam label { | |
FontSize 10 | |
FontColor black | |
} | |
' Components | |
package "app.py" { | |
[UI] as UI | |
[Application] as Application | |
} | |
package "alfred.py" { | |
[Alfred] as Alfred | |
[GraphBuilder] as GraphBuilder | |
} | |
package "management.py" { | |
[Assistant] as Assistant | |
[Manager] as Manager | |
} | |
' Relationships | |
UI -d-> Application | |
Application -d-> Alfred | |
Alfred -d-> GraphBuilder | |
GraphBuilder -d-> Assistant | |
GraphBuilder -d-> Manager | |
' LangGraph Flow and LlamaIndex Flow positioning | |
component "LangGraph Flow" as LangGraphFlow CANVAS_COLOR { | |
[Query] as Query | |
[Assistant Node] as AssistantNode | |
[Manager Node] as ManagerNode | |
[<b>Final Answer</b>] as FinalAnswer FINAL_ANSWER_COLOR | |
Query -r-> AssistantNode | |
AssistantNode -r-> ManagerNode : requests | |
ManagerNode -l-> AssistantNode : solution | |
ManagerNode -d-> break_up_recursion | |
break_up_recursion -u-> ManagerNode | |
AssistantNode -d-> FinalAnswer : problem solved | |
} | |
' Position LlamaIndex Flow with solver.py and toolbox.py - more compact | |
component "LlamaIndex Flow" as LlamaIndexFlow CANVAS_COLOR { | |
package "solver.py" { | |
[Solver] as Solver TODO_COLOR | |
[Summarizer] as Summarizer | |
[Researcher] as Researcher TODO_COLOR | |
[EncryptionExpert] as EncryptionExpert TODO_COLOR | |
[MathExpert] as MathExpert TODO_COLOR | |
[Reasoner] as Reasoner TODO_COLOR | |
[ImageHandler] as ImageHandler TODO_COLOR | |
[VideoHandler] as VideoHandler TODO_COLOR | |
} | |
package "toolbox.py" { | |
node Math TOOLBOX_MATH_COLOR [ | |
<b>Math</b> | |
---- | |
symbolic_calc | |
____ | |
unit_converter | |
] | |
node WebSearch TOOLBOX_WEBSEARCH_COLOR [ | |
<b>WebSearch</b> | |
---- | |
duck_duck_go_tools | |
] | |
node Encryption TOOLBOX_ENCRYPTION_COLOR [ | |
<b>Encryption</b> | |
---- | |
<font color=FireBrick><b>ascii_encode/decode</b></font> | |
____ | |
<font color=FireBrick><b>chr_to_int/int_to_chr</b></font> | |
____ | |
base64_encode/decode | |
____ | |
caesar_cipher_encode/decode/<font color=FireBrick><b>brute_force</b></font> | |
____ | |
reverse_string | |
] | |
} | |
Solver -r-> Summarizer | |
Solver -d-> Researcher | |
Solver -d-> EncryptionExpert | |
Solver -d-> MathExpert | |
Solver -d-> Reasoner | |
Solver -d-> ImageHandler | |
Solver -d-> VideoHandler | |
Researcher -d-> WebSearch | |
MathExpert -d-> Math | |
EncryptionExpert -d-> Encryption | |
} | |
' Adjust the label position to avoid overlap | |
GraphBuilder -d-> LangGraphFlow : builds | |
' Curved connections from Manager to Solver/Summarizer | |
Manager -d-> Solver | |
Manager -d-> Summarizer | |
' Bidirectional connection between ManagerNode and Solver | |
ManagerNode -r-> Solver : requests | |
Solver -l-> ManagerNode : provides solution | |
' Agents powering the Nodes (dashed, blue color) | |
Assistant -[POWERS_ARROW_COLOR,dashed]d-> AssistantNode : powers | |
Manager -[POWERS_ARROW_COLOR,dashed]d-> ManagerNode : powers | |
' Adding a direct connection from Alfred to Query | |
Alfred -[TRIGGER_ARROW_COLOR]d..> Query | |
@enduml | |