digraph root { graph [_draw_="c 9 -#fffffe00 C 7 -#f8f8f2 P 4 0 0 0 1249 937 1249 937 0 ", arrowsize=0.6, bb="0,0,937,1249", bgcolor="#f8f8f2", charset="UTF-8", clusterize=true, color="#282a36", fontcolor="#44475a", fontname=Agave, margin=4.3, overlap=voronoi, pencolor="#282a36", penwidth=0.8, rankdir=LR, shape=box, splines=spline, style=rounded, truecolor=true, xdotversion=1.7 ]; node [arrowsize=0.6, bgcolor="#f8f8f2", color="#282a36", fontcolor="#44475a", fontname=Agave, label="\N", margin=4.3, overlap=voronoi, pencolor="#282a36", penwidth=0.8, shape=box, splines=true, style=rounded, truecolor=true ]; edge [arrowsize=0.6, bgcolor="#f8f8f2", color="#282a36", fontcolor="#44475a", fontname=Agave, fontsize=6.8, margin=4.3, overlap=voronoi, pencolor="#282a36", penwidth=0.8, shape=box, splines=true, style=rounded, truecolor=true ]; subgraph G_cc_0 { graph [arrowsize=0.6, bb="", bgcolor="#f8f8f2", charset="UTF-8", clusterize=true, color="#282a36", fontcolor="#44475a", fontname=Agave, margin=4.3, overlap=voronoi, pencolor="#282a36", penwidth=0.8, rankdir=LR, shape=box, splines=spline, style=rounded, truecolor=true ]; node [arrowsize=0.6, bgcolor="#f8f8f2", color="#282a36", fillcolor="", fontcolor="#44475a", fontname=Agave, fontsize="", height="", href="", label="\N", margin=4.3, overlap=voronoi, pencolor="#282a36", penwidth=0.8, pos="", shape=box, splines=true, style=rounded, truecolor=true, width="" ]; edge [arrowhead="", arrowsize=0.6, arrowtail="", bgcolor="#f8f8f2", color="#282a36", constrained="", dir="", fontcolor="#44475a", fontname=Agave, fontsize=6.8, href="", margin=4.3, overlap=voronoi, pencolor="#282a36", penwidth=0.8, pos="", reverse="", shape=box, splines=true, style=rounded, tooltip="", truecolor=true, type="" ]; LLM_Tagger [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#7ef7ee P 4 383 793 0 793 0 734 383 734 ", _ldraw_="F 19 5 -Agave c 7 -#44475a t 1 T 1.5 777.3 -1 98 10 -LLM Tagger F 19 5 -Agave c 7 -#44475a t 0 T 1.5 758.3 -1 381 39 -Document clustering \ and analysis using F 19 5 -Agave c 7 -#44475a T 99 739.3 -1 186 19 -embeddings and LLM. ", fillcolor="#7EF7EE", fontsize=19, height=0.81944, href="#LLM_Tagger", label=<
LLM Tagger
Document clustering and analysis using
embeddings and LLM.
>, pos="191.5,763.5", shape=plain, style=filled, width=5.3194]; Quick_Start [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#7ef7ee P 4 636 1249 449 1249 449 1086 636 1086 ", _ldraw_="F 9.5 5 -Agave c 7 -#44475a t 1 T 450.5 1240.9 -1 50 11 -Quick Start F 9.5 5 -Agave c 7 -#ff79c6 t 0 T 450.5 1221.9 -1 149 34 - cd \ docker/llm-tagger # step 1: F 9.5 5 -Agave c 7 -#ff79c6 T 450.5 1212.4 -1 145 32 -cache embeddings (always first) F 9.5 5 -Agave \ c 7 -#ff79c6 T 450.5 1202.9 -1 167 37 -./llm-tagger.sh init total.ndjson # F 9.5 5 -Agave c 7 -#ff79c6 T 450.5 1193.4 -1 181 40 \ -step 2: cluster and tag ./llm-tagger.sh F 9.5 5 -Agave c 7 -#ff79c6 T 450.5 1183.9 -1 176 39 -educe-tags subset.ndjson output.ndjson \ F 9.5 5 -Agave c 7 -#ff79c6 T 450.5 1174.4 -1 172 38 -100 # optional: hierarchical tagging F 9.5 5 -Agave c 7 -#ff79c6 T 450.5 \ 1164.9 -1 131 29 -./llm-tagger.sh hierarchical F 9.5 5 -Agave c 7 -#ff79c6 T 450.5 1155.4 -1 149 33 -level1.ndjson level2.ndjson \ 3 # F 9.5 5 -Agave c 7 -#ff79c6 T 450.5 1145.9 -1 185 41 -optional: analysis tools ./llm-tagger.sh F 9.5 5 -Agave c 7 -#ff79c6 \ T 450.5 1136.4 -1 136 30 -search data.ndjson 'query' 10 F 9.5 5 -Agave c 7 -#ff79c6 T 450.5 1126.9 -1 185 41 -./llm-tagger.sh similar \ data.ndjson 0.95 F 9.5 5 -Agave c 7 -#ff79c6 T 450.5 1117.4 -1 136 30 -./llm-tagger.sh custom-prompt F 9.5 5 -Agave c 7 -#ff79c6 \ T 450.5 1107.9 -1 176 39 -tagged.ndjson 'prompt' ./llm-tagger.sh F 9.5 5 -Agave c 7 -#ff79c6 T 450.5 1098.4 -1 109 24 -visualize \ tagged.ndjson F 9.5 5 -Agave c 7 -#ff79c6 T 450.5 1088.9 -1 55 13 -output.html  ", fillcolor="#7EF7EE", fontsize=9.5, height=2.2639, href="#Quick_Start", label=<
Quick Start

 cd docker/llm-tagger # step 1:
cache embeddings (always first)
./llm-tagger.sh init total.ndjson #
step 2: cluster and tag ./llm-tagger.sh
educe-tags subset.ndjson output.ndjson
100 # optional: hierarchical tagging
./llm-tagger.sh hierarchical
level1.ndjson level2.ndjson 3 #
optional: analysis tools ./llm-tagger.sh
search data.ndjson 'query' 10
./llm-tagger.sh similar data.ndjson 0.95
./llm-tagger.sh custom-prompt
tagged.ndjson 'prompt' ./llm-tagger.sh
visualize tagged.ndjson
output.html 

>, pos="542.5,1167.5", shape=plain, style=filled, width=2.5972]; LLM_Tagger -> Quick_Start [_draw_="S 17 -setlinewidth(0.8) S 6 -dashed c 7 -#282a36 B 7 210.35 792.88 245.18 851.36 328.15 983.32 419.5 1076 426.11 1082.7 433.24 1089.3 \ 440.62 1095.7 ", _hdraw_="S 17 -setlinewidth(0.8) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 9 448.71 1102.6 438.18 1099.53 444.91 1099.36 441.1 1096.11 441.1 \ 1096.11 441.1 1096.11 444.91 1099.36 444.02 1092.69 448.71 1102.6 ", arrowhead=open, arrowsize=1.0, href="#LLM_Tagger👉 Quick_Start", pos="e,448.71,1102.6 210.35,792.88 245.18,851.36 328.15,983.32 419.5,1076 426.11,1082.7 433.24,1089.3 440.62,1095.7", reverse=false, style=dashed, tooltip="-> isAnInputTo", type=isAnInputTo]; All_Commands [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#7ef7ee P 4 665.5 1067.5 419.5 1067.5 419.5 907.5 665.5 907.5 ", _ldraw_="F 9.5 5 -Agave c 7 -#44475a t 1 T 420.5 1059.9 -1 55 12 -All Commands S 5 -solid c 7 -#282a36 p 4 422.5 1036.5 422.5 1052.5 496.5 \ 1052.5 496.5 1036.5 F 9.5 5 -Agave c 7 -#44475a t 0 T 443.5 1041.9 -1 32 7 -Command S 5 -solid c 7 -#282a36 p 4 498.5 1036.5 498.5 \ 1052.5 662.5 1052.5 662.5 1036.5 F 9.5 5 -Agave c 7 -#44475a T 564.5 1041.9 -1 32 7 -Purpose S 5 -solid c 7 -#282a36 p 4 422.5 1018.5 \ 422.5 1034.5 496.5 1034.5 496.5 1018.5 F 9.5 5 -Agave c 7 -#ff79c6 T 445.5 1023.9 -1 28 8 - init  S 5 -solid c 7 -#282a36 p 4 \ 498.5 1018.5 498.5 1034.5 662.5 1034.5 662.5 1018.5 F 9.5 5 -Agave c 7 -#44475a T 501.5 1023.9 -1 158 35 -Cache embeddings from \ total dataset S 5 -solid c 7 -#282a36 p 4 422.5 1000.5 422.5 1016.5 496.5 1016.5 496.5 1000.5 F 9.5 5 -Agave c 7 -#ff79c6 T 432 \ 1005.9 -1 55 14 - educe-tags  S 5 -solid c 7 -#282a36 p 4 498.5 1000.5 498.5 1016.5 662.5 1016.5 662.5 1000.5 F 9.5 5 -Agave c \ 7 -#44475a T 508 1005.9 -1 145 32 -Cluster subset and generate tags S 5 -solid c 7 -#282a36 p 4 422.5 982.5 422.5 998.5 496.5 998.5 \ 496.5 982.5 F 9.5 5 -Agave c 7 -#ff79c6 T 427.5 987.9 -1 64 16 - hierarchical  S 5 -solid c 7 -#282a36 p 4 498.5 982.5 498.5 998.5 \ 662.5 998.5 662.5 982.5 F 9.5 5 -Agave c 7 -#44475a T 524 987.9 -1 113 25 -Create two-level taxonomy S 5 -solid c 7 -#282a36 p 4 \ 422.5 964.5 422.5 980.5 496.5 980.5 496.5 964.5 F 9.5 5 -Agave c 7 -#ff79c6 T 441 969.9 -1 37 10 - search  S 5 -solid c 7 -#282a36 \ p 4 498.5 964.5 498.5 980.5 662.5 980.5 662.5 964.5 F 9.5 5 -Agave c 7 -#44475a T 526 969.9 -1 109 24 -Semantic search by query \ S 5 -solid c 7 -#282a36 p 4 422.5 946.5 422.5 962.5 496.5 962.5 496.5 946.5 F 9.5 5 -Agave c 7 -#ff79c6 T 439 951.9 -1 41 11 - similar  \ S 5 -solid c 7 -#282a36 p 4 498.5 946.5 498.5 962.5 662.5 962.5 662.5 946.5 F 9.5 5 -Agave c 7 -#44475a T 508 951.9 -1 145 32 -Find \ duplicate/similar documents S 5 -solid c 7 -#282a36 p 4 422.5 928.5 422.5 944.5 496.5 944.5 496.5 928.5 F 9.5 5 -Agave c 7 -#ff79c6 \ T 425.5 933.9 -1 68 17 - custom-prompt  S 5 -solid c 7 -#282a36 p 4 498.5 928.5 498.5 944.5 662.5 944.5 662.5 928.5 F 9.5 5 -Agave \ c 7 -#44475a T 508 933.9 -1 145 32 -Ask custom questions to clusters S 5 -solid c 7 -#282a36 p 4 422.5 910.5 422.5 926.5 496.5 926.5 \ 496.5 910.5 F 9.5 5 -Agave c 7 -#ff79c6 T 434.5 915.9 -1 50 13 - visualize  S 5 -solid c 7 -#282a36 p 4 498.5 910.5 498.5 926.5 \ 662.5 926.5 662.5 910.5 F 9.5 5 -Agave c 7 -#44475a T 517 915.9 -1 127 28 -Interactive 2D visualization ", fillcolor="#7EF7EE", fontsize=9.5, height=2.2222, href="#All_Commands", label=<
All Commands
CommandPurpose
 init Cache embeddings from total dataset
 educe-tags Cluster subset and generate tags
 hierarchical Create two-level taxonomy
 search Semantic search by query
 similar Find duplicate/similar documents
 custom-prompt Ask custom questions to clusters
 visualize Interactive 2D visualization
>, pos="542.5,987.5", shape=plain, style=filled, width=3.4167]; LLM_Tagger -> All_Commands [_draw_="S 17 -setlinewidth(0.8) S 6 -dashed c 7 -#282a36 B 4 238.92 792.51 282.61 820.6 350.45 864.2 410.83 903.01 ", _hdraw_="S 17 -setlinewidth(0.8) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 9 419.3 908.46 408.46 906.83 415.1 905.75 410.89 903.05 410.89 903.05 \ 410.89 903.05 415.1 905.75 413.33 899.26 419.3 908.46 ", arrowhead=open, arrowsize=1.0, href="#LLM_Tagger👉 All_Commands", pos="e,419.3,908.46 238.92,792.51 282.61,820.6 350.45,864.2 410.83,903.01", reverse=false, style=dashed, tooltip="-> isAnInputTo", type=isAnInputTo]; Workflows [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#eee7de P 4 564 889.5 521 889.5 521 877.5 564 877.5 ", _ldraw_="F 9.5 5 -Agave c 7 -#44475a t 1 T 522.5 881.9 -1 41 9 -Workflows ", fillcolor="#EEE7DE", fontsize=9.5, height=0.16667, href="#Workflows", label=<
Workflows
>, pos="542.5,883.5", shape=plain, style=filled, width=0.59722]; LLM_Tagger -> Workflows [_draw_="S 17 -setlinewidth(0.8) S 6 -dashed c 7 -#282a36 B 4 278.7 792.51 355.82 819.06 464.45 856.47 514.42 873.67 ", _hdraw_="S 17 -setlinewidth(0.8) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 9 523.88 876.93 512.96 877.93 519.15 875.3 514.43 873.67 514.43 873.67 \ 514.43 873.67 519.15 875.3 515.89 869.42 523.88 876.93 ", arrowhead=open, arrowsize=1.0, href="#LLM_Tagger👉 Workflows", pos="e,523.88,876.93 278.7,792.51 355.82,819.06 464.45,856.47 514.42,873.67", reverse=false, style=dashed, tooltip="-> isAnInputTo", type=isAnInputTo]; Performance_Changes [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#ffffff P 4 586.5 769.5 498.5 769.5 498.5 757.5 586.5 757.5 ", _ldraw_="F 9.5 5 -Agave c 7 -#44475a t 1 T 499.5 761.9 -1 86 19 -Performance Changes ", fillcolor="#FFFFFF", fontsize=9.5, height=0.16667, href="#Performance_Changes", label=<
Performance Changes
>, pos="542.5,763.5", shape=plain, style=filled, width=1.2222]; LLM_Tagger -> Performance_Changes [_draw_="S 15 -setlinewidth(2) S 7 -tapered c 9 -#fffffe00 C 7 -#282a36 P 42 395.68 763 401.49 763.06 407.27 763.11 413.01 763.17 418.69 \ 763.22 424.33 763.28 429.91 763.33 435.42 763.39 440.86 763.44 446.22 763.49 451.5 763.54 456.7 763.59 461.79 763.64 466.79 763.69 \ 471.68 763.74 476.45 763.79 481.11 763.83 485.64 763.88 490.04 763.92 494.3 763.96 498.42 764 498.42 762 494.3 762.04 490.04 762.08 \ 485.64 762.12 481.11 762.17 476.45 762.21 471.68 762.26 466.79 762.31 461.79 762.36 456.7 762.41 451.5 762.46 446.22 762.51 440.86 \ 762.56 435.42 762.61 429.91 762.67 424.33 762.72 418.69 762.78 413.01 762.83 407.27 762.89 401.49 762.94 395.68 763 ", _tdraw_="S 15 -setlinewidth(2) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 4 395.56 763 389.56 767 383.56 763 389.56 759 ", arrowsize=1.0, arrowtail=diamond, constrained=false, dir=back, href="#LLM_Tagger👉 Performance_Changes", penwidth=2, pos="s,383.56,763 395.68,763 434.53,763 471.45,763 498.42,763", reverse=false, style=tapered, tooltip="*= consistsOf", type=consistsOf]; Two_Phase_Architecture [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#8bd1a4 P 4 593.5 639.5 491.5 639.5 491.5 627.5 593.5 627.5 ", _ldraw_="F 9.5 5 -Agave c 7 -#44475a t 1 T 492.5 631.9 -1 100 22 -Two-Phase Architecture ", fillcolor="#8BD1A4", fontsize=9.5, height=0.16667, href="#Two_Phase_Architecture", label=<
Two-Phase Architecture
>, pos="542.5,633.5", shape=plain, style=filled, width=1.4167]; LLM_Tagger -> Two_Phase_Architecture [_draw_="S 15 -setlinewidth(2) S 7 -tapered c 9 -#fffffe00 C 7 -#282a36 P 42 284.43 729.16 297.12 724.52 310.23 719.72 323.66 714.81 337.35 \ 709.8 351.2 704.74 365.15 699.63 379.12 694.53 393.01 689.44 406.76 684.41 420.28 679.47 433.5 674.63 446.33 669.94 458.7 665.42 \ 470.52 661.09 481.72 657 492.22 653.16 501.93 649.61 510.78 646.37 518.68 643.48 525.57 640.97 524.87 639.09 518.01 641.66 510.13 \ 644.61 501.3 647.92 491.62 651.55 481.15 655.46 469.99 659.65 458.2 664.06 445.87 668.68 433.07 673.47 419.89 678.41 406.41 683.46 \ 392.7 688.6 378.84 693.79 364.92 699 351.01 704.22 337.19 709.39 323.55 714.5 310.15 719.52 297.09 724.42 284.43 729.16 ", _tdraw_="S 15 -setlinewidth(2) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 4 284.21 729.24 279.96 735.07 272.95 733.4 277.19 727.57 ", arrowsize=1.0, arrowtail=diamond, constrained=false, dir=back, href="#LLM_Tagger👉 Two_Phase_Architecture", penwidth=2, pos="s,272.95,733.4 284.43,729.16 367.38,698.45 482.97,655.66 525.22,640.03", reverse=false, style=tapered, tooltip="*= consistsOf", type=consistsOf]; Hierarchical_Tagging [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#fff4e5 P 4 634 456.5 451 456.5 451 426.5 634 426.5 ", _ldraw_="F 9.5 5 -Agave c 7 -#44475a t 1 T 452.5 448.9 -1 91 20 -Hierarchical Tagging F 9.5 5 -Agave c 7 -#44475a t 0 T 452.5 439.4 -1 181 \ 40 -Create two-level taxonomy: fine-grained F 9.5 5 -Agave c 7 -#44475a T 500 429.9 -1 86 19 -+ broad categories. ", fillcolor="#FFF4E5", fontsize=9.5, height=0.41667, href="#Hierarchical_Tagging", label=<
Hierarchical Tagging
Create two-level taxonomy: fine-grained
+ broad categories.
>, pos="542.5,441.5", shape=plain, style=filled, width=2.5417]; LLM_Tagger -> Hierarchical_Tagging [_draw_="S 15 -setlinewidth(2) S 7 -tapered c 9 -#fffffe00 C 7 -#282a36 P 42 234.08 725.16 246.23 714.02 259.52 701.85 273.79 688.76 288.91 \ 674.91 304.73 660.42 321.09 645.42 337.85 630.06 354.87 614.46 372 598.76 389.09 583.1 406 567.61 422.57 552.42 438.67 537.67 454.14 \ 523.49 468.84 510.02 482.62 497.39 495.34 485.74 506.84 475.19 516.99 465.89 525.63 457.98 524.27 456.5 515.67 464.47 505.57 473.82 \ 494.12 484.42 481.47 496.14 467.75 508.83 453.12 522.38 437.72 536.64 421.7 551.47 405.2 566.74 388.37 582.32 371.36 598.07 354.31 \ 613.85 337.37 629.53 320.68 644.98 304.4 660.06 288.66 674.63 273.61 688.56 259.4 701.72 246.18 713.96 234.08 725.16 ", _tdraw_="S 15 -setlinewidth(2) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 4 233.98 725.25 232.28 732.26 225.16 733.38 226.86 726.37 ", arrowsize=1.0, arrowtail=diamond, constrained=false, dir=back, href="#LLM_Tagger👉 Hierarchical_Tagging", penwidth=2, pos="s,225.16,733.38 234.08,725.16 310.8,654.49 472.81,505.27 524.95,457.24", reverse=false, style=tapered, tooltip="*= consistsOf", type=consistsOf]; Additional_Tools [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#ffffff P 4 627 211.5 458 211.5 458 181.5 627 181.5 ", _ldraw_="F 9.5 5 -Agave c 7 -#44475a t 1 T 459.5 203.9 -1 73 16 -Additional Tools F 9.5 5 -Agave c 7 -#44475a t 0 T 459.5 194.4 -1 167 37 \ -Beyond clustering, embeddings enable F 9.5 5 -Agave c 7 -#44475a T 502 184.9 -1 82 18 -powerful analysis. ", fillcolor="#FFFFFF", fontsize=9.5, height=0.41667, href="#Additional_Tools", label=<
Additional Tools
Beyond clustering, embeddings enable
powerful analysis.
>, pos="542.5,196.5", shape=plain, style=filled, width=2.3472]; LLM_Tagger -> Additional_Tools [_draw_="S 15 -setlinewidth(2) S 7 -tapered c 9 -#fffffe00 C 7 -#282a36 P 42 217.63 723 229.12 704.41 242.34 683.02 257.06 659.19 273.09 \ 633.26 290.21 605.57 308.2 576.46 326.85 546.28 345.95 515.37 365.29 484.07 384.66 452.74 403.84 421.7 422.62 391.31 440.79 361.91 \ 458.14 333.84 474.45 307.44 489.52 283.07 503.12 261.06 515.05 241.75 525.09 225.5 533.04 212.63 531.34 211.59 523.43 224.47 513.44 \ 240.76 501.58 260.11 488.05 282.17 473.07 306.59 456.84 333.04 439.59 361.17 421.52 390.63 402.84 421.08 383.76 452.18 364.5 483.58 \ 345.26 514.94 326.26 545.91 307.71 576.16 289.82 605.33 272.79 633.08 256.85 659.06 242.2 682.94 229.06 704.37 217.63 723 ", _tdraw_="S 15 -setlinewidth(2) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 4 217.54 723.15 217.8 730.36 211.25 733.37 210.99 726.16 ", arrowsize=1.0, arrowtail=diamond, constrained=false, dir=back, href="#LLM_Tagger👉 Additional_Tools", penwidth=2, pos="s,211.25,733.37 217.63,723 287.83,608.99 486.79,285.86 532.19,212.11", reverse=false, style=tapered, tooltip="*= consistsOf", type=consistsOf]; Workflow_1__Single_Level_Tagging [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#eee7de P 4 866.5 1187 772.5 1187 772.5 1128 866.5 1128 ", _ldraw_="F 4.75 5 -Agave c 7 -#44475a t 1 T 773.5 1182.7 -1 73 32 -Workflow 1: Single-Level Tagging F 4.75 5 -Agave c 7 -#44475a t 0 T 773.5 \ 1177.95 -1 73 32 -One level of clusters with tags. F 4.75 5 -Agave c 7 -#ff79c6 T 773.5 1173.2 -1 68 31 - # 1. cache embeddings (\ once) F 4.75 5 -Agave c 7 -#ff79c6 T 773.5 1168.45 -1 91 40 -./llm-tagger.sh init total.ndjson # 2. F 4.75 5 -Agave c 7 -#ff79c6 \ T 773.5 1163.7 -1 73 32 -cluster and tag ./llm-tagger.sh F 4.75 5 -Agave c 7 -#ff79c6 T 773.5 1158.95 -1 88 39 -educe-tags subset.ndjson \ output.ndjson F 4.75 5 -Agave c 7 -#ff79c6 T 773.5 1154.2 -1 7 4 -20  F 4.75 5 -Agave c 7 -#44475a T 773.5 1149.45 -1 3 1 - F \ 4.75 5 -Agave c 7 -#44475a t 4 T 776.5 1149.45 -1 16 7 -Result: F 4.75 5 -Agave c 7 -#44475a t 0 T 792.5 1149.45 -1 73 32 - Documents \ with cluster and tags F 4.75 5 -Agave c 7 -#ff79c6 T 773.5 1144.7 -1 41 19 - { \"description\": F 4.75 5 -Agave c 7 -#ff79c6 T 773.5 \ 1139.95 -1 48 21 -\"...\", \"cluster\": 5, F 4.75 5 -Agave c 7 -#ff79c6 T 773.5 1135.2 -1 43 19 -\"tags\": \"hardware, F 4.75 5 -Agave \ c 7 -#ff79c6 T 773.5 1130.45 -1 21 10 -tools\" }  ", fillcolor="#EEE7DE", fontsize=4.75, height=0.81944, href="#Workflow_1__Single_Level_Tagging", label=<
Workflow 1: Single-Level Tagging
One level of clusters with tags.
 # 1. cache embeddings (once)
./llm-tagger.sh init total.ndjson # 2.
cluster and tag ./llm-tagger.sh
educe-tags subset.ndjson output.ndjson
20 

Result: Documents with cluster and tags
 { "description":
"...", "cluster": 5,
"tags": "hardware,
tools" } 

>, pos="819.5,1157.5", shape=plain, style=filled, width=1.3056]; Workflows -> Workflow_1__Single_Level_Tagging [_draw_="S 17 -setlinewidth(0.8) S 6 -dashed c 7 -#282a36 B 10 564.32 878.78 591.45 874.62 638.57 872.12 665.5 898 736.94 966.65 637.3 1042.5 \ 701.5 1118 716.6 1135.7 740.04 1145.5 761.94 1150.7 ", _hdraw_="S 17 -setlinewidth(0.8) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 9 771.86 1152.9 761.12 1155.13 766.98 1151.82 762.1 1150.73 762.1 \ 1150.73 762.1 1150.73 766.98 1151.82 763.07 1146.34 771.86 1152.9 ", arrowhead=open, arrowsize=1.0, href="#Workflows👉 Workflow_1__Single_Level_Tagging", pos="e,771.86,1152.9 564.32,878.78 591.45,874.62 638.57,872.12 665.5,898 736.94,966.65 637.3,1042.5 701.5,1118 716.6,1135.7 740.04,1145.5 \ 761.94,1150.7", reverse=false, style=dashed, tooltip="-> isAnInputTo", type=isAnInputTo]; Workflow_2__Hierarchical_Tagging [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#eee7de P 4 868 1109.5 771 1109.5 771 1017.5 868 1017.5 ", _ldraw_="F 4.75 5 -Agave c 7 -#44475a t 1 T 772.5 1105.7 -1 73 32 -Workflow 2: Hierarchical Tagging F 4.75 5 -Agave c 7 -#44475a t 0 T 772.5 \ 1100.95 -1 75 33 -Two levels: fine-grained + broad F 4.75 5 -Agave c 7 -#44475a T 772.5 1096.2 -1 25 11 -categories. F 4.75 5 -Agave \ c 7 -#ff79c6 T 772.5 1091.45 -1 68 31 - # 1. cache embeddings (once) F 4.75 5 -Agave c 7 -#ff79c6 T 772.5 1086.7 -1 91 40 -./llm-tagger.sh \ init total.ndjson # 2. F 4.75 5 -Agave c 7 -#ff79c6 T 772.5 1081.95 -1 91 40 -fine-grained clustering ./llm-tagger.sh F 4.75 \ 5 -Agave c 7 -#ff79c6 T 772.5 1077.2 -1 95 42 -educe-tags subset.ndjson level1.ndjson 5 F 4.75 5 -Agave c 7 -#ff79c6 T 772.5 1072.45 \ -1 59 26 -# 3. cluster the clusters F 4.75 5 -Agave c 7 -#ff79c6 T 772.5 1067.7 -1 66 29 -./llm-tagger.sh hierarchical F 4.75 \ 5 -Agave c 7 -#ff79c6 T 772.5 1062.95 -1 68 31 -level1.ndjson level2.ndjson 3  F 4.75 5 -Agave c 7 -#44475a T 772.5 1058.2 -1 3 \ 1 - F 4.75 5 -Agave c 7 -#44475a t 4 T 775.5 1058.2 -1 16 7 -Result: F 4.75 5 -Agave c 7 -#44475a t 0 T 791.5 1058.2 -1 59 26 - \ Documents with two levels F 4.75 5 -Agave c 7 -#ff79c6 T 772.5 1053.45 -1 46 21 - { \"description\": F 4.75 5 -Agave c 7 -#ff79c6 \ T 772.5 1048.7 -1 21 9 -\"...\", F 4.75 5 -Agave c 7 -#ff79c6 T 772.5 1043.95 -1 46 20 -\"cluster_l1\": 12, F 4.75 5 -Agave c \ 7 -#ff79c6 T 772.5 1039.2 -1 46 20 -\"tags_l1\": \"screws, F 4.75 5 -Agave c 7 -#ff79c6 T 772.5 1034.45 -1 32 14 -fasteners\", F \ 4.75 5 -Agave c 7 -#ff79c6 T 772.5 1029.7 -1 43 19 -\"cluster_l2\": 2, F 4.75 5 -Agave c 7 -#ff79c6 T 772.5 1024.95 -1 25 11 -\"\ tags_l2\": F 4.75 5 -Agave c 7 -#ff79c6 T 772.5 1020.2 -1 30 14 -\"hardware\" }  ", fillcolor="#EEE7DE", fontsize=4.75, height=1.2778, href="#Workflow_2__Hierarchical_Tagging", label=<
Workflow 2: Hierarchical Tagging
Two levels: fine-grained + broad
categories.
 # 1. cache embeddings (once)
./llm-tagger.sh init total.ndjson # 2.
fine-grained clustering ./llm-tagger.sh
educe-tags subset.ndjson level1.ndjson 5
# 3. cluster the clusters
./llm-tagger.sh hierarchical
level1.ndjson level2.ndjson 3 

Result: Documents with two levels
 { "description":
"...",
"cluster_l1": 12,
"tags_l1": "screws,
fasteners",
"cluster_l2": 2,
"tags_l2":
"hardware" } 

>, pos="819.5,1063.5", shape=plain, style=filled, width=1.3472]; Workflows -> Workflow_2__Hierarchical_Tagging [_draw_="S 17 -setlinewidth(0.8) S 6 -dashed c 7 -#282a36 B 10 564.21 879.37 590.77 875.96 636.83 874.41 665.5 898 705.22 930.68 667.47 969.43 \ 701.5 1008 717.16 1025.7 739.77 1038.2 760.91 1046.7 ", _hdraw_="S 17 -setlinewidth(0.8) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 9 770.5 1050.4 759.55 1051 765.84 1048.6 761.17 1046.8 761.17 1046.8 \ 761.17 1046.8 765.84 1048.6 762.79 1042.6 770.5 1050.4 ", arrowhead=open, arrowsize=1.0, href="#Workflows👉 Workflow_2__Hierarchical_Tagging", pos="e,770.5,1050.4 564.21,879.37 590.77,875.96 636.83,874.41 665.5,898 705.22,930.68 667.47,969.43 701.5,1008 717.16,1025.7 739.77,1038.2 \ 760.91,1046.7", reverse=false, style=dashed, tooltip="-> isAnInputTo", type=isAnInputTo]; Workflow_3__Multiple_Subsets [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#eee7de P 4 872.5 999.5 766.5 999.5 766.5 931.5 872.5 931.5 ", _ldraw_="F 4.75 5 -Agave c 7 -#44475a t 1 T 767.5 995.7 -1 64 28 -Workflow 3: Multiple Subsets F 4.75 5 -Agave c 7 -#44475a t 0 T 767.5 990.95 \ -1 88 39 -Analyze different slices independently. F 4.75 5 -Agave c 7 -#ff79c6 T 767.5 986.2 -1 75 34 - # 1. cache embeddings (\ once for F 4.75 5 -Agave c 7 -#ff79c6 T 767.5 981.45 -1 91 40 -all) ./llm-tagger.sh init total.ndjson F 4.75 5 -Agave c 7 -#ff79c6 \ T 767.5 976.7 -1 73 32 -# 2. tag each subset (different F 4.75 5 -Agave c 7 -#ff79c6 T 767.5 971.95 -1 84 37 -patterns) ./llm-tagger.sh \ educe-tags F 4.75 5 -Agave c 7 -#ff79c6 T 767.5 967.2 -1 82 36 -january.ndjson jan-tagged.ndjson 15 F 4.75 5 -Agave c 7 -#ff79c6 \ T 767.5 962.45 -1 61 27 -./llm-tagger.sh educe-tags F 4.75 5 -Agave c 7 -#ff79c6 T 767.5 957.7 -1 82 36 -hardware.ndjson hw-tagged.ndjson \ 20 F 4.75 5 -Agave c 7 -#ff79c6 T 767.5 952.95 -1 61 27 -./llm-tagger.sh educe-tags F 4.75 5 -Agave c 7 -#ff79c6 T 767.5 948.2 \ -1 75 33 -vendor-x.ndjson vx-tagged.ndjson F 4.75 5 -Agave c 7 -#ff79c6 T 767.5 943.45 -1 7 4 -10  F 4.75 5 -Agave c 7 -#44475a \ T 767.5 938.7 -1 3 1 - F 4.75 5 -Agave c 7 -#44475a t 4 T 770.5 938.7 -1 19 8 -Benefit: F 4.75 5 -Agave c 7 -#44475a t 0 T 789.5 \ 938.7 -1 82 36 - Each subset gets unique clustering F 4.75 5 -Agave c 7 -#44475a T 793.5 933.95 -1 52 23 -reflecting its patterns ", fillcolor="#EEE7DE", fontsize=4.75, height=0.94444, href="#Workflow_3__Multiple_Subsets", label=<
Workflow 3: Multiple Subsets
Analyze different slices independently.
 # 1. cache embeddings (once for
all) ./llm-tagger.sh init total.ndjson
# 2. tag each subset (different
patterns) ./llm-tagger.sh educe-tags
january.ndjson jan-tagged.ndjson 15
./llm-tagger.sh educe-tags
hardware.ndjson hw-tagged.ndjson 20
./llm-tagger.sh educe-tags
vendor-x.ndjson vx-tagged.ndjson
10 

Benefit: Each subset gets unique clustering
reflecting its patterns
>, pos="819.5,965.5", shape=plain, style=filled, width=1.4722]; Workflows -> Workflow_3__Multiple_Subsets [_draw_="S 17 -setlinewidth(0.8) S 6 -dashed c 7 -#282a36 B 10 564.04 882.67 588.85 882.91 631.49 885.38 665.5 898 683.53 904.69 684.36 913.28 \ 701.5 922 718.68 930.75 738.08 938.63 756.05 945.19 ", _hdraw_="S 17 -setlinewidth(0.8) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 9 765.86 948.69 754.93 949.57 761.15 947.01 756.44 945.33 756.44 \ 945.33 756.44 945.33 761.15 947.01 757.95 941.09 765.86 948.69 ", arrowhead=open, arrowsize=1.0, href="#Workflows👉 Workflow_3__Multiple_Subsets", pos="e,765.86,948.69 564.04,882.67 588.85,882.91 631.49,885.38 665.5,898 683.53,904.69 684.36,913.28 701.5,922 718.68,930.75 738.08,938.63 \ 756.05,945.19", reverse=false, style=dashed, tooltip="-> isAnInputTo", type=isAnInputTo]; Workflow_4__Multiple_Subsets___Hierarchy [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#eee7de P 4 866 913 773 913 773 854 866 854 ", _ldraw_="F 4.75 5 -Agave c 7 -#44475a t 1 T 774.5 908.7 -1 91 40 -Workflow 4: Multiple Subsets + Hierarchy F 4.75 5 -Agave c 7 -#44475a t \ 0 T 774.5 903.95 -1 55 24 -Combine both approaches. F 4.75 5 -Agave c 7 -#ff79c6 T 774.5 899.2 -1 68 31 - # 1. cache embeddings (\ once) F 4.75 5 -Agave c 7 -#ff79c6 T 774.5 894.45 -1 91 40 -./llm-tagger.sh init total.ndjson # 2. F 4.75 5 -Agave c 7 -#ff79c6 \ T 774.5 889.7 -1 91 40 -subset 1 with hierarchy ./llm-tagger.sh F 4.75 5 -Agave c 7 -#ff79c6 T 774.5 884.95 -1 91 40 -educe-tags \ january.ndjson jan-l1.ndjson F 4.75 5 -Agave c 7 -#ff79c6 T 774.5 880.2 -1 70 31 -5 ./llm-tagger.sh hierarchical F 4.75 5 -Agave \ c 7 -#ff79c6 T 774.5 875.45 -1 88 39 -jan-l1.ndjson jan-final.ndjson 3 # 3. F 4.75 5 -Agave c 7 -#ff79c6 T 774.5 870.7 -1 91 40 \ -subset 2 with hierarchy ./llm-tagger.sh F 4.75 5 -Agave c 7 -#ff79c6 T 774.5 865.95 -1 91 40 -educe-tags hardware.ndjson hw-l1.ndjson \ F 4.75 5 -Agave c 7 -#ff79c6 T 774.5 861.2 -1 70 31 -5 ./llm-tagger.sh hierarchical F 4.75 5 -Agave c 7 -#ff79c6 T 774.5 856.45 \ -1 70 32 -hw-l1.ndjson hw-final.ndjson 3  ", fillcolor="#EEE7DE", fontsize=4.75, height=0.81944, href="#Workflow_4__Multiple_Subsets___Hierarchy", label=<
Workflow 4: Multiple Subsets + Hierarchy
Combine both approaches.
 # 1. cache embeddings (once)
./llm-tagger.sh init total.ndjson # 2.
subset 1 with hierarchy ./llm-tagger.sh
educe-tags january.ndjson jan-l1.ndjson
5 ./llm-tagger.sh hierarchical
jan-l1.ndjson jan-final.ndjson 3 # 3.
subset 2 with hierarchy ./llm-tagger.sh
educe-tags hardware.ndjson hw-l1.ndjson
5 ./llm-tagger.sh hierarchical
hw-l1.ndjson hw-final.ndjson 3 

>, pos="819.5,883.5", shape=plain, style=filled, width=1.2917]; Workflows -> Workflow_4__Multiple_Subsets___Hierarchy [_draw_="S 17 -setlinewidth(0.8) S 6 -dashed c 7 -#282a36 B 4 564.13 883 605.74 883 700.95 883 762.22 883 ", _hdraw_="S 17 -setlinewidth(0.8) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 9 772.49 883 762.49 887.5 767.49 883 762.49 883 762.49 883 762.49 \ 883 767.49 883 762.49 878.5 772.49 883 ", arrowhead=open, arrowsize=1.0, href="#Workflows👉 Workflow_4__Multiple_Subsets___Hierarchy", pos="e,772.49,883 564.13,883 605.74,883 700.95,883 762.22,883", reverse=false, style=dashed, tooltip="-> isAnInputTo", type=isAnInputTo]; X__Parallel_Tag_Extraction [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#ffffff P 4 850 834.5 789 834.5 789 810.5 850 810.5 ", _ldraw_="F 4.75 5 -Agave c 7 -#44475a t 1 T 790.5 830.7 -1 59 26 -1. Parallel Tag Extraction F 4.75 5 -Agave c 7 -#44475a t 0 T 790.5 822.7 \ -1 50 25 -• 8 concurrent workers F 4.75 5 -Agave c 7 -#44475a T 790.5 817.7 -1 50 25 -• removed sleep delays F 4.75 5 -Agave \ c 7 -#44475a T 790.5 812.7 -1 25 14 -• 8x faster ", fillcolor="#FFFFFF", fontsize=4.75, height=0.33333, href="#1__Parallel_Tag_Extraction", label=<
1. Parallel Tag Extraction
• 8 concurrent workers
• removed sleep delays
• 8x faster
>, pos="819.5,822.5", shape=plain, style=filled, width=0.84722]; Performance_Changes -> X__Parallel_Tag_Extraction [_draw_="S 15 -setlinewidth(2) S 7 -tapered c 9 -#fffffe00 C 7 -#282a36 P 82 577.64 772.09 582.55 773.39 587.69 774.75 593.06 776.16 598.63 \ 777.62 604.39 779.12 610.31 780.65 616.39 782.21 622.61 783.79 628.94 785.39 635.37 787.01 641.89 788.63 648.47 790.25 655.09 791.86 \ 661.75 793.47 668.43 795.06 675.09 796.63 681.74 798.17 688.35 799.68 694.9 801.15 701.38 802.58 705.81 803.54 710.3 804.49 714.83 \ 805.43 719.39 806.37 723.98 807.3 728.58 808.21 733.17 809.12 737.76 810.01 742.33 810.88 746.87 811.74 751.36 812.58 755.8 813.41 \ 760.17 814.21 764.47 814.99 768.68 815.75 772.79 816.48 776.79 817.19 780.68 817.88 784.43 818.53 788.04 819.16 788.38 817.18 784.76 \ 816.59 781 815.97 777.11 815.33 773.11 814.65 768.99 813.96 764.77 813.24 760.47 812.5 756.1 811.74 751.65 810.95 747.16 810.15 \ 742.62 809.34 738.05 808.51 733.45 807.66 728.85 806.8 724.25 805.93 719.65 805.04 715.09 804.15 710.55 803.25 706.06 802.34 701.62 \ 801.42 695.14 800.06 688.58 798.65 681.96 797.2 675.3 795.72 668.62 794.21 661.94 792.68 655.27 791.14 648.62 789.59 642.03 788.03 \ 635.5 786.47 629.06 784.92 622.71 783.37 616.48 781.85 610.39 780.35 604.45 778.87 598.68 777.43 593.09 776.02 587.72 774.66 582.56 \ 773.35 577.64 772.09 ", _tdraw_="S 15 -setlinewidth(2) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 4 577.51 772.06 570.69 774.4 565.9 769.01 572.72 766.66 ", arrowsize=1.0, arrowtail=diamond, constrained=false, dir=back, href="#Performance_Changes👉 1__Parallel_Tag_Extraction", penwidth=2, pos="s,565.9,769.01 577.64,772.09 609.55,780.43 658.57,792.84 701.5,802 730.85,808.26 764.61,814.21 788.21,818.17", reverse=false, style=tapered, tooltip="*= consistsOf", type=consistsOf]; X__Connection_Pooling [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#ffffff P 4 854.5 792 784.5 792 784.5 773 854.5 773 ", _ldraw_="F 4.75 5 -Agave c 7 -#44475a t 1 T 785.5 787.7 -1 48 21 -2. Connection Pooling F 4.75 5 -Agave c 7 -#44475a t 0 T 785.5 779.7 -1 \ 68 33 -• requests.Session() for reuse F 4.75 5 -Agave c 7 -#44475a T 785.5 774.7 -1 34 18 -• all API calls ", fillcolor="#FFFFFF", fontsize=4.75, height=0.26389, href="#2__Connection_Pooling", label=<
2. Connection Pooling
• requests.Session() for reuse
• all API calls
>, pos="819.5,782.5", shape=plain, style=filled, width=0.97222]; Performance_Changes -> X__Connection_Pooling [_draw_="S 15 -setlinewidth(2) S 7 -tapered c 9 -#fffffe00 C 7 -#282a36 P 42 598.73 767.02 607.22 767.69 616.08 768.38 625.27 769.1 634.73 \ 769.84 644.42 770.6 654.28 771.37 664.27 772.15 674.34 772.94 684.44 773.73 694.53 774.52 704.54 775.3 714.44 776.08 724.18 776.84 \ 733.71 777.59 742.97 778.31 751.92 779.01 760.52 779.69 768.7 780.33 776.43 780.93 783.66 781.5 783.8 779.5 776.57 779.02 768.84 \ 778.49 760.64 777.94 752.04 777.36 743.08 776.76 733.81 776.13 724.28 775.49 714.54 774.83 704.63 774.16 694.6 773.49 684.51 772.81 \ 674.4 772.12 664.32 771.44 654.32 770.77 644.45 770.1 634.76 769.45 625.29 768.81 616.1 768.19 607.23 767.59 598.73 767.02 ", _tdraw_="S 15 -setlinewidth(2) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 4 598.66 767.01 592.39 770.57 586.69 766.15 592.96 762.59 ", arrowsize=1.0, arrowtail=diamond, constrained=false, dir=back, href="#Performance_Changes👉 2__Connection_Pooling", penwidth=2, pos="s,586.69,766.15 598.73,767.02 654.01,771.05 737.34,777.12 783.73,780.5", reverse=false, style=tapered, tooltip="*= consistsOf", type=consistsOf]; X__Parallel_Embedding [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#ffffff P 4 845.5 755.5 793.5 755.5 793.5 731.5 845.5 731.5 ", _ldraw_="F 4.75 5 -Agave c 7 -#44475a t 1 T 794.5 751.7 -1 48 21 -3. Parallel Embedding F 4.75 5 -Agave c 7 -#44475a t 0 T 794.5 743.7 -1 \ 50 25 -• 4 concurrent workers F 4.75 5 -Agave c 7 -#44475a T 794.5 738.7 -1 48 26 -• batch size: 32 → 64 F 4.75 5 -Agave \ c 7 -#44475a T 794.5 733.7 -1 46 23 -• maintains ordering ", fillcolor="#FFFFFF", fontsize=4.75, height=0.33333, href="#3__Parallel_Embedding", label=<
3. Parallel Embedding
• 4 concurrent workers
• batch size: 32 → 64
• maintains ordering
>, pos="819.5,743.5", shape=plain, style=filled, width=0.72222]; Performance_Changes -> X__Parallel_Embedding [_draw_="S 15 -setlinewidth(2) S 7 -tapered c 9 -#fffffe00 C 7 -#282a36 P 42 598.79 758.97 607.88 758.35 617.4 757.71 627.27 757.04 637.45 \ 756.35 647.87 755.65 658.47 754.93 669.2 754.21 679.99 753.47 690.78 752.74 701.52 752.02 712.14 751.3 722.59 750.59 732.81 749.9 \ 742.73 749.23 752.3 748.58 761.47 747.96 770.15 747.37 778.31 746.82 785.88 746.31 792.8 745.84 792.66 743.84 785.74 744.38 778.18 \ 744.97 770.03 745.61 761.34 746.29 752.19 747 742.62 747.75 732.71 748.52 722.5 749.32 712.06 750.13 701.44 750.96 690.71 751.8 \ 679.92 752.64 669.14 753.48 658.43 754.32 647.83 755.14 637.42 755.96 627.25 756.75 617.38 757.52 607.88 758.26 598.79 758.97 ", _tdraw_="S 15 -setlinewidth(2) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 4 598.66 758.98 592.96 763.4 586.69 759.85 592.38 755.43 ", arrowsize=1.0, arrowtail=diamond, constrained=false, dir=back, href="#Performance_Changes👉 3__Parallel_Embedding", penwidth=2, pos="s,586.69,759.85 598.79,758.97 657.86,754.67 748.91,748.03 792.73,744.84", reverse=false, style=tapered, tooltip="*= consistsOf", type=consistsOf]; X__HDBSCAN_Multi_core [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#ffffff P 4 846.5 713.5 792.5 713.5 792.5 687.5 846.5 687.5 ", _ldraw_="F 4.75 5 -Agave c 7 -#44475a t 1 T 793.5 709.7 -1 48 21 -4. HDBSCAN Multi-core F 4.75 5 -Agave c 7 -#44475a t 0 T 793.5 701.7 -1 \ 48 24 -• core_dist_n_jobs=-1 F 4.75 5 -Agave c 7 -#44475a T 793.5 696.7 -1 37 19 -• uses all cores F 4.75 5 -Agave c 7 -#44475a \ T 793.5 689.7 -1 52 23 -**Overall speedup: 5-8x ", fillcolor="#FFFFFF", fontsize=4.75, height=0.36111, href="#4__HDBSCAN_Multi_core", label=<
4. HDBSCAN Multi-core
• core_dist_n_jobs=-1
• uses all cores
**Overall speedup: 5-8x
>, pos="819.5,700.5", shape=plain, style=filled, width=0.75]; Performance_Changes -> X__HDBSCAN_Multi_core [_draw_="S 15 -setlinewidth(2) S 7 -tapered c 9 -#fffffe00 C 7 -#282a36 P 82 576.55 753.73 581.46 752.4 586.63 751.02 592.02 749.58 597.63 \ 748.09 603.43 746.56 609.41 745 615.55 743.4 621.83 741.78 628.23 740.14 634.74 738.49 641.33 736.83 648 735.17 654.71 733.52 661.46 \ 731.87 668.22 730.25 674.98 728.64 681.72 727.07 688.42 725.52 695.06 724.02 701.63 722.57 706.3 721.55 711.04 720.55 715.83 719.55 \ 720.65 718.56 725.5 717.59 730.35 716.62 735.2 715.68 740.04 714.74 744.85 713.83 749.61 712.94 754.33 712.06 758.97 711.21 763.54 \ 710.39 768.01 709.58 772.37 708.81 776.62 708.06 780.73 707.34 784.71 706.66 788.52 706 792.16 705.39 791.82 703.41 788.18 704.07 \ 784.37 704.76 780.4 705.48 776.29 706.23 772.05 707.02 767.69 707.83 763.22 708.68 758.66 709.55 754.02 710.44 749.31 711.36 744.55 \ 712.29 739.75 713.25 734.92 714.23 730.07 715.22 725.22 716.23 720.38 717.25 715.56 718.28 710.78 719.32 706.04 720.37 701.37 721.43 \ 694.81 722.95 688.18 724.51 681.49 726.11 674.77 727.75 668.02 729.41 661.27 731.1 654.54 732.81 647.83 734.52 641.18 736.24 634.6 \ 737.96 628.11 739.67 621.72 741.37 615.46 743.05 609.33 744.7 603.37 746.32 597.58 747.9 591.98 749.44 586.6 750.93 581.45 752.36 \ 576.55 753.73 ", _tdraw_="S 15 -setlinewidth(2) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 4 576.42 753.76 571.71 759.22 564.86 756.97 569.57 751.51 ", arrowsize=1.0, arrowtail=diamond, constrained=false, dir=back, href="#Performance_Changes👉 4__HDBSCAN_Multi_core", penwidth=2, pos="s,564.86,756.97 576.55,753.73 608.4,744.96 658.04,731.73 701.5,722 732.43,715.07 768.31,708.52 791.99,704.4", reverse=false, style=tapered, tooltip="*= consistsOf", type=consistsOf]; Phase_1__init_total_ndjson [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#8bd1a4 P 4 852.5 668.5 786.5 668.5 786.5 644.5 852.5 644.5 ", _ldraw_="F 4.75 5 -Agave c 7 -#44475a t 1 T 787.5 664.7 -1 59 26 -Phase 1: init total.ndjson F 4.75 5 -Agave c 7 -#44475a t 0 T 787.5 656.7 \ -1 64 31 -• pre-compute all embeddings F 4.75 5 -Agave c 7 -#44475a T 787.5 651.7 -1 34 18 -• save to cache F 4.75 5 -Agave \ c 7 -#44475a T 787.5 646.7 -1 43 22 -• no clustering yet ", fillcolor="#8BD1A4", fontsize=4.75, height=0.33333, href="#Phase_1__init_total_ndjson", label=<
Phase 1: init total.ndjson
• pre-compute all embeddings
• save to cache
• no clustering yet
>, pos="819.5,656.5", shape=plain, style=filled, width=0.91667]; Two_Phase_Architecture -> Phase_1__init_total_ndjson [_draw_="S 15 -setlinewidth(2) S 7 -tapered c 9 -#fffffe00 C 7 -#282a36 P 42 605.8 639.22 614.37 639.99 623.26 640.78 632.42 641.6 641.8 \ 642.44 651.36 643.29 661.06 644.16 670.85 645.03 680.68 645.91 690.51 646.79 700.3 647.66 710 648.53 719.56 649.38 728.95 650.22 \ 738.11 651.04 747 651.84 755.57 652.6 763.78 653.34 771.59 654.04 778.95 654.69 785.82 655.31 785.98 653.31 779.11 652.78 771.75 \ 652.2 763.93 651.59 755.71 650.94 747.13 650.27 738.23 649.58 729.06 648.86 719.67 648.13 710.1 647.38 700.39 646.62 690.59 645.85 \ 680.75 645.08 670.91 644.31 661.11 643.54 651.4 642.79 641.83 642.04 632.44 641.3 623.27 640.59 614.38 639.89 605.8 639.22 ", _tdraw_="S 15 -setlinewidth(2) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 4 605.49 639.19 599.17 642.68 593.53 638.19 599.84 634.71 ", arrowsize=1.0, arrowtail=diamond, constrained=false, dir=back, href="#Two_Phase_Architecture👉 Phase_1__init_total_ndjson", penwidth=2, pos="s,593.53,638.19 605.8,639.22 661.82,643.91 741.87,650.62 785.9,654.31", reverse=false, style=tapered, tooltip="*= consistsOf", type=consistsOf]; Phase_2__educe_tags_subset_ndjson [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#8bd1a4 P 4 858 626 781 626 781 597 858 597 ", _ldraw_="F 4.75 5 -Agave c 7 -#44475a t 1 T 782.5 621.7 -1 75 33 -Phase 2: educe-tags subset.ndjson F 4.75 5 -Agave c 7 -#44475a t 0 T 782.5 \ 613.7 -1 55 27 -• load cached embeddings F 4.75 5 -Agave c 7 -#44475a T 782.5 608.7 -1 48 24 -• cluster subset only F 4.75 \ 5 -Agave c 7 -#44475a T 782.5 603.7 -1 70 34 -• generate subset-specific tags F 4.75 5 -Agave c 7 -#44475a T 782.5 598.7 -1 68 \ 33 -• each subset: unique patterns ", fillcolor="#8BD1A4", fontsize=4.75, height=0.40278, href="#Phase_2__educe_tags_subset_ndjson", label=<
Phase 2: educe-tags subset.ndjson
• load cached embeddings
• cluster subset only
• generate subset-specific tags
• each subset: unique patterns
>, pos="819.5,611.5", shape=plain, style=filled, width=1.0694]; Two_Phase_Architecture -> Phase_2__educe_tags_subset_ndjson [_draw_="S 15 -setlinewidth(2) S 7 -tapered c 9 -#fffffe00 C 7 -#282a36 P 42 605.65 629.02 613.87 628.41 622.38 627.78 631.14 627.12 640.12 \ 626.46 649.27 625.78 658.56 625.09 667.93 624.39 677.37 623.69 686.81 622.98 696.24 622.28 705.59 621.59 714.84 620.9 723.95 620.22 \ 732.87 619.56 741.57 618.91 750.01 618.28 758.14 617.68 765.93 617.1 773.33 616.55 780.31 616.03 780.15 614.03 773.18 614.63 765.78 \ 615.27 758 615.94 749.88 616.63 741.45 617.36 732.76 618.11 723.84 618.87 714.74 619.65 705.5 620.45 696.15 621.25 686.74 622.06 \ 677.3 622.87 667.88 623.68 658.51 624.48 649.23 625.28 640.09 626.06 631.12 626.83 622.36 627.59 613.86 628.32 605.65 629.02 ", _tdraw_="S 15 -setlinewidth(2) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 4 605.49 629.03 599.83 633.5 593.53 629.99 599.19 625.52 ", arrowsize=1.0, arrowtail=diamond, constrained=false, dir=back, href="#Two_Phase_Architecture👉 Phase_2__educe_tags_subset_ndjson", penwidth=2, pos="s,593.53,629.99 605.65,629.02 659.35,624.72 735.21,618.64 780.23,615.03", reverse=false, style=tapered, tooltip="*= consistsOf", type=consistsOf]; Benefits [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#8bd1a4 P 4 864.5 578.5 774.5 578.5 774.5 544.5 864.5 544.5 ", _ldraw_="F 4.75 5 -Agave c 7 -#44475a t 1 T 775.5 574.7 -1 19 8 -Benefits F 4.75 5 -Agave c 7 -#44475a t 0 T 775.5 566.7 -1 59 29 -• embeddings \ computed once F 4.75 5 -Agave c 7 -#44475a T 775.5 561.7 -1 84 40 -• each subset independently clustered F 4.75 5 -Agave c 7 \ -#44475a T 775.5 556.7 -1 66 32 -• tags reflect subset context F 4.75 5 -Agave c 7 -#44475a T 775.5 551.7 -1 79 40 -• january.ndjson \ → january patterns F 4.75 5 -Agave c 7 -#44475a T 775.5 546.7 -1 88 44 -• hardware.ndjson → hardware categories ", fillcolor="#8BD1A4", fontsize=4.75, height=0.47222, href="#Benefits", label=<
Benefits
• embeddings computed once
• each subset independently clustered
• tags reflect subset context
• january.ndjson → january patterns
• hardware.ndjson → hardware categories
>, pos="819.5,561.5", shape=plain, style=filled, width=1.25]; Two_Phase_Architecture -> Benefits [_draw_="S 15 -setlinewidth(2) S 7 -tapered c 9 -#fffffe00 C 7 -#282a36 P 82 574.98 624.54 579.89 623.11 585.07 621.61 590.5 620.04 596.14 \ 618.41 602 616.73 608.04 615.01 614.25 613.25 620.61 611.45 627.1 609.63 633.7 607.78 640.39 605.93 647.16 604.06 653.98 602.19 \ 660.84 600.33 667.71 598.48 674.58 596.65 681.43 594.84 688.24 593.06 694.99 591.32 701.66 589.62 705.26 588.71 708.89 587.81 712.56 \ 586.9 716.25 586 719.96 585.1 723.69 584.21 727.43 583.32 731.17 582.43 734.9 581.55 738.63 580.68 742.34 579.82 746.03 578.97 749.7 \ 578.13 753.33 577.31 756.92 576.49 760.47 575.69 763.97 574.91 767.41 574.14 770.8 573.39 774.11 572.66 773.67 570.7 770.36 571.47 \ 766.98 572.25 763.55 573.06 760.05 573.88 756.51 574.71 752.92 575.56 749.3 576.42 745.64 577.3 741.95 578.18 738.25 579.08 734.53 \ 579.99 730.8 580.9 727.07 581.82 723.34 582.75 719.61 583.68 715.91 584.62 712.22 585.56 708.56 586.5 704.93 587.44 701.34 588.38 \ 694.68 590.15 687.95 591.96 681.15 593.8 674.32 595.68 667.46 597.58 660.61 599.5 653.77 601.42 646.96 603.36 640.21 605.29 633.54 \ 607.21 626.95 609.12 620.48 611.01 614.14 612.86 607.95 614.69 601.92 616.47 596.08 618.21 590.45 619.89 585.04 621.51 579.88 623.06 \ 574.98 624.54 ", _tdraw_="S 15 -setlinewidth(2) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 4 574.87 624.57 570.26 630.12 563.37 628 567.98 622.45 ", arrowsize=1.0, arrowtail=diamond, constrained=false, dir=back, href="#Two_Phase_Architecture👉 Benefits", penwidth=2, pos="s,563.37,628 574.98,624.54 606.78,615.09 657.37,600.39 701.5,589 725.32,582.85 752.05,576.61 773.89,571.68", reverse=false, style=tapered, tooltip="*= consistsOf", type=consistsOf]; Workflow [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#fff4e5 P 4 868 526.5 771 526.5 771 486.5 868 486.5 ", _ldraw_="F 4.75 5 -Agave c 7 -#44475a t 1 T 772.5 522.7 -1 19 8 -Workflow F 4.75 5 -Agave c 7 -#ff79c6 t 0 T 772.5 513.2 -1 70 32 - # level \ 1: fine-grained (many F 4.75 5 -Agave c 7 -#ff79c6 T 772.5 508.45 -1 73 32 -small clusters) ./llm-tagger.sh F 4.75 5 -Agave c \ 7 -#ff79c6 T 772.5 503.7 -1 95 42 -educe-tags subset.ndjson level1.ndjson 5 F 4.75 5 -Agave c 7 -#ff79c6 T 772.5 498.95 -1 73 \ 32 -# level 2: cluster the clusters F 4.75 5 -Agave c 7 -#ff79c6 T 772.5 494.2 -1 66 29 -./llm-tagger.sh hierarchical F 4.75 5 \ -Agave c 7 -#ff79c6 T 772.5 489.45 -1 68 31 -level1.ndjson level2.ndjson 3  ", fillcolor="#FFF4E5", fontsize=4.75, height=0.55556, href="#Workflow", label=<
Workflow

 # level 1: fine-grained (many
small clusters) ./llm-tagger.sh
educe-tags subset.ndjson level1.ndjson 5
# level 2: cluster the clusters
./llm-tagger.sh hierarchical
level1.ndjson level2.ndjson 3 

>, pos="819.5,506.5", shape=plain, style=filled, width=1.3472]; Hierarchical_Tagging -> Workflow [_draw_="S 15 -setlinewidth(2) S 7 -tapered c 9 -#fffffe00 C 7 -#282a36 P 42 619.14 459.91 626.46 461.69 633.94 463.52 641.57 465.38 649.32 \ 467.27 657.17 469.18 665.09 471.11 673.05 473.05 681.04 474.99 689.02 476.94 696.98 478.88 704.89 480.8 712.73 482.71 720.47 484.6 \ 728.09 486.45 735.56 488.27 742.86 490.05 749.97 491.78 756.85 493.46 763.5 495.08 769.88 496.63 770.34 494.69 763.94 493.22 757.28 \ 491.68 750.37 490.09 743.24 488.45 735.91 486.77 728.42 485.05 720.78 483.29 713.01 481.5 705.15 479.7 697.22 477.87 689.23 476.03 \ 681.22 474.19 673.21 472.35 665.23 470.51 657.29 468.69 649.42 466.88 641.64 465.09 633.99 463.33 626.48 461.6 619.14 459.91 ", _tdraw_="S 15 -setlinewidth(2) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 4 618.85 459.84 612.09 462.35 607.17 457.08 613.93 454.57 ", arrowsize=1.0, arrowtail=diamond, constrained=false, dir=back, href="#Hierarchical_Tagging👉 Workflow", penwidth=2, pos="s,607.17,457.08 619.14,459.91 667.39,471.34 728.46,485.8 770.11,495.66", reverse=false, style=tapered, tooltip="*= consistsOf", type=consistsOf]; How_It_Works [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#fff4e5 P 4 870.5 468 768.5 468 768.5 415 870.5 415 ", _ldraw_="F 4.75 5 -Agave c 7 -#44475a t 1 T 769.5 463.7 -1 28 12 -How It Works F 4.75 5 -Agave c 7 -#44475a t 0 T 769.5 456.7 -1 7 6 -•  \ F 4.75 5 -Agave c 7 -#44475a t 4 T 776.5 456.7 -1 16 7 -Level 1 F 4.75 5 -Agave c 7 -#44475a t 0 T 792.5 456.7 -1 77 34 - creates \ detailed clusters (e.g., F 4.75 5 -Agave c 7 -#44475a T 769.5 451.95 -1 43 19 -\"screws\", \"bolts\", F 4.75 5 -Agave c 7 -#44475a \ T 809 447.2 -1 21 9 -\"cables\") F 4.75 5 -Agave c 7 -#44475a T 769.5 442.7 -1 7 6 -•  F 4.75 5 -Agave c 7 -#44475a t 4 T 776.5 \ 442.7 -1 16 7 -Level 2 F 4.75 5 -Agave c 7 -#44475a t 0 T 792.5 442.7 -1 61 27 - computes cluster centroids F 4.75 5 -Agave c 7 \ -#44475a T 769.5 436.7 -1 68 33 -• Clusters the centroids into F 4.75 5 -Agave c 7 -#44475a T 787.5 431.7 -1 32 14 -super-clusters \ F 4.75 5 -Agave c 7 -#44475a T 769.5 426.7 -1 68 33 -• Generates broad tags (e.g., F 4.75 5 -Agave c 7 -#44475a T 769.5 421.7 \ -1 28 12 -\"hardware\", F 4.75 5 -Agave c 7 -#44475a T 787.5 416.7 -1 32 14 -\"electronics\") ", fillcolor="#FFF4E5", fontsize=4.75, height=0.73611, href="#How_It_Works", label=<
How It Works
•  Level 1 creates detailed clusters (e.g.,
"screws", "bolts",
"cables")
•  Level 2 computes cluster centroids
• Clusters the centroids into
super-clusters
• Generates broad tags (e.g.,
"hardware",
"electronics")
>, pos="819.5,441.5", shape=plain, style=filled, width=1.4167]; Hierarchical_Tagging -> How_It_Works [_draw_="S 15 -setlinewidth(2) S 7 -tapered c 9 -#fffffe00 C 7 -#282a36 P 42 646.3 442 652.57 442.05 658.89 442.1 665.25 442.16 671.64 442.21 \ 678.06 442.26 684.47 442.31 690.88 442.37 697.27 442.42 703.63 442.47 709.94 442.52 716.2 442.57 722.38 442.63 728.49 442.68 734.5 \ 442.73 740.4 442.77 746.18 442.82 751.83 442.87 757.34 442.91 762.69 442.96 767.87 443 767.87 441 762.69 441.04 757.34 441.09 751.83 \ 441.13 746.18 441.18 740.4 441.23 734.5 441.27 728.49 441.32 722.38 441.37 716.2 441.43 709.94 441.48 703.63 441.53 697.27 441.58 \ 690.88 441.63 684.47 441.69 678.06 441.74 671.64 441.79 665.25 441.84 658.89 441.9 652.57 441.95 646.3 442 ", _tdraw_="S 15 -setlinewidth(2) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 4 646.14 442 640.14 446 634.14 442 640.14 438 ", arrowsize=1.0, arrowtail=diamond, constrained=false, dir=back, href="#Hierarchical_Tagging👉 How_It_Works", penwidth=2, pos="s,634.14,442 646.3,442 687.86,442 733.93,442 767.87,442", reverse=false, style=tapered, tooltip="*= consistsOf", type=consistsOf]; Output_Format [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#fff4e5 P 4 845.5 397 793.5 397 793.5 348 845.5 348 ", _ldraw_="F 4.75 5 -Agave c 7 -#44475a t 1 T 794.5 392.7 -1 30 13 -Output Format F 4.75 5 -Agave c 7 -#ff79c6 t 0 T 794.5 383.2 -1 46 21 - { \"\ description\": F 4.75 5 -Agave c 7 -#ff79c6 T 794.5 378.45 -1 21 9 -\"...\", F 4.75 5 -Agave c 7 -#ff79c6 T 794.5 373.7 -1 43 19 \ -\"cluster_l1\": 5, F 4.75 5 -Agave c 7 -#ff79c6 T 794.5 368.95 -1 46 20 -\"tags_l1\": \"screws, F 4.75 5 -Agave c 7 -#ff79c6 T 794.5 \ 364.2 -1 32 14 -fasteners\", F 4.75 5 -Agave c 7 -#ff79c6 T 794.5 359.45 -1 43 19 -\"cluster_l2\": 1, F 4.75 5 -Agave c 7 -#ff79c6 \ T 794.5 354.7 -1 50 22 -\"tags_l2\": \"hardware, F 4.75 5 -Agave c 7 -#ff79c6 T 794.5 349.95 -1 21 10 -tools\" }  ", fillcolor="#FFF4E5", fontsize=4.75, height=0.68056, href="#Output_Format", label=<
Output Format

 { "description":
"...",
"cluster_l1": 5,
"tags_l1": "screws,
fasteners",
"cluster_l2": 1,
"tags_l2": "hardware,
tools" } 

>, pos="819.5,372.5", shape=plain, style=filled, width=0.72222]; Hierarchical_Tagging -> Output_Format [_draw_="S 15 -setlinewidth(2) S 7 -tapered c 9 -#fffffe00 C 7 -#282a36 P 42 615.17 423.98 624.11 421.79 633.31 419.53 642.73 417.21 652.33 \ 414.86 662.06 412.47 671.88 410.06 681.74 407.64 691.59 405.22 701.4 402.81 711.11 400.43 720.68 398.08 730.06 395.77 739.22 393.52 \ 748.1 391.34 756.66 389.24 764.85 387.23 772.64 385.32 779.97 383.52 786.79 381.84 793.07 380.3 792.59 378.36 786.32 379.97 779.51 \ 381.72 772.21 383.6 764.44 385.6 756.27 387.7 747.73 389.89 738.88 392.17 729.75 394.52 720.39 396.93 710.84 399.38 701.16 401.87 \ 691.38 404.38 681.56 406.91 671.72 409.44 661.93 411.96 652.23 414.45 642.66 416.91 633.26 419.33 624.08 421.69 615.17 423.98 ", _tdraw_="S 15 -setlinewidth(2) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 4 615.04 424.01 610.19 429.36 603.4 426.94 608.24 421.6 ", arrowsize=1.0, arrowtail=diamond, constrained=false, dir=back, href="#Hierarchical_Tagging👉 Output_Format", penwidth=2, pos="s,603.4,426.94 615.17,423.98 673.67,409.28 752.93,389.36 792.83,379.33", reverse=false, style=tapered, tooltip="*= consistsOf", type=consistsOf]; Use_Cases [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#fff4e5 P 4 850 329.5 789 329.5 789 305.5 850 305.5 ", _ldraw_="F 4.75 5 -Agave c 7 -#44475a t 1 T 790.5 325.7 -1 21 9 -Use Cases F 4.75 5 -Agave c 7 -#44475a t 0 T 790.5 317.7 -1 50 25 -• multi-level \ taxonomy F 4.75 5 -Agave c 7 -#44475a T 790.5 312.7 -1 52 26 -• drill-down navigation F 4.75 5 -Agave c 7 -#44475a T 790.5 307.7 \ -1 59 29 -• broad overview + details ", fillcolor="#FFF4E5", fontsize=4.75, height=0.33333, href="#Use_Cases", label=<
Use Cases
• multi-level taxonomy
• drill-down navigation
• broad overview + details
>, pos="819.5,317.5", shape=plain, style=filled, width=0.84722]; Hierarchical_Tagging -> Use_Cases [_draw_="S 15 -setlinewidth(2) S 7 -tapered c 9 -#fffffe00 C 7 -#282a36 P 82 571.05 419.43 575.74 415.83 580.73 412.07 585.99 408.16 591.5 \ 404.13 597.27 399.99 603.26 395.78 609.46 391.51 615.85 387.21 622.42 382.88 629.15 378.57 636.03 374.29 643.04 370.05 650.16 365.89 \ 657.37 361.82 664.66 357.87 672.02 354.05 679.42 350.39 686.85 346.91 694.29 343.64 701.73 340.59 706.02 338.96 710.38 337.41 714.81 \ 335.95 719.29 334.56 723.82 333.25 728.39 332.02 732.97 330.86 737.55 329.77 742.13 328.74 746.69 327.79 751.22 326.9 755.71 326.07 \ 760.14 325.3 764.5 324.58 768.78 323.93 772.96 323.33 777.04 322.77 781 322.27 784.83 321.81 788.51 321.4 788.29 319.42 784.59 319.86 \ 780.75 320.35 776.78 320.89 772.69 321.47 768.5 322.11 764.21 322.81 759.84 323.56 755.4 324.37 750.9 325.24 746.36 326.17 741.78 \ 327.17 737.19 328.23 732.59 329.37 728 330.57 723.43 331.85 718.88 333.2 714.38 334.64 709.94 336.15 705.56 337.74 701.27 339.41 \ 693.82 342.54 686.38 345.89 678.95 349.44 671.56 353.16 664.22 357.05 656.95 361.07 649.76 365.21 642.67 369.43 635.69 373.73 628.84 \ 378.08 622.14 382.45 615.6 386.83 609.23 391.19 603.07 395.51 597.11 399.78 591.38 403.96 585.89 408.04 580.67 411.99 575.71 415.79 \ 571.05 419.43 ", _tdraw_="S 15 -setlinewidth(2) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 4 571.05 419.43 568.83 426.29 561.64 426.88 563.86 420.02 ", arrowsize=1.0, arrowtail=diamond, constrained=false, dir=back, href="#Hierarchical_Tagging👉 Use_Cases", penwidth=2, pos="s,561.64,426.88 571.05,419.43 601.22,395.92 651.92,359.8 701.5,340 729.79,328.7 764.31,323.11 788.4,320.41", reverse=false, style=tapered, tooltip="*= consistsOf", type=consistsOf]; X__Semantic_Search [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#ffffff P 4 875.5 287.5 763.5 287.5 763.5 235.5 875.5 235.5 ", _ldraw_="F 4.75 5 -Agave c 7 -#44475a t 1 T 764.5 283.7 -1 41 18 -1. Semantic Search F 4.75 5 -Agave c 7 -#44475a t 0 T 764.5 278.95 -1 68 \ 30 -Find documents matching query F 4.75 5 -Agave c 7 -#44475a T 764.5 274.2 -1 30 13 -semantically. F 4.75 5 -Agave c 7 -#ff79c6 \ T 764.5 269.45 -1 82 37 - ./llm-tagger.sh search data.ndjson F 4.75 5 -Agave c 7 -#ff79c6 T 764.5 264.7 -1 48 22 -'hardware repair' \ 10  F 4.75 5 -Agave c 7 -#44475a T 764.5 259.95 -1 3 1 - F 4.75 5 -Agave c 7 -#44475a t 4 T 767.5 259.95 -1 16 7 -Output: F 4.75 \ 5 -Agave c 7 -#44475a t 0 T 783.5 259.95 -1 91 40 - Top matching documents with similarity F 4.75 5 -Agave c 7 -#44475a T 798.5 \ 255.2 -1 16 7 -scores F 4.75 5 -Agave c 7 -#44475a t 4 T 814.5 255.2 -1 23 10 -Use cases: F 4.75 5 -Agave c 7 -#44475a t 0 T 837.5 \ 255.2 -1 3 1 - F 4.75 5 -Agave c 7 -#44475a T 764.5 247.7 -1 57 28 -• find relevant documents F 4.75 5 -Agave c 7 -#44475a T \ 764.5 242.7 -1 43 22 -• content discovery F 4.75 5 -Agave c 7 -#44475a T 764.5 237.7 -1 52 26 -• query-based filtering ", fillcolor="#FFFFFF", fontsize=4.75, height=0.72222, href="#1__Semantic_Search", label=<
1. Semantic Search
Find documents matching query
semantically.
 ./llm-tagger.sh search data.ndjson
'hardware repair' 10 

Output: Top matching documents with similarity
scores Use cases:
• find relevant documents
• content discovery
• query-based filtering
>, pos="819.5,261.5", shape=plain, style=filled, width=1.5556]; Additional_Tools -> X__Semantic_Search [_draw_="S 15 -setlinewidth(2) S 7 -tapered c 9 -#fffffe00 C 7 -#282a36 P 42 619.05 214.89 625.94 216.57 632.97 218.29 640.14 220.04 647.41 \ 221.81 654.78 223.61 662.22 225.42 669.7 227.25 677.22 229.08 684.74 230.92 692.25 232.75 699.73 234.57 707.16 236.39 714.52 238.18 \ 721.79 239.96 728.95 241.7 735.97 243.42 742.84 245.09 749.54 246.73 756.05 248.32 762.34 249.85 762.8 247.91 756.49 246.46 749.96 \ 244.96 743.24 243.41 736.35 241.83 729.3 240.21 722.12 238.56 714.83 236.89 707.45 235.19 699.99 233.48 692.49 231.76 684.95 230.02 \ 677.4 228.29 669.86 226.56 662.35 224.84 654.89 223.12 647.5 221.43 640.21 219.75 633.02 218.1 625.96 216.48 619.05 214.89 ", _tdraw_="S 15 -setlinewidth(2) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 4 618.85 214.84 612.09 217.35 607.17 212.08 613.93 209.57 ", arrowsize=1.0, arrowtail=diamond, constrained=false, dir=back, href="#Additional_Tools👉 1__Semantic_Search", penwidth=2, pos="s,607.17,212.08 619.05,214.89 664.48,225.65 721.3,239.1 762.57,248.88", reverse=false, style=tapered, tooltip="*= consistsOf", type=consistsOf]; X__Find_Similar_Documents [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#ffffff P 4 875 217.5 764 217.5 764 175.5 875 175.5 ", _ldraw_="F 4.75 5 -Agave c 7 -#44475a t 1 T 765.5 213.7 -1 57 25 -2. Find Similar Documents F 4.75 5 -Agave c 7 -#44475a t 0 T 765.5 208.95 \ -1 84 37 -Detect duplicates or near-duplicates. F 4.75 5 -Agave c 7 -#ff79c6 T 765.5 204.2 -1 57 26 - ./llm-tagger.sh similar \ F 4.75 5 -Agave c 7 -#ff79c6 T 765.5 199.45 -1 39 18 -data.ndjson 0.95  F 4.75 5 -Agave c 7 -#44475a T 765.5 194.7 -1 3 1 - F \ 4.75 5 -Agave c 7 -#44475a t 4 T 768.5 194.7 -1 16 7 -Output: F 4.75 5 -Agave c 7 -#44475a t 0 T 784.5 194.7 -1 64 28 - Pairs of \ similar documents F 4.75 5 -Agave c 7 -#44475a t 4 T 848.5 194.7 -1 23 10 -Use cases: F 4.75 5 -Agave c 7 -#44475a t 0 T 871.5 \ 194.7 -1 3 1 - F 4.75 5 -Agave c 7 -#44475a T 765.5 187.7 -1 48 24 -• duplicate detection F 4.75 5 -Agave c 7 -#44475a T 765.5 \ 182.7 -1 32 17 -• data quality F 4.75 5 -Agave c 7 -#44475a T 765.5 177.7 -1 48 24 -• identify redundancy ", fillcolor="#FFFFFF", fontsize=4.75, height=0.58333, href="#2__Find_Similar_Documents", label=<
2. Find Similar Documents
Detect duplicates or near-duplicates.
 ./llm-tagger.sh similar
data.ndjson 0.95 

Output: Pairs of similar documents Use cases:
• duplicate detection
• data quality
• identify redundancy
>, pos="819.5,196.5", shape=plain, style=filled, width=1.5417]; Additional_Tools -> X__Find_Similar_Documents [_draw_="S 15 -setlinewidth(2) S 7 -tapered c 9 -#fffffe00 C 7 -#282a36 P 42 639.44 197 645.7 197.05 652.02 197.1 658.41 197.15 664.84 197.21 \ 671.3 197.26 677.78 197.31 684.26 197.36 690.74 197.41 697.19 197.47 703.62 197.52 710 197.57 716.32 197.62 722.57 197.67 728.73 \ 197.72 734.8 197.77 740.76 197.82 746.59 197.87 752.29 197.91 757.84 197.96 763.23 198 763.23 196 757.84 196.04 752.29 196.09 746.59 \ 196.13 740.76 196.18 734.8 196.23 728.73 196.28 722.57 196.33 716.32 196.38 710 196.43 703.62 196.48 697.19 196.53 690.74 196.59 \ 684.26 196.64 677.78 196.69 671.3 196.74 664.84 196.79 658.41 196.85 652.02 196.9 645.7 196.95 639.44 197 ", _tdraw_="S 15 -setlinewidth(2) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 4 639.35 197 633.35 201 627.35 197 633.35 193 ", arrowsize=1.0, arrowtail=diamond, constrained=false, dir=back, href="#Additional_Tools👉 2__Find_Similar_Documents", penwidth=2, pos="s,627.35,197 639.44,197 680.89,197 727.87,197 763.23,197", reverse=false, style=tapered, tooltip="*= consistsOf", type=consistsOf]; X__Custom_Prompts [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#ffffff P 4 861.5 157.5 777.5 157.5 777.5 65.5 861.5 65.5 ", _ldraw_="F 4.75 5 -Agave c 7 -#44475a t 1 T 778.5 153.7 -1 39 17 -3. Custom Prompts F 4.75 5 -Agave c 7 -#44475a t 0 T 778.5 148.95 -1 82 \ 36 -Ask different questions to clusters. F 4.75 5 -Agave c 7 -#ff79c6 T 778.5 144.2 -1 70 32 - ./llm-tagger.sh custom-prompt F \ 4.75 5 -Agave c 7 -#ff79c6 T 778.5 139.45 -1 61 29 -tagged.ndjson 'Zhrň hlavné F 4.75 5 -Agave c 7 -#ff79c6 T 778.5 134.7 -1 \ 43 21 -témy:\n{examples}'  F 4.75 5 -Agave c 7 -#44475a T 798 129.95 -1 3 1 - F 4.75 5 -Agave c 7 -#44475a t 4 T 801 129.95 -1 \ 37 16 -Prompt examples: F 4.75 5 -Agave c 7 -#44475a t 0 T 838 129.95 -1 3 1 - F 4.75 5 -Agave c 7 -#44475a T 778.5 123.7 -1 5 \ 5 -•  F 4.75 5 -Agave c 7 -#ff79c6 T 783.5 123.7 -1 32 17 - 'Zhrň hlavné F 4.75 5 -Agave c 7 -#ff79c6 T 778.5 118.95 -1 43 \ 21 -témy:\n{examples}'  F 4.75 5 -Agave c 7 -#44475a T 821.5 118.95 -1 25 11 -- summaries F 4.75 5 -Agave c 7 -#44475a T 778.5 \ 114.7 -1 5 5 -•  F 4.75 5 -Agave c 7 -#ff79c6 T 783.5 114.7 -1 32 15 - 'Identifikuj F 4.75 5 -Agave c 7 -#ff79c6 T 778.5 109.95 \ -1 48 23 -riziká:\n{examples}'  F 4.75 5 -Agave c 7 -#44475a T 826.5 109.95 -1 34 15 -- risk analysis F 4.75 5 -Agave c 7 -#44475a \ T 778.5 105.7 -1 5 5 -•  F 4.75 5 -Agave c 7 -#ff79c6 T 783.5 105.7 -1 34 17 - 'Aké patterny F 4.75 5 -Agave c 7 -#ff79c6 \ T 778.5 100.95 -1 46 23 -vidíš:\n{examples}'  F 4.75 5 -Agave c 7 -#44475a T 824.5 100.95 -1 23 10 -- insights F 4.75 5 -Agave \ c 7 -#44475a T 778.5 96.7 -1 5 5 -•  F 4.75 5 -Agave c 7 -#ff79c6 T 783.5 96.7 -1 25 14 - 'Prečo sú F 4.75 5 -Agave c 7 -#\ ff79c6 T 778.5 91.95 -1 55 26 -zoskupené:\n{examples}'  F 4.75 5 -Agave c 7 -#44475a T 833.5 91.95 -1 25 11 -- reasoning F 4.75 \ 5 -Agave c 7 -#44475a T 778.5 85.7 -1 3 1 - F 4.75 5 -Agave c 7 -#44475a t 4 T 781.5 85.7 -1 23 10 -Use cases: F 4.75 5 -Agave \ c 7 -#44475a t 0 T 804.5 85.7 -1 3 1 - F 4.75 5 -Agave c 7 -#44475a T 778.5 77.7 -1 55 27 -• different perspectives F 4.75 5 \ -Agave c 7 -#44475a T 778.5 72.7 -1 50 25 -• specialized analysis F 4.75 5 -Agave c 7 -#44475a T 778.5 67.7 -1 39 20 -• custom \ insights ", fillcolor="#FFFFFF", fontsize=4.75, height=1.2778, href="#3__Custom_Prompts", label=<
3. Custom Prompts
Ask different questions to clusters.
 ./llm-tagger.sh custom-prompt
tagged.ndjson 'Zhrň hlavné
témy:\n{examples}' 

Prompt examples:
•  'Zhrň hlavné
témy:\n{examples}' 
- summaries
•  'Identifikuj
riziká:\n{examples}' 
- risk analysis
•  'Aké patterny
vidíš:\n{examples}' 
- insights
•  'Prečo sú
zoskupené:\n{examples}' 
- reasoning
Use cases:
• different perspectives
• specialized analysis
• custom insights
>, pos="819.5,111.5", shape=plain, style=filled, width=1.1667]; Additional_Tools -> X__Custom_Prompts [_draw_="S 15 -setlinewidth(2) S 7 -tapered c 9 -#fffffe00 C 7 -#282a36 P 42 603.44 178.44 611.49 176 619.83 173.46 628.43 170.85 637.25 \ 168.17 646.26 165.44 655.41 162.66 664.66 159.85 673.98 157.02 683.33 154.18 692.67 151.35 701.97 148.53 711.17 145.73 720.25 142.97 \ 729.16 140.27 737.88 137.62 746.35 135.05 754.54 132.56 762.41 130.17 769.93 127.89 777.06 125.73 776.46 123.81 769.36 126.06 761.87 \ 128.42 754.02 130.9 745.86 133.48 737.42 136.14 728.74 138.88 719.85 141.69 710.8 144.55 701.63 147.44 692.37 150.36 683.06 153.3 \ 673.74 156.24 664.45 159.18 655.23 162.09 646.11 164.97 637.14 167.8 628.35 170.58 619.77 173.28 611.46 175.91 603.44 178.44 ", _tdraw_="S 15 -setlinewidth(2) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 4 603.4 178.45 598.85 184.05 591.94 182 596.49 176.4 ", arrowsize=1.0, arrowtail=diamond, constrained=false, dir=back, href="#Additional_Tools👉 3__Custom_Prompts", penwidth=2, pos="s,591.94,182 603.44,178.44 655.91,162.19 730.75,139.02 776.76,124.77", reverse=false, style=tapered, tooltip="*= consistsOf", type=consistsOf]; X__Visualize_Embeddings [_draw_="S 17 -setlinewidth(0.8) c 9 -#fffffe00 C 7 -#ffffff P 4 937 47 702 47 702 0 937 0 ", _ldraw_="F 4.75 5 -Agave c 7 -#44475a t 1 T 703.5 42.7 -1 52 23 -4. Visualize Embeddings F 4.75 5 -Agave c 7 -#44475a t 0 T 703.5 37.95 -1 \ 93 41 -Interactive 2D visualization of document F 4.75 5 -Agave c 7 -#44475a T 703.5 33.2 -1 14 6 -space. F 4.75 5 -Agave c 7 -#\ ff79c6 T 703.5 28.45 -1 61 28 - ./llm-tagger.sh visualize F 4.75 5 -Agave c 7 -#ff79c6 T 703.5 23.7 -1 59 27 -tagged.ndjson output.html  \ F 4.75 5 -Agave c 7 -#44475a T 703.5 18.95 -1 3 1 - F 4.75 5 -Agave c 7 -#44475a t 4 T 706.5 18.95 -1 16 7 -Output: F 4.75 5 -Agave \ c 7 -#44475a t 0 T 722.5 18.95 -1 68 30 - Interactive HTML with plotly F 4.75 5 -Agave c 7 -#44475a t 4 T 790.5 18.95 -1 30 13 \ -Requirements: F 4.75 5 -Agave c 7 -#44475a t 0 T 820.5 18.95 -1 3 1 - F 4.75 5 -Agave c 7 -#ff79c6 T 823.5 18.95 -1 55 26 - pip \ install umap-learn  F 4.75 5 -Agave c 7 -#44475a T 878.5 18.95 -1 32 14 -in Dockerfile F 4.75 5 -Agave c 7 -#44475a t 4 T 910.5 \ 18.95 -1 23 10 -Use cases: F 4.75 5 -Agave c 7 -#44475a t 0 T 933.5 18.95 -1 3 1 - F 4.75 5 -Agave c 7 -#44475a T 703.5 11.7 -1 \ 64 31 -• explore document landscape F 4.75 5 -Agave c 7 -#44475a T 703.5 6.7 -1 61 30 -• verify clustering quality F 4.75 \ 5 -Agave c 7 -#44475a T 703.5 1.7 -1 55 27 -• find outliers visually ", fillcolor="#FFFFFF", fontsize=4.75, height=0.65278, href="#4__Visualize_Embeddings", label=<
4. Visualize Embeddings
Interactive 2D visualization of document
space.
 ./llm-tagger.sh visualize
tagged.ndjson output.html 

Output: Interactive HTML with plotly Requirements:  pip install umap-learn in Dockerfile Use cases:
• explore document landscape
• verify clustering quality
• find outliers visually
>, pos="819.5,23.5", shape=plain, style=filled, width=3.2639]; Additional_Tools -> X__Visualize_Embeddings [_draw_="S 15 -setlinewidth(2) S 7 -tapered c 9 -#fffffe00 C 7 -#282a36 P 82 564.45 172.61 568.88 167.78 573.66 162.66 578.78 157.26 584.23 \ 151.63 589.98 145.81 596.03 139.82 602.35 133.69 608.93 127.47 615.75 121.19 622.79 114.88 630.04 108.58 637.49 102.32 645.11 96.13 \ 652.88 90.05 660.8 84.12 668.84 78.36 677 72.81 685.24 67.51 693.55 62.49 701.93 57.78 702.88 57.27 703.84 56.76 704.81 56.26 705.78 \ 55.76 706.76 55.27 707.74 54.78 708.73 54.3 709.72 53.83 710.72 53.35 711.72 52.89 712.73 52.42 713.74 51.96 714.75 51.51 715.77 \ 51.06 716.79 50.62 717.82 50.18 718.84 49.75 719.88 49.32 720.91 48.89 721.95 48.47 721.19 46.62 720.15 47.05 719.11 47.49 718.07 \ 47.94 717.04 48.39 716.01 48.84 714.98 49.3 713.96 49.76 712.94 50.23 711.93 50.7 710.92 51.17 709.91 51.66 708.91 52.14 707.91 \ 52.64 706.92 53.13 705.93 53.63 704.95 54.14 703.97 54.65 703 55.17 702.03 55.69 701.07 56.22 692.7 61.04 684.39 66.16 676.17 71.57 \ 668.04 77.22 660.03 83.07 652.15 89.1 644.42 95.27 636.84 101.55 629.45 107.89 622.25 114.28 615.26 120.66 608.5 127.02 601.97 133.31 \ 595.71 139.5 589.72 145.55 584.02 151.44 578.63 157.12 573.56 162.57 568.83 167.74 564.45 172.61 ", _tdraw_="S 15 -setlinewidth(2) S 5 -solid c 7 -#282a36 C 7 -#282a36 P 4 564.18 172.92 563.19 180.06 556.22 181.9 557.2 174.76 ", arrowsize=1.0, arrowtail=diamond, constrained=false, dir=back, href="#Additional_Tools👉 4__Visualize_Embeddings", penwidth=2, pos="s,556.22,181.9 564.45,172.61 592.57,141.38 645.5,87.631 701.5,57 707.86,53.52 714.63,50.378 721.57,47.547", reverse=false, style=tapered, tooltip="*= consistsOf", type=consistsOf]; } }