Files

62 lines
1.6 KiB
Go

package seed
import (
_ "embed"
"encoding/json"
"fmt"
)
//go:embed defaults.json
var defaultsJSON []byte
type Prompt struct {
Key string `json:"key"`
Kind string `json:"kind"`
APIType string `json:"api_type"`
Capability string `json:"capability"`
Name string `json:"name"`
Version uint `json:"version"`
Template string `json:"template"`
DefaultRoleRule string `json:"default_role_rule"`
}
type Provider struct {
Slug string `json:"slug"`
Name string `json:"name"`
}
type Model struct {
Name string `json:"name"`
ModelID string `json:"model_id"`
APIType string `json:"api_type"`
Kind string `json:"kind"`
Capability string `json:"capability"`
}
type Defaults struct {
Prompts []Prompt `json:"prompts"`
Provider Provider `json:"provider"`
Models []Model `json:"models"`
}
func LoadDefaults() (Defaults, error) {
var defaults Defaults
if err := json.Unmarshal(defaultsJSON, &defaults); err != nil {
return Defaults{}, fmt.Errorf("decode embedded seed data: %w", err)
}
if len(defaults.Prompts) != 2 || len(defaults.Models) != 2 || defaults.Provider.Slug == "" {
return Defaults{}, fmt.Errorf("embedded seed data is incomplete")
}
for _, prompt := range defaults.Prompts {
if prompt.Key == "" || prompt.Capability == "" {
return Defaults{}, fmt.Errorf("embedded seed prompt data is incomplete")
}
}
for _, model := range defaults.Models {
if model.ModelID == "" || model.Capability == "" {
return Defaults{}, fmt.Errorf("embedded seed model data is incomplete")
}
}
return defaults, nil
}