1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- package llm
- import (
- "bytes"
- "os"
- )
- // StatusWriter is a writer that captures error messages from the llama runner process
- type StatusWriter struct {
- LastErrMsg string
- out *os.File
- }
- func NewStatusWriter(out *os.File) *StatusWriter {
- return &StatusWriter{
- out: out,
- }
- }
- // TODO - regex matching to detect errors like
- // libcublasLt.so.11: cannot open shared object file: No such file or directory
- var errorPrefixes = []string{
- "error:",
- "CUDA error",
- "cudaMalloc failed",
- "\"ERR\"",
- "error loading model",
- }
- func (w *StatusWriter) Write(b []byte) (int, error) {
- var errMsg string
- for _, prefix := range errorPrefixes {
- if _, after, ok := bytes.Cut(b, []byte(prefix)); ok {
- errMsg = prefix + string(bytes.TrimSpace(after))
- }
- }
- if errMsg != "" {
- w.LastErrMsg = errMsg
- }
- return w.out.Write(b)
- }
|