Files
llgo/_demo/c/llama2-c/run.go

51 lines
1.4 KiB
Go
Raw Normal View History

2024-05-07 07:22:49 +08:00
package main
import (
2025-04-03 15:52:18 +08:00
"github.com/goplus/lib/c"
"github.com/goplus/lib/c/llama2"
"github.com/goplus/lib/c/time"
2024-05-07 07:22:49 +08:00
)
func main() {
var prompt *c.Char = c.Str("Once upon a time")
var checkpointPath *c.Char = c.Str("stories15M.bin")
var tokenizerPath *c.Char = c.Str("tokenizer.bin")
2024-05-07 07:32:25 +08:00
var temperature, topp c.Float = 1.0, 0.9
2024-05-07 07:22:49 +08:00
var steps c.Int = 256
2024-07-30 21:41:26 +08:00
var rngSeed uint64 = uint64(time.Time(nil))
2024-05-07 07:22:49 +08:00
2024-05-07 10:16:03 +08:00
loop: // parse command line arguments
for {
switch c.Getopt(c.Argc, c.Argv, c.Str("m:")) {
case 'm':
checkpointPath = c.Optarg
2024-05-07 18:42:53 +08:00
c.Fprintf(c.Stderr, c.Str("==> use model: %s\n"), checkpointPath)
2024-05-07 10:16:03 +08:00
case -1:
break loop
}
}
2024-05-07 18:42:53 +08:00
if c.Optind < c.Argc {
prompt = c.Index(c.Argv, c.Optind)
c.Fprintf(c.Stderr, c.Str("==> prompt: %s\n"), prompt)
}
2024-05-07 10:16:03 +08:00
2024-05-07 07:22:49 +08:00
// build the Transformer via the model .bin file
var transformer llama2.Transformer
llama2.BuildTransformer(&transformer, checkpointPath)
// build the Tokenizer via the tokenizer .bin file
var tokenizer llama2.Tokenizer
llama2.BuildTokenizer(&tokenizer, tokenizerPath, transformer.Config.VocabSize)
// build the Sampler
var sampler llama2.Sampler
llama2.BuildSampler(&sampler, transformer.Config.VocabSize, temperature, topp, rngSeed)
// run!
llama2.Generate(&transformer, &tokenizer, &sampler, prompt, steps)
// memory and file handles cleanup
llama2.FreeSampler(&sampler)
llama2.FreeTokenizer(&tokenizer)
llama2.FreeTransformer(&transformer)
}