|
@@ -159,49 +159,18 @@ type Options struct {
|
|
|
|
|
|
// Runner options which must be set when the model is loaded into memory
|
|
|
type Runner struct {
|
|
|
- UseNUMA bool `json:"numa,omitempty"`
|
|
|
- NumCtx int `json:"num_ctx,omitempty"`
|
|
|
- NumBatch int `json:"num_batch,omitempty"`
|
|
|
- NumGPU int `json:"num_gpu,omitempty"`
|
|
|
- MainGPU int `json:"main_gpu,omitempty"`
|
|
|
- LowVRAM bool `json:"low_vram,omitempty"`
|
|
|
- F16KV bool `json:"f16_kv,omitempty"`
|
|
|
- LogitsAll bool `json:"logits_all,omitempty"`
|
|
|
- VocabOnly bool `json:"vocab_only,omitempty"`
|
|
|
- UseMMap TriState `json:"use_mmap,omitempty"`
|
|
|
- UseMLock bool `json:"use_mlock,omitempty"`
|
|
|
- NumThread int `json:"num_thread,omitempty"`
|
|
|
-}
|
|
|
-
|
|
|
-type TriState int
|
|
|
-
|
|
|
-const (
|
|
|
- TriStateUndefined TriState = -1
|
|
|
- TriStateFalse TriState = 0
|
|
|
- TriStateTrue TriState = 1
|
|
|
-)
|
|
|
-
|
|
|
-func (b *TriState) UnmarshalJSON(data []byte) error {
|
|
|
- var v bool
|
|
|
- if err := json.Unmarshal(data, &v); err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
- if v {
|
|
|
- *b = TriStateTrue
|
|
|
- }
|
|
|
- *b = TriStateFalse
|
|
|
- return nil
|
|
|
-}
|
|
|
-
|
|
|
-func (b *TriState) MarshalJSON() ([]byte, error) {
|
|
|
- if *b == TriStateUndefined {
|
|
|
- return nil, nil
|
|
|
- }
|
|
|
- var v bool
|
|
|
- if *b == TriStateTrue {
|
|
|
- v = true
|
|
|
- }
|
|
|
- return json.Marshal(v)
|
|
|
+ UseNUMA bool `json:"numa,omitempty"`
|
|
|
+ NumCtx int `json:"num_ctx,omitempty"`
|
|
|
+ NumBatch int `json:"num_batch,omitempty"`
|
|
|
+ NumGPU int `json:"num_gpu,omitempty"`
|
|
|
+ MainGPU int `json:"main_gpu,omitempty"`
|
|
|
+ LowVRAM bool `json:"low_vram,omitempty"`
|
|
|
+ F16KV bool `json:"f16_kv,omitempty"`
|
|
|
+ LogitsAll bool `json:"logits_all,omitempty"`
|
|
|
+ VocabOnly bool `json:"vocab_only,omitempty"`
|
|
|
+ UseMMap *bool `json:"use_mmap,omitempty"`
|
|
|
+ UseMLock bool `json:"use_mlock,omitempty"`
|
|
|
+ NumThread int `json:"num_thread,omitempty"`
|
|
|
}
|
|
|
|
|
|
// EmbeddingRequest is the request passed to [Client.Embeddings].
|
|
@@ -437,19 +406,6 @@ func (opts *Options) FromMap(m map[string]interface{}) error {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
- if reflect.PointerTo(field.Type()) == reflect.TypeOf((*TriState)(nil)) {
|
|
|
- val, ok := val.(bool)
|
|
|
- if !ok {
|
|
|
- return fmt.Errorf("option %q must be of type boolean", key)
|
|
|
- }
|
|
|
- if val {
|
|
|
- field.SetInt(int64(TriStateTrue))
|
|
|
- } else {
|
|
|
- field.SetInt(int64(TriStateFalse))
|
|
|
- }
|
|
|
- continue
|
|
|
- }
|
|
|
-
|
|
|
switch field.Kind() {
|
|
|
case reflect.Int:
|
|
|
switch t := val.(type) {
|
|
@@ -496,6 +452,17 @@ func (opts *Options) FromMap(m map[string]interface{}) error {
|
|
|
slice[i] = str
|
|
|
}
|
|
|
field.Set(reflect.ValueOf(slice))
|
|
|
+ case reflect.Pointer:
|
|
|
+ var b bool
|
|
|
+ if field.Type() == reflect.TypeOf(&b) {
|
|
|
+ val, ok := val.(bool)
|
|
|
+ if !ok {
|
|
|
+ return fmt.Errorf("option %q must be of type boolean", key)
|
|
|
+ }
|
|
|
+ field.Set(reflect.ValueOf(&val))
|
|
|
+ } else {
|
|
|
+ return fmt.Errorf("unknown type loading config params: %v %v", field.Kind(), field.Type())
|
|
|
+ }
|
|
|
default:
|
|
|
return fmt.Errorf("unknown type loading config params: %v", field.Kind())
|
|
|
}
|
|
@@ -538,7 +505,7 @@ func DefaultOptions() Options {
|
|
|
LowVRAM: false,
|
|
|
F16KV: true,
|
|
|
UseMLock: false,
|
|
|
- UseMMap: TriStateUndefined,
|
|
|
+ UseMMap: nil,
|
|
|
UseNUMA: false,
|
|
|
},
|
|
|
}
|
|
@@ -608,19 +575,6 @@ func FormatParams(params map[string][]string) (map[string]interface{}, error) {
|
|
|
} else {
|
|
|
field := valueOpts.FieldByName(opt.Name)
|
|
|
if field.IsValid() && field.CanSet() {
|
|
|
- if reflect.PointerTo(field.Type()) == reflect.TypeOf((*TriState)(nil)) {
|
|
|
- boolVal, err := strconv.ParseBool(vals[0])
|
|
|
- if err != nil {
|
|
|
- return nil, fmt.Errorf("invalid bool value %s", vals)
|
|
|
- }
|
|
|
- if boolVal {
|
|
|
- out[key] = TriStateTrue
|
|
|
- } else {
|
|
|
- out[key] = TriStateFalse
|
|
|
- }
|
|
|
- continue
|
|
|
- }
|
|
|
-
|
|
|
switch field.Kind() {
|
|
|
case reflect.Float32:
|
|
|
floatVal, err := strconv.ParseFloat(vals[0], 32)
|
|
@@ -648,6 +602,17 @@ func FormatParams(params map[string][]string) (map[string]interface{}, error) {
|
|
|
case reflect.Slice:
|
|
|
// TODO: only string slices are supported right now
|
|
|
out[key] = vals
|
|
|
+ case reflect.Pointer:
|
|
|
+ var b bool
|
|
|
+ if field.Type() == reflect.TypeOf(&b) {
|
|
|
+ boolVal, err := strconv.ParseBool(vals[0])
|
|
|
+ if err != nil {
|
|
|
+ return nil, fmt.Errorf("invalid bool value %s", vals)
|
|
|
+ }
|
|
|
+ out[key] = &boolVal
|
|
|
+ } else {
|
|
|
+ return nil, fmt.Errorf("unknown type %s for %s", field.Kind(), key)
|
|
|
+ }
|
|
|
default:
|
|
|
return nil, fmt.Errorf("unknown type %s for %s", field.Kind(), key)
|
|
|
}
|