Files
weatherreporter/internal/promptassets/promptassets.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
}