48 lines
1.7 KiB
Go
48 lines
1.7 KiB
Go
package capability
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"git.cin.su/m/Assistant/platform/ids"
|
|
)
|
|
|
|
type ModelQualificationObservationID ids.ID
|
|
type ModelQualificationStatus string
|
|
|
|
const (
|
|
ModelQualificationReachable ModelQualificationStatus = "REACHABLE"
|
|
ModelQualificationRespondedWithoutRating ModelQualificationStatus = "RESPONDED_WITHOUT_QUALIFICATION"
|
|
ModelQualificationUnavailable ModelQualificationStatus = "UNAVAILABLE"
|
|
)
|
|
|
|
// ModelQualificationObservation is operational evidence only. It records
|
|
// reachability and latency, never quality, activation, routing priority or
|
|
// provider credentials.
|
|
type ModelQualificationObservation struct {
|
|
ID ModelQualificationObservationID
|
|
ProviderInstanceID ProviderInstanceID
|
|
ProviderModelID ProviderModelID
|
|
Status ModelQualificationStatus
|
|
FinishReason string
|
|
LatencyMillis int64
|
|
OutputObserved bool
|
|
QualityAssessed bool
|
|
Category ModelRatingCategory
|
|
ObservedAtUnixMillis int64
|
|
}
|
|
|
|
func (o ModelQualificationObservation) Validate() error {
|
|
if o.ID == "" || o.ProviderInstanceID == "" || o.ProviderModelID == "" || o.FinishReason == "" || o.LatencyMillis < 0 || o.ObservedAtUnixMillis < 1 {
|
|
return errors.New("model qualification observation identity and timing are incomplete")
|
|
}
|
|
switch o.Status {
|
|
case ModelQualificationReachable, ModelQualificationRespondedWithoutRating, ModelQualificationUnavailable:
|
|
default:
|
|
return errors.New("model qualification observation status is unsupported")
|
|
}
|
|
if o.Category != ModelRatingUnrated || o.QualityAssessed {
|
|
return errors.New("model qualification observation cannot assert quality")
|
|
}
|
|
return nil
|
|
}
|