updates
Browse files- app.py +4 -4
- modular_graph_and_candidates.py +36 -3
app.py
CHANGED
|
@@ -76,26 +76,26 @@ with gr.Blocks(css=CUSTOM_CSS) as demo:
|
|
| 76 |
repo_in = gr.Text(value=HF_MAIN_REPO, label="Repo / fork URL")
|
| 77 |
thresh = gr.Slider(0.50, 0.95, value=0.5, step=0.01, label="Similarity ≥")
|
| 78 |
multi_cb = gr.Checkbox(label="Only multimodal models")
|
| 79 |
-
|
| 80 |
go_btn = gr.Button("Build graph")
|
| 81 |
|
| 82 |
graph_html_out = gr.HTML(elem_id="graph_html", show_label=False)
|
| 83 |
graph_json_out = gr.File(label="Download graph.json")
|
| 84 |
|
| 85 |
-
go_btn.click(run_graph, [repo_in, thresh, multi_cb
|
| 86 |
|
| 87 |
with gr.Tab("Chronological Timeline"):
|
| 88 |
with gr.Row():
|
| 89 |
timeline_repo_in = gr.Text(value=HF_MAIN_REPO, label="Repo / fork URL")
|
| 90 |
timeline_thresh = gr.Slider(0.50, 0.95, value=0.5, step=0.01, label="Similarity ≥")
|
| 91 |
timeline_multi_cb = gr.Checkbox(label="Only multimodal models")
|
| 92 |
-
|
| 93 |
timeline_btn = gr.Button("Build timeline")
|
| 94 |
|
| 95 |
timeline_html_out = gr.HTML(elem_id="timeline_html", show_label=False)
|
| 96 |
timeline_json_out = gr.File(label="Download timeline.json")
|
| 97 |
|
| 98 |
-
timeline_btn.click(run_timeline, [timeline_repo_in, timeline_thresh, timeline_multi_cb
|
| 99 |
|
| 100 |
if __name__ == "__main__":
|
| 101 |
demo.launch(allowed_paths=["static"])
|
|
|
|
| 76 |
repo_in = gr.Text(value=HF_MAIN_REPO, label="Repo / fork URL")
|
| 77 |
thresh = gr.Slider(0.50, 0.95, value=0.5, step=0.01, label="Similarity ≥")
|
| 78 |
multi_cb = gr.Checkbox(label="Only multimodal models")
|
| 79 |
+
gr.Markdown("**Embedding method:** TBD")
|
| 80 |
go_btn = gr.Button("Build graph")
|
| 81 |
|
| 82 |
graph_html_out = gr.HTML(elem_id="graph_html", show_label=False)
|
| 83 |
graph_json_out = gr.File(label="Download graph.json")
|
| 84 |
|
| 85 |
+
go_btn.click(lambda repo, thresh, multi: run_graph(repo, thresh, multi, "jaccard"), [repo_in, thresh, multi_cb], [graph_html_out, graph_json_out])
|
| 86 |
|
| 87 |
with gr.Tab("Chronological Timeline"):
|
| 88 |
with gr.Row():
|
| 89 |
timeline_repo_in = gr.Text(value=HF_MAIN_REPO, label="Repo / fork URL")
|
| 90 |
timeline_thresh = gr.Slider(0.50, 0.95, value=0.5, step=0.01, label="Similarity ≥")
|
| 91 |
timeline_multi_cb = gr.Checkbox(label="Only multimodal models")
|
| 92 |
+
gr.Markdown("**Embedding method:** TBD")
|
| 93 |
timeline_btn = gr.Button("Build timeline")
|
| 94 |
|
| 95 |
timeline_html_out = gr.HTML(elem_id="timeline_html", show_label=False)
|
| 96 |
timeline_json_out = gr.File(label="Download timeline.json")
|
| 97 |
|
| 98 |
+
timeline_btn.click(lambda repo, thresh, multi: run_timeline(repo, thresh, multi, "jaccard"), [timeline_repo_in, timeline_thresh, timeline_multi_cb], [timeline_html_out, timeline_json_out])
|
| 99 |
|
| 100 |
if __name__ == "__main__":
|
| 101 |
demo.launch(allowed_paths=["static"])
|
modular_graph_and_candidates.py
CHANGED
|
@@ -740,7 +740,7 @@ node.filter(d => d.cls !== 'base').append('circle').attr('r', d => 20*d.sz);
|
|
| 740 |
node.append('text')
|
| 741 |
.attr('class','node-label')
|
| 742 |
.attr('dy','-2.4em')
|
| 743 |
-
.style('font-size', d => d.cls === 'base' ? '
|
| 744 |
.style('font-weight', d => d.cls === 'base' ? 'bold' : 'normal')
|
| 745 |
.text(d => d.id);
|
| 746 |
|
|
@@ -837,7 +837,7 @@ svg{ width:100vw; height:100vh; }
|
|
| 837 |
pointer-events:none;
|
| 838 |
text-anchor:middle;
|
| 839 |
font-weight:600;
|
| 840 |
-
font-size:
|
| 841 |
paint-order:stroke fill;
|
| 842 |
stroke:var(--outline);
|
| 843 |
stroke-width:3px;
|
|
@@ -886,13 +886,27 @@ svg{ width:100vw; height:100vh; }
|
|
| 886 |
stroke-opacity: 0.6;
|
| 887 |
}
|
| 888 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 889 |
.timeline-label {
|
| 890 |
fill: var(--muted);
|
| 891 |
-
font-size:
|
| 892 |
font-weight: 600;
|
| 893 |
text-anchor: middle;
|
| 894 |
}
|
| 895 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 896 |
/* Enhanced controls panel */
|
| 897 |
#controls{
|
| 898 |
position:fixed; top:20px; left:20px;
|
|
@@ -972,6 +986,8 @@ if (timeExtent[0] && timeExtent[1]) {
|
|
| 972 |
|
| 973 |
// Enhanced year markers with better spacing
|
| 974 |
const years = d3.timeYear.range(new Date(timeExtent[0] * 1000), new Date(timeExtent[1] * 1000 + 365*24*60*60*1000));
|
|
|
|
|
|
|
| 975 |
timelineG.selectAll('.timeline-tick')
|
| 976 |
.data(years)
|
| 977 |
.join('line')
|
|
@@ -981,6 +997,15 @@ if (timeExtent[0] && timeExtent[1]) {
|
|
| 981 |
.attr('x2', d => timeScale(d))
|
| 982 |
.attr('y2', timelineY + 15);
|
| 983 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 984 |
timelineG.selectAll('.timeline-label')
|
| 985 |
.data(years)
|
| 986 |
.join('text')
|
|
@@ -988,6 +1013,14 @@ if (timeExtent[0] && timeExtent[1]) {
|
|
| 988 |
.attr('x', d => timeScale(d))
|
| 989 |
.attr('y', timelineY + 30)
|
| 990 |
.text(d => d.getFullYear());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 991 |
}
|
| 992 |
|
| 993 |
function handleZoom(event) {
|
|
|
|
| 740 |
node.append('text')
|
| 741 |
.attr('class','node-label')
|
| 742 |
.attr('dy','-2.4em')
|
| 743 |
+
.style('font-size', d => d.cls === 'base' ? '50px' : '45px')
|
| 744 |
.style('font-weight', d => d.cls === 'base' ? 'bold' : 'normal')
|
| 745 |
.text(d => d.id);
|
| 746 |
|
|
|
|
| 837 |
pointer-events:none;
|
| 838 |
text-anchor:middle;
|
| 839 |
font-weight:600;
|
| 840 |
+
font-size:25px;
|
| 841 |
paint-order:stroke fill;
|
| 842 |
stroke:var(--outline);
|
| 843 |
stroke-width:3px;
|
|
|
|
| 886 |
stroke-opacity: 0.6;
|
| 887 |
}
|
| 888 |
|
| 889 |
+
.timeline-month-tick {
|
| 890 |
+
stroke: var(--timeline-line);
|
| 891 |
+
stroke-width: 1px;
|
| 892 |
+
stroke-opacity: 0.4;
|
| 893 |
+
}
|
| 894 |
+
|
| 895 |
.timeline-label {
|
| 896 |
fill: var(--muted);
|
| 897 |
+
font-size: 20px;
|
| 898 |
font-weight: 600;
|
| 899 |
text-anchor: middle;
|
| 900 |
}
|
| 901 |
|
| 902 |
+
.timeline-month-label {
|
| 903 |
+
fill: var(--muted);
|
| 904 |
+
font-size: 16px;
|
| 905 |
+
font-weight: 400;
|
| 906 |
+
text-anchor: middle;
|
| 907 |
+
opacity: 0.7;
|
| 908 |
+
}
|
| 909 |
+
|
| 910 |
/* Enhanced controls panel */
|
| 911 |
#controls{
|
| 912 |
position:fixed; top:20px; left:20px;
|
|
|
|
| 986 |
|
| 987 |
// Enhanced year markers with better spacing
|
| 988 |
const years = d3.timeYear.range(new Date(timeExtent[0] * 1000), new Date(timeExtent[1] * 1000 + 365*24*60*60*1000));
|
| 989 |
+
const months = d3.timeMonth.range(new Date(timeExtent[0] * 1000), new Date(timeExtent[1] * 1000 + 365*24*60*60*1000));
|
| 990 |
+
|
| 991 |
timelineG.selectAll('.timeline-tick')
|
| 992 |
.data(years)
|
| 993 |
.join('line')
|
|
|
|
| 997 |
.attr('x2', d => timeScale(d))
|
| 998 |
.attr('y2', timelineY + 15);
|
| 999 |
|
| 1000 |
+
timelineG.selectAll('.timeline-month-tick')
|
| 1001 |
+
.data(months)
|
| 1002 |
+
.join('line')
|
| 1003 |
+
.attr('class', 'timeline-month-tick')
|
| 1004 |
+
.attr('x1', d => timeScale(d))
|
| 1005 |
+
.attr('y1', timelineY - 8)
|
| 1006 |
+
.attr('x2', d => timeScale(d))
|
| 1007 |
+
.attr('y2', timelineY + 8);
|
| 1008 |
+
|
| 1009 |
timelineG.selectAll('.timeline-label')
|
| 1010 |
.data(years)
|
| 1011 |
.join('text')
|
|
|
|
| 1013 |
.attr('x', d => timeScale(d))
|
| 1014 |
.attr('y', timelineY + 30)
|
| 1015 |
.text(d => d.getFullYear());
|
| 1016 |
+
|
| 1017 |
+
timelineG.selectAll('.timeline-month-label')
|
| 1018 |
+
.data(months.filter((d, i) => i % 3 === 0))
|
| 1019 |
+
.join('text')
|
| 1020 |
+
.attr('class', 'timeline-month-label')
|
| 1021 |
+
.attr('x', d => timeScale(d))
|
| 1022 |
+
.attr('y', timelineY + 45)
|
| 1023 |
+
.text(d => d.toLocaleDateString('en', { month: 'short' }));
|
| 1024 |
}
|
| 1025 |
|
| 1026 |
function handleZoom(event) {
|