35 lines
1.0 KiB
Go
35 lines
1.0 KiB
Go
package domain
|
|
|
|
import (
|
|
"errors"
|
|
"math"
|
|
"time"
|
|
)
|
|
|
|
const maxExecutionTimeoutSeconds int64 = math.MaxInt64 / int64(time.Second)
|
|
|
|
// ValidateExecutionTargetSettings validates source-neutral execution-setting
|
|
// invariants on a resolved target.
|
|
func ValidateExecutionTargetSettings(target ExecutionTarget) error {
|
|
if !isFinite(target.Temperature) || target.Temperature < 0 || target.Temperature > 2 {
|
|
return errors.New("temperature must be finite and between 0 and 2")
|
|
}
|
|
if target.MaxTokens < 0 {
|
|
return errors.New("max_tokens must be greater than or equal to 0")
|
|
}
|
|
if !isFinite(target.TopP) || target.TopP < 0 || target.TopP > 1 {
|
|
return errors.New("top_p must be finite and between 0 and 1")
|
|
}
|
|
if target.TimeoutSeconds < 0 {
|
|
return errors.New("timeout_seconds must be greater than or equal to 0")
|
|
}
|
|
if int64(target.TimeoutSeconds) > maxExecutionTimeoutSeconds {
|
|
return errors.New("timeout_seconds exceeds the maximum supported duration")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func isFinite(value float64) bool {
|
|
return !math.IsNaN(value) && !math.IsInf(value, 0)
|
|
}
|