Files
weatherreporter/internal/generatedtext/hourly.go

39 lines
1.2 KiB
Go
Raw Normal View History

2026-06-14 04:46:53 +00:00
// Package generatedtext validates structured LLM text and render contexts.
package generatedtext
import (
"fmt"
"strings"
)
type Hourly struct {
Summary string `json:"summary"`
ForecastDiscussion string `json:"forecast_discussion"`
PrecipitationTiming string `json:"precipitation_timing,omitempty"`
Confidence string `json:"confidence,omitempty"`
2026-06-14 04:46:53 +00:00
}
func ValidateHourly(data []byte) (Hourly, []byte, error) {
2026-06-15 12:41:45 +00:00
value, err := decodeGeneratedText[Hourly](data, "hourly")
if err != nil {
return Hourly{}, nil, err
2026-06-14 04:46:53 +00:00
}
value.Summary = strings.TrimSpace(value.Summary)
value.ForecastDiscussion = strings.TrimSpace(value.ForecastDiscussion)
value.PrecipitationTiming = strings.TrimSpace(value.PrecipitationTiming)
2026-06-14 04:46:53 +00:00
value.Confidence = strings.TrimSpace(value.Confidence)
if value.Summary == "" {
return Hourly{}, nil, fmt.Errorf("hourly generated text summary is required")
}
if value.ForecastDiscussion == "" {
return Hourly{}, nil, fmt.Errorf("hourly generated text forecast discussion is required")
2026-06-14 04:46:53 +00:00
}
2026-06-15 12:41:45 +00:00
normalized, err := normalizeGeneratedText(value, "hourly")
2026-06-14 04:46:53 +00:00
if err != nil {
2026-06-15 12:41:45 +00:00
return Hourly{}, nil, err
2026-06-14 04:46:53 +00:00
}
return value, normalized, nil
}