mirror of
https://github.com/voson-wang/toon.git
synced 2026-01-29 23:34:10 +08:00
docs(benchmark): add YAML format support
This commit is contained in:
@@ -2,21 +2,25 @@
|
|||||||
|
|
||||||
```
|
```
|
||||||
⭐ GitHub Repositories ██████████████░░░░░░░░░░░ 8,745 tokens
|
⭐ GitHub Repositories ██████████████░░░░░░░░░░░ 8,745 tokens
|
||||||
vs JSON: 15,145 💰 42.3% saved
|
vs JSON: 15,145 (-42.3%)
|
||||||
vs XML: 17,095 💰 48.8% saved
|
vs YAML: 13,129 (-33.4%)
|
||||||
|
vs XML: 17,095 (-48.8%)
|
||||||
|
|
||||||
📈 Daily Analytics ██████████░░░░░░░░░░░░░░░ 4,507 tokens
|
📈 Daily Analytics ██████████░░░░░░░░░░░░░░░ 4,507 tokens
|
||||||
vs JSON: 10,977 💰 58.9% saved
|
vs JSON: 10,977 (-58.9%)
|
||||||
vs XML: 13,128 💰 65.7% saved
|
vs YAML: 8,810 (-48.8%)
|
||||||
|
vs XML: 13,128 (-65.7%)
|
||||||
|
|
||||||
🛒 E-Commerce Order ████████████████░░░░░░░░░ 166 tokens
|
🛒 E-Commerce Order ████████████████░░░░░░░░░ 166 tokens
|
||||||
vs JSON: 257 💰 35.4% saved
|
vs JSON: 257 (-35.4%)
|
||||||
vs XML: 271 💰 38.7% saved
|
vs YAML: 197 (-15.7%)
|
||||||
|
vs XML: 271 (-38.7%)
|
||||||
|
|
||||||
─────────────────────────────────────────────────────────────────────
|
─────────────────────────────────────────────────────────────────────
|
||||||
Total ████████████░░░░░░░░░░░░░ 13,418 tokens
|
Total █████████████░░░░░░░░░░░░ 13,418 tokens
|
||||||
vs JSON: 26,379 💰 49.1% saved
|
vs JSON: 26,379 (-49.1%)
|
||||||
vs XML: 30,494 💰 56.0% saved
|
vs YAML: 22,136 (-39.4%)
|
||||||
|
vs XML: 30,494 (-56.0%)
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ prompts.intro('Token Efficiency Benchmark')
|
|||||||
let totalJsonTokens = 0
|
let totalJsonTokens = 0
|
||||||
let totalToonTokens = 0
|
let totalToonTokens = 0
|
||||||
let totalXmlTokens = 0
|
let totalXmlTokens = 0
|
||||||
|
let totalYamlTokens = 0
|
||||||
|
|
||||||
const results: BenchmarkResult[] = []
|
const results: BenchmarkResult[] = []
|
||||||
|
|
||||||
@@ -63,17 +64,21 @@ for (const example of BENCHMARK_EXAMPLES) {
|
|||||||
const jsonString = JSON.stringify(data, undefined, 2)
|
const jsonString = JSON.stringify(data, undefined, 2)
|
||||||
const toonString = encode(data)
|
const toonString = encode(data)
|
||||||
const xmlString = formatters.xml!(data)
|
const xmlString = formatters.xml!(data)
|
||||||
|
const yamlString = formatters.yaml!(data)
|
||||||
|
|
||||||
const jsonTokens = tokenize(jsonString)
|
const jsonTokens = tokenize(jsonString)
|
||||||
const toonTokens = tokenize(toonString)
|
const toonTokens = tokenize(toonString)
|
||||||
const xmlTokens = tokenize(xmlString)
|
const xmlTokens = tokenize(xmlString)
|
||||||
|
const yamlTokens = tokenize(yamlString)
|
||||||
|
|
||||||
const jsonSavings = jsonTokens - toonTokens
|
const jsonSavings = jsonTokens - toonTokens
|
||||||
const xmlSavings = xmlTokens - toonTokens
|
const xmlSavings = xmlTokens - toonTokens
|
||||||
|
const yamlSavings = yamlTokens - toonTokens
|
||||||
|
|
||||||
totalJsonTokens += jsonTokens
|
totalJsonTokens += jsonTokens
|
||||||
totalToonTokens += toonTokens
|
totalToonTokens += toonTokens
|
||||||
totalXmlTokens += xmlTokens
|
totalXmlTokens += xmlTokens
|
||||||
|
totalYamlTokens += yamlTokens
|
||||||
|
|
||||||
results.push({
|
results.push({
|
||||||
name: example.name,
|
name: example.name,
|
||||||
@@ -99,6 +104,12 @@ for (const example of BENCHMARK_EXAMPLES) {
|
|||||||
savings: xmlSavings,
|
savings: xmlSavings,
|
||||||
savingsPercent: ((xmlSavings / xmlTokens) * 100).toFixed(1),
|
savingsPercent: ((xmlSavings / xmlTokens) * 100).toFixed(1),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'yaml',
|
||||||
|
tokens: yamlTokens,
|
||||||
|
savings: yamlSavings,
|
||||||
|
savingsPercent: ((yamlSavings / yamlTokens) * 100).toFixed(1),
|
||||||
|
},
|
||||||
],
|
],
|
||||||
showDetailed: example.showDetailed,
|
showDetailed: example.showDetailed,
|
||||||
})
|
})
|
||||||
@@ -110,40 +121,47 @@ const totalJsonSavingsPercent = ((totalJsonSavings / totalJsonTokens) * 100).toF
|
|||||||
const totalXmlSavings = totalXmlTokens - totalToonTokens
|
const totalXmlSavings = totalXmlTokens - totalToonTokens
|
||||||
const totalXmlSavingsPercent = ((totalXmlSavings / totalXmlTokens) * 100).toFixed(1)
|
const totalXmlSavingsPercent = ((totalXmlSavings / totalXmlTokens) * 100).toFixed(1)
|
||||||
|
|
||||||
|
const totalYamlSavings = totalYamlTokens - totalToonTokens
|
||||||
|
const totalYamlSavingsPercent = ((totalYamlSavings / totalYamlTokens) * 100).toFixed(1)
|
||||||
|
|
||||||
// Generate ASCII bar chart visualization (stacked compact format)
|
// Generate ASCII bar chart visualization (stacked compact format)
|
||||||
const datasetRows = results
|
const datasetRows = results
|
||||||
.map((result) => {
|
.map((result) => {
|
||||||
const toon = result.formats.find(f => f.name === 'toon')!
|
const toon = result.formats.find(f => f.name === 'toon')!
|
||||||
const json = result.formats.find(f => f.name === 'json')!
|
const json = result.formats.find(f => f.name === 'json')!
|
||||||
const xml = result.formats.find(f => f.name === 'xml')!
|
const xml = result.formats.find(f => f.name === 'xml')!
|
||||||
|
const yaml = result.formats.find(f => f.name === 'yaml')!
|
||||||
|
|
||||||
const percentage = Number.parseFloat(json.savingsPercent)
|
const percentage = Number.parseFloat(json.savingsPercent)
|
||||||
const bar = createProgressBar(100 - percentage, 100) // Invert to show TOON tokens
|
const bar = createProgressBar(100 - percentage, 100) // Invert to show TOON tokens
|
||||||
const toonStr = toon.tokens.toLocaleString('en-US')
|
const toonStr = toon.tokens.toLocaleString('en-US')
|
||||||
const jsonStr = json.tokens.toLocaleString('en-US')
|
const jsonStr = json.tokens.toLocaleString('en-US')
|
||||||
const xmlStr = xml.tokens.toLocaleString('en-US')
|
const xmlStr = xml.tokens.toLocaleString('en-US')
|
||||||
|
const yamlStr = yaml.tokens.toLocaleString('en-US')
|
||||||
|
|
||||||
const line1 = `${result.emoji} ${result.name.padEnd(25)} ${bar} ${toonStr.padStart(6)} tokens`
|
const line1 = `${result.emoji} ${result.name.padEnd(25)} ${bar} ${toonStr.padStart(6)} tokens`
|
||||||
const line2 = ` vs JSON: ${jsonStr.padStart(6)} 💰 ${json.savingsPercent}% saved`
|
const line2 = ` vs JSON: ${jsonStr.padStart(6)} (-${json.savingsPercent}%)`
|
||||||
const line3 = ` vs XML: ${xmlStr.padStart(6)} 💰 ${xml.savingsPercent}% saved`
|
const line3 = ` vs YAML: ${yamlStr.padStart(6)} (-${yaml.savingsPercent}%)`
|
||||||
|
const line4 = ` vs XML: ${xmlStr.padStart(6)} (-${xml.savingsPercent}%)`
|
||||||
|
|
||||||
return `${line1}\n${line2}\n${line3}`
|
return `${line1}\n${line2}\n${line3}\n${line4}`
|
||||||
})
|
})
|
||||||
.join('\n\n')
|
.join('\n\n')
|
||||||
|
|
||||||
// Add separator and totals row
|
// Add separator and totals row
|
||||||
const separator = '─────────────────────────────────────────────────────────────────────'
|
const separator = '─────────────────────────────────────────────────────────────────────'
|
||||||
|
|
||||||
// Calculate bar for totals (TOON vs average of JSON+XML)
|
// Calculate bar for totals (TOON vs average of JSON+YAML+XML)
|
||||||
const averageComparisonTokens = (totalJsonTokens + totalXmlTokens) / 2
|
const averageComparisonTokens = (totalJsonTokens + totalYamlTokens + totalXmlTokens) / 3
|
||||||
const totalPercentage = (totalToonTokens / averageComparisonTokens) * 100
|
const totalPercentage = (totalToonTokens / averageComparisonTokens) * 100
|
||||||
const totalBar = createProgressBar(totalPercentage, 100)
|
const totalBar = createProgressBar(totalPercentage, 100)
|
||||||
|
|
||||||
const totalLine1 = `Total ${totalBar} ${totalToonTokens.toLocaleString('en-US').padStart(6)} tokens`
|
const totalLine1 = `Total ${totalBar} ${totalToonTokens.toLocaleString('en-US').padStart(6)} tokens`
|
||||||
const totalLine2 = ` vs JSON: ${totalJsonTokens.toLocaleString('en-US').padStart(6)} 💰 ${totalJsonSavingsPercent}% saved`
|
const totalLine2 = ` vs JSON: ${totalJsonTokens.toLocaleString('en-US').padStart(6)} (-${totalJsonSavingsPercent}%)`
|
||||||
const totalLine3 = ` vs XML: ${totalXmlTokens.toLocaleString('en-US').padStart(6)} 💰 ${totalXmlSavingsPercent}% saved`
|
const totalLine3 = ` vs YAML: ${totalYamlTokens.toLocaleString('en-US').padStart(6)} (-${totalYamlSavingsPercent}%)`
|
||||||
|
const totalLine4 = ` vs XML: ${totalXmlTokens.toLocaleString('en-US').padStart(6)} (-${totalXmlSavingsPercent}%)`
|
||||||
|
|
||||||
const barChartSection = `${datasetRows}\n\n${separator}\n${totalLine1}\n${totalLine2}\n${totalLine3}`
|
const barChartSection = `${datasetRows}\n\n${separator}\n${totalLine1}\n${totalLine2}\n${totalLine3}\n${totalLine4}`
|
||||||
|
|
||||||
// Generate detailed examples (only for selected examples)
|
// Generate detailed examples (only for selected examples)
|
||||||
// Note: Large datasets are truncated for display readability in the report.
|
// Note: Large datasets are truncated for display readability in the report.
|
||||||
|
|||||||
Reference in New Issue
Block a user