Soha85 commited on
Commit
2379e34
Β·
verified Β·
1 Parent(s): 097ba1c

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +541 -19
index.html CHANGED
@@ -1,19 +1,541 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>RAG Types Visualization</title>
7
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.9.1/chart.min.js"></script>
8
+ <style>
9
+ * {
10
+ margin: 0;
11
+ padding: 0;
12
+ box-sizing: border-box;
13
+ }
14
+
15
+ body {
16
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
17
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
18
+ padding: 20px;
19
+ min-height: 100vh;
20
+ }
21
+
22
+ .container {
23
+ max-width: 1400px;
24
+ margin: 0 auto;
25
+ }
26
+
27
+ h1 {
28
+ text-align: center;
29
+ color: white;
30
+ margin-bottom: 30px;
31
+ font-size: 2.5em;
32
+ text-shadow: 2px 2px 4px rgba(0,0,0,0.3);
33
+ }
34
+
35
+ .grid {
36
+ display: grid;
37
+ grid-template-columns: repeat(auto-fit, minmax(450px, 1fr));
38
+ gap: 25px;
39
+ margin-bottom: 25px;
40
+ }
41
+
42
+ .card {
43
+ background: white;
44
+ border-radius: 15px;
45
+ padding: 25px;
46
+ box-shadow: 0 10px 30px rgba(0,0,0,0.2);
47
+ transition: transform 0.3s ease;
48
+ }
49
+
50
+ .card:hover {
51
+ transform: translateY(-5px);
52
+ }
53
+
54
+ .card h2 {
55
+ color: #667eea;
56
+ margin-bottom: 20px;
57
+ font-size: 1.5em;
58
+ border-bottom: 3px solid #667eea;
59
+ padding-bottom: 10px;
60
+ }
61
+
62
+ .chart-container {
63
+ position: relative;
64
+ height: 400px;
65
+ }
66
+
67
+ .timeline-card {
68
+ grid-column: 1 / -1;
69
+ }
70
+
71
+ .workflow-selector {
72
+ margin-bottom: 20px;
73
+ }
74
+
75
+ .workflow-selector select {
76
+ width: 100%;
77
+ padding: 12px;
78
+ border: 2px solid #667eea;
79
+ border-radius: 8px;
80
+ font-size: 16px;
81
+ background: white;
82
+ cursor: pointer;
83
+ transition: all 0.3s ease;
84
+ }
85
+
86
+ .workflow-selector select:hover {
87
+ border-color: #764ba2;
88
+ }
89
+
90
+ .flowchart-container {
91
+ display: flex;
92
+ gap: 30px;
93
+ margin-top: 20px;
94
+ flex-wrap: wrap;
95
+ }
96
+
97
+ .flowchart {
98
+ flex: 1;
99
+ min-width: 400px;
100
+ background: #f8f9fa;
101
+ padding: 20px;
102
+ border-radius: 10px;
103
+ }
104
+
105
+ .flowchart h3 {
106
+ color: #667eea;
107
+ margin-bottom: 15px;
108
+ font-size: 1.2em;
109
+ text-align: center;
110
+ }
111
+
112
+ .flow-step {
113
+ background: white;
114
+ padding: 12px 15px;
115
+ margin: 10px 0;
116
+ border-radius: 8px;
117
+ box-shadow: 0 2px 5px rgba(0,0,0,0.1);
118
+ position: relative;
119
+ border-left: 4px solid #667eea;
120
+ }
121
+
122
+ .flow-step::after {
123
+ content: '↓';
124
+ position: absolute;
125
+ bottom: -20px;
126
+ left: 50%;
127
+ transform: translateX(-50%);
128
+ font-size: 20px;
129
+ color: #667eea;
130
+ font-weight: bold;
131
+ }
132
+
133
+ .flow-step:last-child::after {
134
+ content: '';
135
+ }
136
+
137
+ .flow-step.highlight {
138
+ background: linear-gradient(135deg, #667eea15, #764ba215);
139
+ border-left-color: #764ba2;
140
+ }
141
+
142
+ .benefits-challenges {
143
+ display: grid;
144
+ grid-template-columns: 1fr 1fr;
145
+ gap: 15px;
146
+ margin-top: 20px;
147
+ }
148
+
149
+ .info-box {
150
+ background: #f8f9fa;
151
+ padding: 15px;
152
+ border-radius: 8px;
153
+ }
154
+
155
+ .info-box h4 {
156
+ color: #667eea;
157
+ margin-bottom: 10px;
158
+ display: flex;
159
+ align-items: center;
160
+ gap: 8px;
161
+ }
162
+
163
+ .info-box p {
164
+ color: #555;
165
+ line-height: 1.6;
166
+ font-size: 14px;
167
+ }
168
+
169
+ .timeline-item {
170
+ display: flex;
171
+ align-items: center;
172
+ padding: 15px;
173
+ margin: 10px 0;
174
+ background: white;
175
+ border-radius: 10px;
176
+ box-shadow: 0 2px 8px rgba(0,0,0,0.1);
177
+ transition: all 0.3s ease;
178
+ }
179
+
180
+ .timeline-item:hover {
181
+ transform: translateX(10px);
182
+ box-shadow: 0 4px 12px rgba(0,0,0,0.15);
183
+ }
184
+
185
+ .timeline-year {
186
+ font-size: 1.8em;
187
+ font-weight: bold;
188
+ color: #667eea;
189
+ min-width: 80px;
190
+ padding-right: 20px;
191
+ border-right: 3px solid #667eea;
192
+ }
193
+
194
+ .timeline-content {
195
+ padding-left: 20px;
196
+ flex: 1;
197
+ }
198
+
199
+ .timeline-type {
200
+ font-weight: bold;
201
+ font-size: 1.1em;
202
+ color: #333;
203
+ margin-bottom: 5px;
204
+ }
205
+
206
+ .timeline-category {
207
+ color: #666;
208
+ font-size: 0.9em;
209
+ }
210
+
211
+ .category-badge {
212
+ display: inline-block;
213
+ padding: 4px 12px;
214
+ border-radius: 15px;
215
+ font-size: 0.85em;
216
+ margin-top: 5px;
217
+ }
218
+
219
+ .badge-foundational { background: #667eea; color: white; }
220
+ .badge-agentic { background: #764ba2; color: white; }
221
+ .badge-modular { background: #f093fb; color: white; }
222
+ .badge-structural-modular { background: #4facfe; color: white; }
223
+ .badge-structural { background: #00d2ff; color: white; }
224
+ </style>
225
+ </head>
226
+ <body>
227
+ <div class="container">
228
+ <h1>πŸ” RAG Types Visualization Dashboard</h1>
229
+
230
+ <div class="grid">
231
+ <!-- Category Distribution -->
232
+ <div class="card">
233
+ <h2>RAG Categories Distribution</h2>
234
+ <div class="chart-container">
235
+ <canvas id="categoryChart"></canvas>
236
+ </div>
237
+ </div>
238
+
239
+ <!-- Timeline by Year -->
240
+ <div class="card">
241
+ <h2>RAG Types by Year</h2>
242
+ <div class="chart-container">
243
+ <canvas id="timelineChart"></canvas>
244
+ </div>
245
+ </div>
246
+ </div>
247
+
248
+ <!-- Year-to-RAG Timeline -->
249
+ <div class="card timeline-card">
250
+ <h2>πŸ“… Evolution Timeline: Year β†’ RAG Type</h2>
251
+ <div id="yearTimeline"></div>
252
+ </div>
253
+
254
+ <!-- Workflow Flowcharts -->
255
+ <div class="card timeline-card">
256
+ <h2>Workflow Flowcharts</h2>
257
+ <div class="workflow-selector">
258
+ <select id="ragTypeSelector">
259
+ <option value="">Select a RAG Type to view workflows...</option>
260
+ </select>
261
+ </div>
262
+ <div id="flowchartDetails" style="display: none;">
263
+ <div class="flowchart-container">
264
+ <div class="flowchart">
265
+ <h3>πŸ“₯ Indexing Workflow</h3>
266
+ <div id="indexingFlowchart"></div>
267
+ </div>
268
+ <div class="flowchart">
269
+ <h3>πŸ”„ Inference Workflow</h3>
270
+ <div id="inferenceFlowchart"></div>
271
+ </div>
272
+ </div>
273
+ <div class="benefits-challenges">
274
+ <div class="info-box">
275
+ <h4>βœ… Key Benefits</h4>
276
+ <p id="benefits"></p>
277
+ </div>
278
+ <div class="info-box">
279
+ <h4>⚠️ Challenges</h4>
280
+ <p id="challenges"></p>
281
+ </div>
282
+ </div>
283
+ </div>
284
+ </div>
285
+ </div>
286
+
287
+ <script>
288
+ const ragData = [
289
+ {
290
+ type: "Naive RAG",
291
+ year: 2020,
292
+ category: "Foundational",
293
+ indexing: "Preprocessing β†’ Fixed Chunking β†’ Simple Embedding β†’ Vector DB Storage",
294
+ inference: "User Query β†’ Embedding β†’ Vector DB Lookup (Top-K) β†’ Concatenation β†’ LLM Generate",
295
+ benefits: "Establishes the knowledge retrieval baseline; Simple and cheap to implement.",
296
+ challenges: "Context loss due to rigid chunking; High hallucination risk; Poor handling of complex/multi-step queries."
297
+ },
298
+ {
299
+ type: "Self RAG",
300
+ year: 2023,
301
+ category: "Agentic & Modular",
302
+ indexing: "Preprocessing β†’ Standard Chunking β†’ Embedding β†’ Vector DB Storage",
303
+ inference: "User Query β†’ LLM Generates a thought β†’ Retrieval β†’ LLM Generates/Evaluates Retrieved Passages β†’ LLM Decides if Answer is Ready β†’ Final LLM Generate",
304
+ benefits: "Reduces hallucinations by self-critique/verification; Filters out poor quality retrieved passages.",
305
+ challenges: "Increases inference latency (multiple LLM calls per query); Requires careful tuning of reflection/critique prompt."
306
+ },
307
+ {
308
+ type: "Modular RAG",
309
+ year: 2024,
310
+ category: "Modular",
311
+ indexing: "Preprocessing β†’ Standard Chunking β†’ Embedding β†’ Vector DB Storage",
312
+ inference: "User Query β†’ Router/Module Selection β†’ Selected Module Executes β†’ LLM Generate",
313
+ benefits: "Improves flexibility and component reusability; Enables optimal module selection for specific tasks.",
314
+ challenges: "Requires complex routing/planning logic; Overhead of training/managing multiple specialized components."
315
+ },
316
+ {
317
+ type: "Graph RAG",
318
+ year: 2024,
319
+ category: "Structural & Modular",
320
+ indexing: "Preprocessing β†’ Entity/Relation Extraction β†’ Store in Knowledge Graph (KG) & Vector DB",
321
+ inference: "User Query β†’ Embedding/KG Query β†’ Simultaneous Retrieval (Vector + KG Path) β†’ Concatenation β†’ LLM Generate",
322
+ benefits: "Resolves complex, multi-hop queries by leveraging factual relationships; Improves interpretability and fact consistency.",
323
+ challenges: "High indexing complexity (KG construction); Expensive maintenance for rapidly changing data; Retrieval latency can be high."
324
+ },
325
+ {
326
+ type: "MultiModal RAG",
327
+ year: 2024,
328
+ category: "Structural",
329
+ indexing: "Preprocessing β†’ Multi-Modal Embedding (e.g., CLIP) β†’ Stores representations of all modalities in Vector DB",
330
+ inference: "User Query (Text or Image) β†’ Multi-Modal Embedding β†’ Vector DB Lookup (Retrieves related text, image, metadata) β†’ LLM Generate",
331
+ benefits: "Unlocks knowledge stored in non-text data (images, charts, tables); Provides a richer context.",
332
+ challenges: "Requires specialized multimodal embeddings/models; Indexing is computationally expensive; Difficult to combine disparate modalities coherently."
333
+ },
334
+ {
335
+ type: "Recursive RAG",
336
+ year: 2024,
337
+ category: "Structural & Modular",
338
+ indexing: "Preprocessing β†’ Chunking & Summarization β†’ Embeddings of both chunks & summaries β†’ Vector DB Storage",
339
+ inference: "User Query β†’ Retrieval β†’ LLM evaluates initial result β†’ Recursive Query β†’ Retrieve Specific Chunks β†’ LLM Generate",
340
+ benefits: "Summarizes context or decomposes queries recursively; Handles high-level questions that require abstract understanding.",
341
+ challenges: "Risk of information loss during aggressive summarization; Chain of thought adds significant latency."
342
+ },
343
+ {
344
+ type: "Cache RAG",
345
+ year: 2024,
346
+ category: "Modular",
347
+ indexing: "Preprocessing β†’ Standard Chunking β†’ Embedding β†’ Vector DB Storage",
348
+ inference: "User Query β†’ Cache Lookup β†’ If Hit: Return Cached Answer β†’ If Miss: Standard Retrieval β†’ LLM Generate β†’ Cache Store",
349
+ benefits: "Dramatically improves latency and reduces LLM cost for repeated or highly similar queries.",
350
+ challenges: "Complex cache invalidation logic; Requires robust query similarity and hashing functions."
351
+ },
352
+ {
353
+ type: "Corrective RAG",
354
+ year: 2024,
355
+ category: "Agentic & Modular",
356
+ indexing: "Preprocessing β†’ Standard Chunking β†’ Embedding β†’ Vector DB Storage",
357
+ inference: "User Query β†’ Standard Retrieval β†’ Retrieved Docs Evaluated β†’ Corrective Action β†’ LLM Generate",
358
+ benefits: "Detects and corrects poor quality retrieval/generation post-hoc; Increases overall trustworthiness.",
359
+ challenges: "High latency due to iterative correction loops; Requires training a dedicated evaluation model."
360
+ },
361
+ {
362
+ type: "Multi-Hop RAG",
363
+ year: 2024,
364
+ category: "Structural & Modular",
365
+ indexing: "Preprocessing β†’ Chunking/Entity Extraction β†’ Embedding β†’ Structured Storage (Vector DB + Optional KG)",
366
+ inference: "User Query β†’ Query Decomposition β†’ Hop 1 Retrieval β†’ Iterative Reasoning β†’ Hop 2 Retrieval β†’ Final Evidence Aggregation β†’ LLM Generate",
367
+ benefits: "Solves questions requiring reasoning across multiple independent documents or retrieval steps.",
368
+ challenges: "Prone to error propagation (if one hop fails); Significantly higher latency; Requires generation of accurate intermediate queries."
369
+ },
370
+ {
371
+ type: "Agentic RAG",
372
+ year: 2024,
373
+ category: "Agentic & Modular",
374
+ indexing: "Preprocessing β†’ Standard Chunking β†’ Embedding β†’ Vector DB Storage",
375
+ inference: "User Query β†’ Agent Planning/Tool Selection β†’ Agent Executes RAG Retrieval β†’ Agent Reflects/Synthesizes β†’ Final LLM Generate",
376
+ benefits: "Handles complex, goal-oriented tasks via dynamic planning, tool use, and state tracking.",
377
+ challenges: "Highest development/orchestration complexity; Slowest inference due to planning/execution loops; Failure in planning leads to catastrophic task failure."
378
+ },
379
+ {
380
+ type: "Adaptive RAG",
381
+ year: 2024,
382
+ category: "Agentic & Modular",
383
+ indexing: "Preprocessing β†’ Standard Chunking β†’ Embedding β†’ Vector DB Storage β†’ Train Query Complexity Classifier",
384
+ inference: "User Query β†’ Query Classification (Router) β†’ Adaptive Decision β†’ Retrieval Execution β†’ LLM Generate",
385
+ benefits: "Optimizes pipeline complexity and cost based on query assessment.",
386
+ challenges: "Requires training a robust query classifier/router; Misclassification can lead to poor quality results."
387
+ },
388
+ {
389
+ type: "Hierarchical RAG",
390
+ year: 2025,
391
+ category: "Structural & Modular",
392
+ indexing: "Preprocessing β†’ Hierarchical Chunking (Multiple levels) β†’ Multiple Embeddings (for each level) β†’ Vector DB Storage",
393
+ inference: "User Query β†’ Embedding β†’ Multi-Level Retrieval β†’ Concatenation β†’ LLM Generate",
394
+ benefits: "Solves the 'needle-in-a-haystack' problem for very long documents; Efficiently prunes non-relevant sections.",
395
+ challenges: "Complex, multi-level chunking and indexing structure; Requires multiple retrieval passes."
396
+ },
397
+ {
398
+ type: "Speculative RAG",
399
+ year: 2025,
400
+ category: "Modular",
401
+ indexing: "Preprocessing β†’ Standard Chunking β†’ Embedding β†’ Vector DB Storage",
402
+ inference: "User Query β†’ Standard Retrieval β†’ Drafting LLM Generates Tokens β†’ Verifier LLM Checks Drafted Tokens Against Context β†’ LLM Generate",
403
+ benefits: "Significantly reduces token generation latency and LLM inference cost.",
404
+ challenges: "Does not inherently improve semantic quality or hallucination rate; Requires careful balance between drafting and verifier models."
405
+ }
406
+ ];
407
+
408
+ function getCategoryBadgeClass(category) {
409
+ const map = {
410
+ 'Foundational': 'badge-foundational',
411
+ 'Agentic & Modular': 'badge-agentic',
412
+ 'Modular': 'badge-modular',
413
+ 'Structural & Modular': 'badge-structural-modular',
414
+ 'Structural': 'badge-structural'
415
+ };
416
+ return map[category] || 'badge-modular';
417
+ }
418
+
419
+ // Create Year Timeline
420
+ const yearTimeline = document.getElementById('yearTimeline');
421
+ ragData.forEach(rag => {
422
+ const item = document.createElement('div');
423
+ item.className = 'timeline-item';
424
+ item.innerHTML = `
425
+ <div class="timeline-year">${rag.year}</div>
426
+ <div class="timeline-content">
427
+ <div class="timeline-type">${rag.type}</div>
428
+ <span class="category-badge ${getCategoryBadgeClass(rag.category)}">${rag.category}</span>
429
+ </div>
430
+ `;
431
+ yearTimeline.appendChild(item);
432
+ });
433
+
434
+ // Populate selector
435
+ const selector = document.getElementById('ragTypeSelector');
436
+ ragData.forEach(rag => {
437
+ const option = document.createElement('option');
438
+ option.value = rag.type;
439
+ option.textContent = `${rag.type} (${rag.year})`;
440
+ selector.appendChild(option);
441
+ });
442
+
443
+ function createFlowchart(workflow, containerId) {
444
+ const container = document.getElementById(containerId);
445
+ container.innerHTML = '';
446
+ const steps = workflow.split('β†’').map(s => s.trim());
447
+ steps.forEach((step, index) => {
448
+ const div = document.createElement('div');
449
+ div.className = 'flow-step';
450
+ if (index === 0 || index === steps.length - 1) {
451
+ div.classList.add('highlight');
452
+ }
453
+ div.textContent = step;
454
+ container.appendChild(div);
455
+ });
456
+ }
457
+
458
+ selector.addEventListener('change', (e) => {
459
+ const selected = ragData.find(r => r.type === e.target.value);
460
+ const details = document.getElementById('flowchartDetails');
461
+
462
+ if (selected) {
463
+ createFlowchart(selected.indexing, 'indexingFlowchart');
464
+ createFlowchart(selected.inference, 'inferenceFlowchart');
465
+ document.getElementById('benefits').textContent = selected.benefits;
466
+ document.getElementById('challenges').textContent = selected.challenges;
467
+ details.style.display = 'block';
468
+ } else {
469
+ details.style.display = 'none';
470
+ }
471
+ });
472
+
473
+ // Category Chart
474
+ const categoryCount = {};
475
+ ragData.forEach(rag => {
476
+ categoryCount[rag.category] = (categoryCount[rag.category] || 0) + 1;
477
+ });
478
+
479
+ new Chart(document.getElementById('categoryChart'), {
480
+ type: 'doughnut',
481
+ data: {
482
+ labels: Object.keys(categoryCount),
483
+ datasets: [{
484
+ data: Object.values(categoryCount),
485
+ backgroundColor: [
486
+ '#667eea',
487
+ '#764ba2',
488
+ '#f093fb',
489
+ '#4facfe',
490
+ '#00d2ff'
491
+ ]
492
+ }]
493
+ },
494
+ options: {
495
+ responsive: true,
496
+ maintainAspectRatio: false,
497
+ plugins: {
498
+ legend: {
499
+ position: 'bottom'
500
+ }
501
+ }
502
+ }
503
+ });
504
+
505
+ // Timeline Chart
506
+ const yearCount = {};
507
+ ragData.forEach(rag => {
508
+ yearCount[rag.year] = (yearCount[rag.year] || 0) + 1;
509
+ });
510
+
511
+ new Chart(document.getElementById('timelineChart'), {
512
+ type: 'bar',
513
+ data: {
514
+ labels: Object.keys(yearCount).sort(),
515
+ datasets: [{
516
+ label: 'Number of RAG Types',
517
+ data: Object.keys(yearCount).sort().map(year => yearCount[year]),
518
+ backgroundColor: '#667eea'
519
+ }]
520
+ },
521
+ options: {
522
+ responsive: true,
523
+ maintainAspectRatio: false,
524
+ scales: {
525
+ y: {
526
+ beginAtZero: true,
527
+ ticks: {
528
+ stepSize: 1
529
+ }
530
+ }
531
+ },
532
+ plugins: {
533
+ legend: {
534
+ display: false
535
+ }
536
+ }
537
+ }
538
+ });
539
+ </script>
540
+ </body>
541
+ </html>