Fix errors

This commit is contained in:
ensan-hcl 2023-12-01 23:58:19 +09:00
parent 67d2bd2466
commit 4283a889a7
2 changed files with 16 additions and 33 deletions

View file

@ -230,28 +230,15 @@ private func token_to_piece(token: llama_token, buffer: inout [CChar]) -> String
var result = [CChar](repeating: 0, count: 8) var result = [CChar](repeating: 0, count: 8)
let nTokens = llama_token_to_piece(model, token, &result, Int32(result.count)) let nTokens = llama_token_to_piece(model, token, &result, Int32(result.count))
if nTokens < 0 { if nTokens < 0 {
if result.count >= -Int(nTokens) { let actualTokensCount = -Int(nTokens)
result.removeLast(-Int(nTokens)) result = .init(repeating: 0, count: actualTokensCount)
} else {
result.removeAll()
}
let check = llama_token_to_piece( let check = llama_token_to_piece(
model, model,
token, token,
&result, &result,
Int32(result.count) Int32(result.count)
) )
assert(check == nTokens) assert(check == actualTokensCount)
} 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 { } else {
result.removeLast(result.count - Int(nTokens)) result.removeLast(result.count - Int(nTokens))
} }
@ -269,5 +256,4 @@ private func token_to_piece(token: llama_token, buffer: inout [CChar]) -> String
buffer = [] buffer = []
return bufferString return bufferString
} }
return nil
} }

View file

@ -164,24 +164,21 @@ actor LlamaContext {
private func token_to_piece(token: llama_token) -> String { private func token_to_piece(token: llama_token) -> String {
let result = UnsafeMutablePointer<Int8>.allocate(capacity: 8) let result = UnsafeMutablePointer<Int8>.allocate(capacity: 8)
result.initialize(repeating: Int8(0), count: 8) result.initialize(repeating: Int8(0), count: 8)
defer {
result.deallocate()
}
let nTokens = llama_token_to_piece(model, token, result, 8) let nTokens = llama_token_to_piece(model, token, result, 8)
if nTokens > 8 { if nTokens < 0 {
result.removeAll() let newResult = UnsafeMutablePointer<Int8>.allocate(capacity: Int(-nTokens))
result = [CChar](repeating: 0, count: nTokens) newResult.initialize(repeating: Int8(0), count: Int(-nTokens))
_ = llama_token_to_piece( defer {
model, newResult.deallocate()
token, }
&result, _ = llama_token_to_piece(model, token, newResult, -nTokens)
Int32(result.count) return String(cString: newResult)
) } else {
return String(cString: result)
} }
let resultStr = String(cString: result)
result.deallocate()
return resultStr
} }
} }