59 lines
1.6 KiB
Go
59 lines
1.6 KiB
Go
// Package promptassets owns the embedded Promptkit prompt and schema corpus.
|
|
package promptassets
|
|
|
|
import (
|
|
"embed"
|
|
"fmt"
|
|
"io/fs"
|
|
)
|
|
|
|
//go:embed assets/prompts assets/profiles assets/schemas
|
|
var assets embed.FS
|
|
|
|
var schemaPaths = map[string]string{
|
|
"daily": "assets/schemas/daily.generated_text.schema.json",
|
|
"hourly": "assets/schemas/hourly.generated_text.schema.json",
|
|
"today": "assets/schemas/today.generated_text.schema.json",
|
|
"tomorrow": "assets/schemas/tomorrow.generated_text.schema.json",
|
|
}
|
|
|
|
// PromptFS returns the embedded prompt definitions and their referenced files.
|
|
func PromptFS() fs.FS {
|
|
fsys, err := fs.Sub(assets, "assets/prompts")
|
|
if err != nil {
|
|
panic(fmt.Sprintf("embedded prompt assets: %v", err))
|
|
}
|
|
return fsys
|
|
}
|
|
|
|
// SchemaFS returns the embedded generated-text JSON schemas.
|
|
func SchemaFS() fs.FS {
|
|
fsys, err := fs.Sub(assets, "assets/schemas")
|
|
if err != nil {
|
|
panic(fmt.Sprintf("embedded schema assets: %v", err))
|
|
}
|
|
return fsys
|
|
}
|
|
|
|
// ProfileFS returns the embedded Weatherreporter Promptkit profile definitions.
|
|
func ProfileFS() fs.FS {
|
|
fsys, err := fs.Sub(assets, "assets/profiles")
|
|
if err != nil {
|
|
panic(fmt.Sprintf("embedded profile assets: %v", err))
|
|
}
|
|
return fsys
|
|
}
|
|
|
|
// Schema returns an independent copy of the canonical schema for id.
|
|
func Schema(id string) ([]byte, error) {
|
|
path, ok := schemaPaths[id]
|
|
if !ok {
|
|
return nil, fmt.Errorf("unknown generated text schema %q", id)
|
|
}
|
|
data, err := assets.ReadFile(path)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("read generated text schema %q: %w", id, err)
|
|
}
|
|
return append([]byte(nil), data...), nil
|
|
}
|