| |
| |
|
|
| package main |
|
|
| import ( |
| "bufio" |
| "encoding/binary" |
| "fmt" |
| "io" |
| "os" |
| "path/filepath" |
| "strings" |
| ) |
|
|
| |
| func ReadVarint(data []byte, pos *int) int { |
| val := 0 |
| shift := uint(0) |
| for { |
| if *pos >= len(data) { |
| break |
| } |
| b := data[*pos] |
| *pos++ |
| val |= int(b&0x7F) << shift |
| if (b & 0x80) == 0 { |
| break |
| } |
| shift += 7 |
| } |
| return val |
| } |
|
|
| |
| func DecompressVocab(data []byte, numTokens int) [][]byte { |
| tokens := make([][]byte, 0, numTokens) |
| pos := 0 |
| var prev []byte |
| for i := 0; i < numTokens; i++ { |
| if pos >= len(data) { |
| break |
| } |
| common := ReadVarint(data, &pos) |
| suffixLen := ReadVarint(data, &pos) |
| if pos+suffixLen > len(data) { |
| break |
| } |
| suffix := data[pos : pos+suffixLen] |
| pos += suffixLen |
|
|
| t := make([]byte, common+len(suffix)) |
| if common > len(prev) { |
| common = len(prev) |
| } |
| copy(t[:common], prev[:common]) |
| copy(t[common:], suffix) |
| tokens = append(tokens, t) |
| prev = t |
| } |
| return tokens |
| } |
|
|
| |
| func DecompressMerges(data []byte) [][2]uint32 { |
| numMerges := len(data) / 6 |
| merges := make([][2]uint32, 0, numMerges) |
| for i := 0; i < numMerges; i++ { |
| offset := i * 6 |
| idx0 := (uint32(data[offset]) << 16) | (uint32(data[offset+1]) << 8) | uint32(data[offset+2]) |
| idx1 := (uint32(data[offset+3]) << 16) | (uint32(data[offset+4]) << 8) | uint32(data[offset+5]) |
| merges = append(merges, [2]uint32{idx0, idx1}) |
| } |
| return merges |
| } |
|
|
| |
| func escapeJsonString(token []byte) string { |
| var sb strings.Builder |
| for _, b := range token { |
| switch b { |
| case '"': |
| sb.WriteString(`\"`) |
| case '\\': |
| sb.WriteString(`\\`) |
| case '\n': |
| sb.WriteString(`\n`) |
| case '\r': |
| sb.WriteString(`\r`) |
| case '\t': |
| sb.WriteString(`\t`) |
| default: |
| if b < 0x20 { |
| sb.WriteString(fmt.Sprintf(`\u%04x`, b)) |
| } else { |
| sb.WriteByte(b) |
| } |
| } |
| } |
| return sb.String() |
| } |
|
|
| func main() { |
| fmt.Println("=========================================================") |
| fmt.Println(" GO UFO TOKENIZER DECODER & RECONSTRUCTOR") |
| fmt.Println(" Watermark: ip zymatica.space") |
| fmt.Println("=========================================================") |
|
|
| |
| decompFile := "../qwen-3.5-0.8b-28chirps-tokenizer.decompressed" |
| decompressed, err := os.ReadFile(decompFile) |
| if err != nil { |
| fmt.Printf("[-] Error opening decompressed payload file: %v\n", err) |
| os.Exit(1) |
| } |
| fmt.Printf("[+] Loaded decompressed capsule payload: %d bytes.\n", len(decompressed)) |
|
|
| |
| pos := 0 |
| if decompressed[pos] != 0xC5 || decompressed[pos+1] != 0x54 || decompressed[pos+2] != 0x4B { |
| fmt.Println("[-] Error: Invalid magic header.") |
| os.Exit(1) |
| } |
| pos += 3 |
| mode := decompressed[pos] |
| pos += 1 |
| fmt.Printf(" Magic bytes verified. Mode: Mode %d\n", mode) |
|
|
| if mode != 1 { |
| fmt.Println("[-] Error: Only Mode 1 (Absolute) is supported by Go local decoder.") |
| os.Exit(1) |
| } |
|
|
| |
| compConfigLen := int(binary.BigEndian.Uint32(decompressed[pos : pos+4])) |
| pos += 4 |
| fmt.Printf(" Skipping config block of length: %d bytes.\n", compConfigLen) |
| pos += compConfigLen |
|
|
| |
| vocabNum := int(binary.BigEndian.Uint32(decompressed[pos : pos+4])) |
| pos += 4 |
| vocabLen := int(binary.BigEndian.Uint32(decompressed[pos : pos+4])) |
| pos += 4 |
| fmt.Printf(" Reading vocabulary tokens: %d items, data size: %d bytes.\n", vocabNum, vocabLen) |
|
|
| vocabData := decompressed[pos : pos+vocabLen] |
| pos += vocabLen |
|
|
| |
| restoredVocab := DecompressVocab(vocabData, vocabNum) |
| fmt.Printf("[+] Reconstructed vocabulary: %d tokens.\n", len(restoredVocab)) |
|
|
| |
| mergesNum := int(binary.BigEndian.Uint32(decompressed[pos : pos+4])) |
| pos += 4 |
| fmt.Printf(" Reading merges block: %d pairs.\n", mergesNum) |
|
|
| mergesData := decompressed[pos : pos+mergesNum*6] |
| pos += mergesNum * 6 |
|
|
| |
| restoredMerges := DecompressMerges(mergesData) |
| fmt.Printf("[+] Reconstructed merges: %d pairs.\n", len(restoredMerges)) |
|
|
| |
| vocabFile := "vocab.json" |
| outVocab, err := os.Create(vocabFile) |
| if err != nil { |
| fmt.Printf("[-] Error creating file %s: %v\n", vocabFile, err) |
| os.Exit(1) |
| } |
| defer outVocab.Close() |
| writer := bufio.NewWriter(outVocab) |
| writer.WriteString("{\n") |
| for i := 0; i < len(restoredVocab); i++ { |
| escaped := escapeJsonString(restoredVocab[i]) |
| if i < len(restoredVocab)-1 { |
| writer.WriteString(fmt.Sprintf(" \"%s\": %d,\n", escaped, i)) |
| } else { |
| writer.WriteString(fmt.Sprintf(" \"%s\": %d\n", escaped, i)) |
| } |
| } |
| writer.WriteString("}\n") |
| writer.Flush() |
| fmt.Printf("[+] Saved reconstructed %s to current directory.\n", vocabFile) |
|
|
| |
| mergesFile := "merges.txt" |
| outMerges, err := os.Create(mergesFile) |
| if err != nil { |
| fmt.Printf("[-] Error creating file %s: %v\n", mergesFile, err) |
| os.Exit(1) |
| } |
| defer outMerges.Close() |
| writerMerges := bufio.NewWriter(outMerges) |
| for _, pair := range restoredMerges { |
| t0 := restoredVocab[pair[0]] |
| t1 := restoredVocab[pair[1]] |
| writerMerges.Write(t0) |
| writerMerges.WriteByte(' ') |
| writerMerges.Write(t1) |
| writerMerges.WriteByte('\n') |
| } |
| writerMerges.Flush() |
| fmt.Printf("[+] Saved reconstructed %s to current directory.\n", mergesFile) |
|
|
| |
| fmt.Println(" Copying tokenizer configuration files...") |
| copyFile("j:/Language-U/Language-U-V2/qwen-3.5-0.8b-local/tokenizer_config.json", "/mnt/j/Language-U/Language-U-V2/qwen-3.5-0.8b-local/tokenizer_config.json", "tokenizer_config.json") |
| copyFile("j:/Language-U/Language-U-V2/qwen-3.5-0.8b-local/tokenizer.json", "/mnt/j/Language-U/Language-U-V2/qwen-3.5-0.8b-local/tokenizer.json", "tokenizer.json") |
|
|
| fmt.Println("=========================================================") |
| fmt.Println(" GO DECODER SUCCESSFUL!") |
| fmt.Println("=========================================================") |
| } |
|
|
| |
| func copyFile(src, fallback, dst string) { |
| targetSrc := src |
| if _, err := os.Stat(targetSrc); os.IsNotExist(err) { |
| targetSrc = fallback |
| } |
| if _, err := os.Stat(targetSrc); os.IsNotExist(err) { |
| return |
| } |
| in, err := os.Open(targetSrc) |
| if err != nil { |
| return |
| } |
| defer in.Close() |
| out, err := os.Create(dst) |
| if err != nil { |
| return |
| } |
| defer out.Close() |
| io.Copy(out, in) |
| fmt.Printf("[+] Copied %s to current directory.\n", filepath.Base(targetSrc)) |
| } |
|
|