|
|
|
@ -7,7 +7,6 @@ import ( |
|
|
|
"errors" |
|
|
|
"fmt" |
|
|
|
"io" |
|
|
|
"log/slog" |
|
|
|
"net/http" |
|
|
|
"os" |
|
|
|
"os/user" |
|
|
|
@ -301,8 +300,9 @@ const ( |
|
|
|
) |
|
|
|
|
|
|
|
var ( |
|
|
|
errMissingFrom = errors.New("no FROM line") |
|
|
|
errInvalidCommand = errors.New("command must be one of \"from\", \"license\", \"template\", \"system\", \"adapter\", \"parameter\", or \"message\"") |
|
|
|
errMissingFrom = errors.New("no FROM line") |
|
|
|
errInvalidMessageRole = errors.New("message role must be one of \"system\", \"user\", or \"assistant\"") |
|
|
|
errInvalidCommand = errors.New("command must be one of \"from\", \"license\", \"template\", \"system\", \"adapter\", \"parameter\", or \"message\"") |
|
|
|
) |
|
|
|
|
|
|
|
type ParserError struct { |
|
|
|
@ -379,10 +379,14 @@ func ParseFile(r io.Reader) (*Modelfile, error) { |
|
|
|
case stateParameter: |
|
|
|
cmd.Name = b.String() |
|
|
|
case stateMessage: |
|
|
|
role = b.String() |
|
|
|
if !isKnownMessageRole(b.String()) { |
|
|
|
slog.Warn("received non-standard role", "role", role) |
|
|
|
if !isValidMessageRole(b.String()) { |
|
|
|
return nil, &ParserError{ |
|
|
|
LineNumber: currLine, |
|
|
|
Msg: errInvalidMessageRole.Error(), |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
role = b.String() |
|
|
|
case stateComment, stateNil: |
|
|
|
// pass
|
|
|
|
case stateValue: |
|
|
|
@ -552,7 +556,7 @@ func isNewline(r rune) bool { |
|
|
|
return r == '\r' || r == '\n' |
|
|
|
} |
|
|
|
|
|
|
|
func isKnownMessageRole(role string) bool { |
|
|
|
func isValidMessageRole(role string) bool { |
|
|
|
return role == "system" || role == "user" || role == "assistant" |
|
|
|
} |
|
|
|
|
|
|
|
|