ask.py / scripts /draw_flow.py
LeetTools's picture
Upload folder using huggingface_hub
b377d2b verified
# Re-importing necessary libraries and recreating the flowchart due to a reset.
import matplotlib.patches as patches
import matplotlib.pyplot as plt
# Create a figure
fig, ax = plt.subplots(figsize=(10, 14))
# Helper function to create a box
def create_box(text, x, y, width=2.5, height=0.8, color="lightblue"):
ax.add_patch(
patches.Rectangle(
(x, y), width, height, edgecolor="black", facecolor=color, lw=1.5
)
)
ax.text(x + width / 2, y + height / 2, text, ha="center", va="center", fontsize=10)
# Helper function to create an arrow
def create_arrow(x_start, y_start, x_end, y_end):
ax.annotate(
"",
xy=(x_end, y_end),
xytext=(x_start, y_start),
arrowprops=dict(facecolor="black", shrink=0.05, width=1.5, headwidth=8),
)
# Draw the flowchart components
create_box("Start", 4, 12)
create_box("Query Input", 4, 10.5)
create_box("Mode Selection", 4, 9)
create_box("Search Mode", 1.5, 7.5)
create_box("Local Mode", 6.5, 7.5)
create_box("Search Google", 1.5, 6)
create_box("Crawl and Scrape Results", 1.5, 4.5)
create_box("Use Local Files", 6.5, 6)
create_box("Extract Text Content", 6.5, 4.5)
create_box("Chunk Text Content", 4, 3)
create_box("Save to VectorDB", 4, 1.5)
create_box("Perform Hybrid Search", 4, 0)
create_box("[Optional] Re-rank Results", 4, -1.5)
create_box("Use Top Chunks as Context", 4, -3)
create_box("Generate Answer with References", 4, -4.5)
create_box("Output Answer", 4, -6)
# Draw the arrows
create_arrow(5.25, 12, 5.25, 11.3)
create_arrow(5.25, 10.5, 5.25, 9.8)
create_arrow(5.25, 9, 3.5, 8.3) # to Search Mode
create_arrow(5.25, 9, 6.5, 8.3) # to Local Mode
create_arrow(2.75, 7.5, 2.75, 6.8) # to Search Google
create_arrow(7.75, 7.5, 7.75, 6.8) # to Use Local Files
create_arrow(2.75, 6, 2.75, 5.3) # to Crawl and Scrape Results
create_arrow(7.75, 6, 7.75, 5.3) # to Extract Text Content
create_arrow(2.75, 4.5, 4, 3.8) # to Chunk Text Content
create_arrow(7.75, 4.5, 6, 3.8) # to Chunk Text Content
create_arrow(5.25, 3, 5.25, 2.3) # to Save to VectorDB
create_arrow(5.25, 1.5, 5.25, 0.8) # to Perform Hybrid Search
create_arrow(5.25, 0, 5.25, -0.8) # to Optional Re-rank Results
create_arrow(5.25, -1.5, 5.25, -2.3) # to Use Top Chunks as Context
create_arrow(5.25, -3, 5.25, -3.8) # to Generate Answer with References
create_arrow(5.25, -4.5, 5.25, -5.3) # to Output Answer
# Final touches
ax.axis("off")
plt.title("Flowchart of Query Processing System", fontsize=14)
plt.show()