WitNote / internal /bridge /snapshot_format.go
AUXteam's picture
Upload folder using huggingface_hub
6a7089a verified
package bridge
import (
"strings"
)
func FormatSnapshotText(nodes []A11yNode) string {
var b strings.Builder
for _, n := range nodes {
for i := 0; i < n.Depth; i++ {
b.WriteString(" ")
}
b.WriteString(n.Ref)
b.WriteByte(' ')
b.WriteString(n.Role)
if n.Name != "" {
b.WriteString(` "`)
b.WriteString(n.Name)
b.WriteByte('"')
}
if n.Value != "" {
b.WriteString(` val="`)
b.WriteString(n.Value)
b.WriteByte('"')
}
if n.Focused {
b.WriteString(" [focused]")
}
if n.Disabled {
b.WriteString(" [disabled]")
}
b.WriteByte('\n')
}
return b.String()
}
func FormatSnapshotCompact(nodes []A11yNode) string {
var b strings.Builder
for _, n := range nodes {
b.WriteString(n.Ref)
b.WriteByte(':')
b.WriteString(n.Role)
if n.Name != "" {
b.WriteString(` "`)
b.WriteString(n.Name)
b.WriteByte('"')
}
if n.Value != "" {
b.WriteString(` val="`)
b.WriteString(n.Value)
b.WriteByte('"')
}
if n.Focused {
b.WriteString(" *")
}
if n.Disabled {
b.WriteString(" -")
}
b.WriteByte('\n')
}
return b.String()
}
func TruncateToTokens(nodes []A11yNode, maxTokens int, format string) ([]A11yNode, bool) {
tokensUsed := 0
for i, n := range nodes {
var nodeTokens int
switch format {
case "compact":
size := len(n.Ref) + 1 + len(n.Role) + len(n.Name) + len(n.Value) + 8
nodeTokens = size / 4
case "text":
size := n.Depth*2 + len(n.Ref) + 1 + len(n.Role) + len(n.Name) + len(n.Value) + 8
nodeTokens = size / 4
default:
size := len(n.Ref) + len(n.Role) + len(n.Name) + len(n.Value) + 60
nodeTokens = size / 3
}
if nodeTokens < 1 {
nodeTokens = 1
}
tokensUsed += nodeTokens
if tokensUsed > maxTokens {
return nodes[:i], true
}
}
return nodes, false
}