persona-community-5/pkg/persona/spec.go
jordan bd2f591b98
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
ci/woodpecker/manual/woodpecker Pipeline was successful
Initialize project from skeleton template
2026-02-24 07:39:46 +00:00

129 lines
4.5 KiB
Go

package persona
import (
"time"
)
// PersonaSpec is the top-level container for a fully generated persona.
// It wraps all DNA, psychology, lifestyle, image matrix, and video specs
// produced by the personagen pipeline.
type PersonaSpec struct {
// ID is the unique identifier for this persona.
ID string `json:"id" yaml:"id"`
// CreatedAt is when the spec was generated.
CreatedAt time.Time `json:"created_at" yaml:"created_at"`
// DNA contains the immutable biological characteristics.
DNA *DNA `json:"dna" yaml:"dna"`
// Name contains the persona's name.
Name NameSpec `json:"name" yaml:"name"`
// Psychology contains the HEXACO personality profile.
Psychology Psychology `json:"psychology" yaml:"psychology"`
// Lifestyle contains interests, fashion contexts, and vacation style.
Lifestyle Lifestyle `json:"lifestyle" yaml:"lifestyle"`
// ImageMatrix is the 20-position image generation spec.
ImageMatrix []ImageSpec `json:"image_matrix" yaml:"image_matrix"`
// Videos is the 4-motion-type video spec set.
Videos []VideoSpec `json:"videos" yaml:"videos"`
// AnchorImage is the PNG bytes for position 1 (the identity anchor).
// Not persisted inline — stored separately in object storage.
AnchorImage []byte `json:"-" yaml:"-"`
// Attractiveness describes the visual attractiveness tier.
Attractiveness AttractivenessTier `json:"attractiveness" yaml:"attractiveness"`
// GenerationTier describes the content generation tier.
GenerationTier GenerationTier `json:"generation_tier" yaml:"generation_tier"`
// DiversityProfile contains optional diversity metadata.
DiversityProfile *DiversityProfile `json:"diversity_profile,omitempty" yaml:"diversity_profile,omitempty"`
}
// AttractivenessTier describes the visual attractiveness level of a persona.
type AttractivenessTier string
const (
AttractivenessTierAverage AttractivenessTier = "average"
AttractivenessTierAboveAverage AttractivenessTier = "above_average"
AttractivenessTierAttractive AttractivenessTier = "attractive"
AttractivenessTierVery AttractivenessTier = "very_attractive"
AttractivenessTierStunning AttractivenessTier = "stunning"
)
// IsValid returns true if the tier is a recognized value.
func (t AttractivenessTier) IsValid() bool {
switch t {
case AttractivenessTierAverage, AttractivenessTierAboveAverage,
AttractivenessTierAttractive, AttractivenessTierVery, AttractivenessTierStunning:
return true
default:
return false
}
}
// GenerationTier controls the intended generation quality and persona profile depth.
type GenerationTier string
const (
GenerationTierEveryday GenerationTier = "everyday"
GenerationTierInfluencer GenerationTier = "influencer"
GenerationTierSupermodel GenerationTier = "supermodel"
)
// IsValid returns true if the tier is a recognized value.
func (t GenerationTier) IsValid() bool {
switch t {
case GenerationTierEveryday, GenerationTierInfluencer, GenerationTierSupermodel:
return true
default:
return false
}
}
// DiversityProfile contains optional diversity and representation metadata.
type DiversityProfile struct {
// RepresentationNotes describes diversity considerations for this persona.
RepresentationNotes string `json:"representation_notes,omitempty" yaml:"representation_notes,omitempty"`
// CulturalBackground describes cultural heritage highlights.
CulturalBackground string `json:"cultural_background,omitempty" yaml:"cultural_background,omitempty"`
}
// CoreIdentity contains the essential demographic identity data generated
// in Stage 1 of the specgen pipeline.
type CoreIdentity struct {
// Name is the persona's full name.
Name NameSpec `json:"name" yaml:"name"`
// Age in years.
Age int `json:"age" yaml:"age"`
// Gender is the gender identity.
Gender GenderIdentity `json:"gender" yaml:"gender"`
// Ethnicity is the primary ethnic background.
Ethnicity EthnicityCode `json:"ethnicity" yaml:"ethnicity"`
// Nationality is the country/cultural background.
Nationality string `json:"nationality" yaml:"nationality"`
// Sexuality describes the persona's sexuality (for backstory context only).
Sexuality string `json:"sexuality,omitempty" yaml:"sexuality,omitempty"`
// Occupation is the current job or role.
Occupation string `json:"occupation,omitempty" yaml:"occupation,omitempty"`
// BirthCity is where the persona was born.
BirthCity string `json:"birth_city,omitempty" yaml:"birth_city,omitempty"`
// CurrentCity is where the persona currently lives.
CurrentCity string `json:"current_city,omitempty" yaml:"current_city,omitempty"`
}