Fix token_to_piece implementation in Swift

This commit is contained in:
ensan 2023-12-01 14:43:00 +09:00
parent 1d144112c0
commit 67d2bd2466
2 changed files with 22 additions and 1 deletions

View file

@ -242,6 +242,16 @@ private func token_to_piece(token: llama_token, buffer: inout [CChar]) -> String
Int32(result.count)
)
assert(check == nTokens)
} else if nTokens > 8 {
result.removeAll()
result = [CChar](repeating: 0, count: nTokens)
let check = llama_token_to_piece(
model,
token,
&result,
Int32(result.count)
)
assert(check == nTokens)
} else {
result.removeLast(result.count - Int(nTokens))
}

View file

@ -165,7 +165,18 @@ actor LlamaContext {
let result = UnsafeMutablePointer<Int8>.allocate(capacity: 8)
result.initialize(repeating: Int8(0), count: 8)
let _ = llama_token_to_piece(model, token, result, 8)
let nTokens = llama_token_to_piece(model, token, result, 8)
if nTokens > 8 {
result.removeAll()
result = [CChar](repeating: 0, count: nTokens)
_ = llama_token_to_piece(
model,
token,
&result,
Int32(result.count)
)
}
let resultStr = String(cString: result)